summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2010-03-05 03:56:04 +0000
committerZach Copley <zach@status.net>2010-03-05 03:56:04 +0000
commitb8001ea1079c4c8895fd2323e1e4a47c0d71fde3 (patch)
treeb732b239bf790c78c90f4c7d3be7044ce9f7da45
parente3c4b0c85d3fbae9604b22d3666fe36a3c1c7551 (diff)
parent064c45890f896f2af8a0231449fa5337bb79c509 (diff)
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
-rw-r--r--EVENTS.txt89
-rw-r--r--README1014
-rw-r--r--actions/accessadminpanel.php24
-rw-r--r--actions/all.php32
-rw-r--r--actions/allrss.php2
-rw-r--r--actions/apidirectmessage.php7
-rw-r--r--actions/apifriendshipsdestroy.php9
-rw-r--r--actions/apigroupcreate.php8
-rw-r--r--actions/apigrouplist.php5
-rw-r--r--actions/apigrouplistall.php12
-rw-r--r--actions/apigroupmembership.php3
-rw-r--r--actions/apistatusnetconfig.php2
-rw-r--r--actions/apitimelinefavorites.php2
-rw-r--r--actions/apitimelinefriends.php6
-rw-r--r--actions/apitimelinegroup.php55
-rw-r--r--actions/apitimelinehome.php6
-rw-r--r--actions/apitimelinementions.php4
-rw-r--r--actions/apitimelinepublic.php6
-rw-r--r--actions/apitimelineretweetedtome.php2
-rw-r--r--actions/apitimelineretweetsofme.php2
-rw-r--r--actions/apitimelinetag.php2
-rw-r--r--actions/apitimelineuser.php64
-rw-r--r--actions/blockedfromgroup.php9
-rw-r--r--actions/deleteuser.php31
-rw-r--r--actions/doc.php7
-rw-r--r--actions/editgroup.php17
-rw-r--r--actions/favor.php2
-rw-r--r--actions/foafgroup.php17
-rw-r--r--actions/grantrole.php99
-rw-r--r--actions/groupdesignsettings.php5
-rw-r--r--actions/grouplogo.php5
-rw-r--r--actions/groupmembers.php9
-rw-r--r--actions/grouprss.php9
-rw-r--r--actions/groups.php18
-rw-r--r--actions/hcard.php120
-rw-r--r--actions/invite.php3
-rw-r--r--actions/joingroup.php32
-rw-r--r--actions/leavegroup.php32
-rw-r--r--actions/newgroup.php10
-rw-r--r--actions/newnotice.php3
-rw-r--r--actions/oauthconnectionssettings.php4
-rw-r--r--actions/postnotice.php11
-rw-r--r--actions/profilesettings.php4
-rw-r--r--actions/public.php1
-rw-r--r--actions/replies.php1
-rw-r--r--actions/revokerole.php99
-rw-r--r--actions/showfavorites.php1
-rw-r--r--actions/showgroup.php33
-rw-r--r--actions/siteadminpanel.php60
-rw-r--r--actions/sitenoticeadminpanel.php201
-rw-r--r--actions/snapshotadminpanel.php251
-rw-r--r--actions/subscribe.php132
-rw-r--r--actions/subscribers.php9
-rw-r--r--actions/subscriptions.php43
-rw-r--r--actions/sup.php4
-rw-r--r--actions/tag.php1
-rw-r--r--actions/twitapisearchatom.php6
-rw-r--r--actions/twitapisearchjson.php1
-rw-r--r--actions/twitapitrends.php2
-rw-r--r--actions/updateprofile.php10
-rw-r--r--actions/useradminpanel.php3
-rw-r--r--actions/usergroups.php30
-rw-r--r--classes/Fave.php50
-rw-r--r--classes/File.php13
-rw-r--r--classes/Inbox.php8
-rw-r--r--classes/Local_group.php46
-rw-r--r--classes/Memcached_DataObject.php6
-rw-r--r--classes/Notice.php383
-rw-r--r--classes/Notice_inbox.php4
-rw-r--r--classes/Notice_tag.php6
-rw-r--r--classes/Profile.php121
-rw-r--r--classes/Profile_role.php17
-rw-r--r--classes/Reply.php10
-rw-r--r--classes/Subscription.php176
-rw-r--r--classes/User.php86
-rw-r--r--classes/User_group.php176
-rw-r--r--classes/statusnet.ini34
-rw-r--r--config.php.sample2
-rw-r--r--db/08to09.sql49
-rw-r--r--db/beta5tobeta6.sql28
-rw-r--r--db/statusnet.sql21
-rw-r--r--index.php105
-rw-r--r--install.php246
-rw-r--r--js/jquery.form.js1292
-rw-r--r--js/jquery.js1048
-rw-r--r--js/jquery.min.js280
-rw-r--r--js/util.js80
-rw-r--r--lib/action.php73
-rw-r--r--lib/activity.php1288
-rw-r--r--lib/adminpanelaction.php104
-rw-r--r--lib/apiaction.php (renamed from lib/api.php)33
-rw-r--r--lib/apiauth.php1
-rw-r--r--lib/atom10entry.php106
-rw-r--r--lib/atom10feed.php43
-rw-r--r--lib/atomgroupnoticefeed.php32
-rw-r--r--lib/atomnoticefeed.php34
-rw-r--r--lib/atomusernoticefeed.php57
-rw-r--r--lib/authenticationplugin.php8
-rw-r--r--lib/authorizationplugin.php2
-rw-r--r--lib/command.php58
-rw-r--r--lib/commandinterpreter.php11
-rw-r--r--lib/common.php15
-rw-r--r--lib/default.php30
-rw-r--r--lib/distribqueuehandler.php28
-rw-r--r--lib/grantroleform.php93
-rw-r--r--lib/imagefile.php135
-rw-r--r--lib/iomaster.php23
-rw-r--r--lib/joinform.php2
-rw-r--r--lib/language.php1
-rw-r--r--lib/leaveform.php2
-rw-r--r--lib/mediafile.php2
-rw-r--r--lib/messageform.php2
-rw-r--r--lib/noticeform.php2
-rw-r--r--lib/noticelist.php65
-rw-r--r--lib/oauthstore.php2
-rw-r--r--lib/omb.php13
-rw-r--r--lib/profileaction.php70
-rw-r--r--lib/profilelist.php7
-rw-r--r--lib/profilequeuehandler.php52
-rw-r--r--lib/queuemanager.php3
-rw-r--r--lib/revokeroleform.php93
-rw-r--r--lib/right.php2
-rw-r--r--lib/router.php10
-rw-r--r--lib/statusnet.php6
-rw-r--r--lib/stompqueuemanager.php119
-rw-r--r--lib/subs.php141
-rw-r--r--lib/taguri.php96
-rw-r--r--lib/userprofile.php26
-rw-r--r--lib/util.php316
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po1445
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po1377
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po1387
-rw-r--r--locale/br/LC_MESSAGES/statusnet.po6106
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po1381
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po1337
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po1659
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po1330
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po1951
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po1502
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po1356
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po1357
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po1340
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po1345
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po1340
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po1369
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po1367
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po1353
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po1363
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po1363
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po1354
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po1339
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po1518
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po1342
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po1354
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po1370
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po1366
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po1405
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po1332
-rw-r--r--locale/statusnet.po1251
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po1333
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po1382
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po1336
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po1334
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po1346
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po1350
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po1330
-rw-r--r--plugins/Blacklist/BlacklistPlugin.php238
-rw-r--r--plugins/Blacklist/blacklistadminpanel.php222
-rw-r--r--plugins/BlogspamNetPlugin.php8
-rw-r--r--plugins/CasAuthentication/CasAuthenticationPlugin.php1
-rw-r--r--plugins/CasAuthentication/caslogin.php15
-rw-r--r--plugins/CasAuthentication/extlib/CAS.php3086
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php378
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php496
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php374
-rw-r--r--plugins/CasAuthentication/extlib/CAS/client.php552
-rw-r--r--plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php277
-rw-r--r--plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php499
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/catalan.php54
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/english.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/french.php54
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/german.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/greek.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/japanese.php12
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/languages.php46
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/spanish.php54
-rw-r--r--plugins/Facebook/FacebookPlugin.php240
-rw-r--r--plugins/Facebook/README84
-rw-r--r--plugins/Facebook/facebookadminpanel.php223
-rw-r--r--plugins/Facebook/locale/Facebook.po231
-rw-r--r--plugins/Gravatar/locale/Gravatar.po8
-rw-r--r--plugins/LdapAuthentication/LdapAuthenticationPlugin.php38
-rw-r--r--plugins/LdapAuthentication/README5
-rw-r--r--plugins/LdapAuthorization/LdapAuthorizationPlugin.php5
-rw-r--r--plugins/LdapAuthorization/README5
-rw-r--r--plugins/Mapstraction/locale/Mapstraction.po22
-rw-r--r--plugins/Mapstraction/map.php2
-rw-r--r--plugins/MobileProfile/MobileProfilePlugin.php13
-rw-r--r--plugins/OStatus/OStatusPlugin.php743
-rw-r--r--plugins/OStatus/README46
-rw-r--r--plugins/OStatus/actions/feedsubsettings.php269
-rw-r--r--plugins/OStatus/actions/groupsalmon.php188
-rw-r--r--plugins/OStatus/actions/hostmeta.php16
-rw-r--r--plugins/OStatus/actions/ostatusgroup.php181
-rw-r--r--plugins/OStatus/actions/ostatusinit.php121
-rw-r--r--plugins/OStatus/actions/ostatussub.php484
-rw-r--r--plugins/OStatus/actions/ownerxrd.php56
-rw-r--r--plugins/OStatus/actions/pushcallback.php60
-rw-r--r--plugins/OStatus/actions/pushhub.php138
-rw-r--r--plugins/OStatus/actions/salmon.php81
-rw-r--r--plugins/OStatus/actions/usersalmon.php212
-rw-r--r--plugins/OStatus/actions/userxrd.php (renamed from plugins/OStatus/actions/webfinger.php)39
-rw-r--r--plugins/OStatus/classes/FeedSub.php452
-rw-r--r--plugins/OStatus/classes/HubSub.php189
-rw-r--r--plugins/OStatus/classes/Magicsig.php233
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php1676
-rw-r--r--plugins/OStatus/classes/Ostatus_source.php114
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA.php524
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php234
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Key.php315
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/KeyPair.php804
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php482
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php313
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php361
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/MathLoader.php135
-rw-r--r--plugins/OStatus/extlib/README9
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser.php351
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/Atom.php365
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php261
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/Exception.php42
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS09.php214
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php62
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS1.php277
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS11.php276
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php151
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php116
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php335
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php171
-rw-r--r--plugins/OStatus/extlib/XML/Feed/Parser/Type.php467
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml28
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml20
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml45
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/delicious.feed177
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/flickr.feed184
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml7
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/hoder.xml102
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml13
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml47
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml30
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml15
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml103
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml62
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml67
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml42
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml226
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/samples/technorati.feed54
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/atom.rnc338
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc113
-rwxr-xr-xplugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc218
-rw-r--r--plugins/OStatus/extlib/hkit/hcard.profile.php105
-rw-r--r--plugins/OStatus/extlib/hkit/hkit.class.php475
-rw-r--r--plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch14
-rw-r--r--plugins/OStatus/js/ostatus.js58
-rw-r--r--plugins/OStatus/lib/activity.php448
-rw-r--r--plugins/OStatus/lib/discovery.php310
-rw-r--r--plugins/OStatus/lib/feeddiscovery.php50
-rw-r--r--plugins/OStatus/lib/feedmunger.php350
-rw-r--r--plugins/OStatus/lib/hubconfqueuehandler.php (renamed from plugins/OStatus/lib/hubverifyqueuehandler.php)7
-rw-r--r--plugins/OStatus/lib/huboutqueuehandler.php18
-rw-r--r--plugins/OStatus/lib/magicenvelope.php215
-rw-r--r--plugins/OStatus/lib/ostatusqueuehandler.php (renamed from plugins/OStatus/lib/hubdistribqueuehandler.php)123
-rw-r--r--plugins/OStatus/lib/pushinqueuehandler.php53
-rw-r--r--plugins/OStatus/lib/salmon.php60
-rw-r--r--plugins/OStatus/lib/salmonaction.php196
-rw-r--r--plugins/OStatus/lib/salmonqueuehandler.php46
-rw-r--r--plugins/OStatus/lib/webfinger.php143
-rw-r--r--plugins/OStatus/lib/xrd.php32
-rw-r--r--plugins/OStatus/lib/xrdaction.php105
-rw-r--r--plugins/OStatus/locale/OStatus.po280
-rw-r--r--plugins/OStatus/scripts/updateostatus.php127
-rw-r--r--plugins/OStatus/tests/ActivityParseTests.php147
-rw-r--r--plugins/OStatus/tests/FeedMungerTest.php147
-rw-r--r--plugins/OStatus/theme/base/css/ostatus.css56
-rw-r--r--plugins/OpenID/OpenIDPlugin.php11
-rw-r--r--plugins/OpenID/doc-src/openid2
-rw-r--r--plugins/OpenID/locale/OpenID.po320
-rw-r--r--plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po8
-rw-r--r--plugins/PubSubHubBub/PubSubHubBubPlugin.php285
-rw-r--r--plugins/PubSubHubBub/publisher.php86
-rw-r--r--plugins/Realtime/RealtimePlugin.php2
-rw-r--r--plugins/Realtime/icon_external.gifbin90 -> 0 bytes
-rw-r--r--plugins/Realtime/icon_pause.gifbin75 -> 0 bytes
-rw-r--r--plugins/Realtime/icon_play.gifbin75 -> 0 bytes
-rw-r--r--plugins/Realtime/realtimeupdate.css9
-rw-r--r--plugins/RegisterThrottle/RegisterThrottlePlugin.php249
-rw-r--r--plugins/RegisterThrottle/Registration_ip.php124
-rw-r--r--plugins/ReverseUsernameAuthentication/README5
-rw-r--r--plugins/Sample/hello.php8
-rw-r--r--plugins/Sample/locale/Sample.po56
-rw-r--r--plugins/SphinxSearch/sphinxsearch.php2
-rw-r--r--plugins/TabFocus/TabFocusPlugin.php57
-rw-r--r--plugins/TabFocus/tabfocus.js7
-rw-r--r--plugins/TwitterBridge/README120
-rw-r--r--plugins/TwitterBridge/TwitterBridgePlugin.php195
-rw-r--r--plugins/TwitterBridge/locale/TwitterBridge.po114
-rw-r--r--plugins/TwitterBridge/twitteradminpanel.php289
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php2
-rw-r--r--plugins/TwitterBridge/twitteroauthclient.php21
-rw-r--r--scripts/createsim.php3
-rwxr-xr-xscripts/init_conversation.php49
-rwxr-xr-xscripts/queuedaemon.php3
-rwxr-xr-xscripts/setup_status_network.sh2
-rwxr-xr-xscripts/update_po_templates.php15
-rw-r--r--scripts/updateavatarurl.php4
-rw-r--r--scripts/updateavatarurl_group.php99
-rw-r--r--tests/ActivityParseTests.php332
-rw-r--r--tests/TagURITest.php36
-rw-r--r--tests/UserFeedParseTest.php131
-rw-r--r--theme/base/css/display.css73
-rw-r--r--theme/base/css/ie.css4
-rw-r--r--theme/base/images/icons/README59
-rw-r--r--theme/base/images/icons/icon_geo.pngbin894 -> 0 bytes
-rw-r--r--theme/base/images/icons/icons-01.gifbin3870 -> 4080 bytes
-rw-r--r--theme/cloudy/css/display.css37
-rw-r--r--theme/default/css/display.css51
-rw-r--r--theme/identica/css/display.css53
-rw-r--r--theme/otalk/css/base.css1211
-rw-r--r--theme/otalk/css/display.css292
-rw-r--r--theme/otalk/css/ie.css9
-rw-r--r--theme/otalk/default-avatar-mini.pngbin646 -> 0 bytes
-rw-r--r--theme/otalk/default-avatar-profile.pngbin2853 -> 0 bytes
-rw-r--r--theme/otalk/default-avatar-stream.pngbin1487 -> 0 bytes
-rw-r--r--theme/otalk/images/illustrations/illu_arrow-left-01.gifbin75 -> 0 bytes
-rw-r--r--theme/otalk/images/illustrations/illu_pattern-01.pngbin3218 -> 0 bytes
-rw-r--r--theme/otalk/logo.pngbin2228 -> 0 bytes
-rw-r--r--theme/pigeonthoughts/css/base.css122
-rw-r--r--theme/pigeonthoughts/css/display.css247
-rw-r--r--theme/pigeonthoughts/logo.pngbin6389 -> 10107 bytes
338 files changed, 59746 insertions, 35729 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index 90242fa13..2da6f3da6 100644
--- a/EVENTS.txt
+++ b/EVENTS.txt
@@ -363,6 +363,14 @@ EndProfileRemoteSubscribe: After showing the link to remote subscription
- $userprofile: UserProfile widget
- &$profile: the profile being shown
+StartGroupSubscribe: Before showing the link to remote subscription
+- $action: the current action
+- $group: the group being shown
+
+EndGroupSubscribe: After showing the link to remote subscription
+- $action: the current action
+- $group: the group being shown
+
StartProfilePageProfileSection: Starting to show the section of the
profile page with the actual profile data;
hook to prevent showing the profile (e.g.)
@@ -729,3 +737,84 @@ StartGetProfileUri: When determining the canonical URI for a given profile
EndGetProfileUri: After determining the canonical URI for a given profile
- $profile: the current profile
- &$uri: the URI
+
+StartFavorNotice: Saving a notice as a favorite
+- $profile: profile of the person faving (can be remote!)
+- $notice: notice being faved
+- &$fave: Favor object; null to start off with, but feel free to override.
+
+EndFavorNotice: After saving a notice as a favorite
+- $profile: profile of the person faving (can be remote!)
+- $notice: notice being faved
+
+StartDisfavorNotice: Saving a notice as a favorite
+- $profile: profile of the person faving (can be remote!)
+- $notice: notice being faved
+- &$result: result of the disfavoring (if you override)
+
+EndDisfavorNotice: After saving a notice as a favorite
+- $profile: profile of the person faving (can be remote!)
+- $notice: notice being faved
+
+StartFindMentions: start finding mentions in a block of text
+- $sender: sender profile
+- $text: plain text version of the notice
+- &$mentions: mentions found so far. Array of arrays; each array
+ has 'mentioned' (array of mentioned profiles), 'url' (url to link as),
+ 'title' (title of the link), 'position' (position of the text to
+ replace), 'text' (text to replace)
+
+EndFindMentions: end finding mentions in a block of text
+- $sender: sender profile
+- $text: plain text version of the notice
+- &$mentions: mentions found so far. Array of arrays; each array
+ has 'mentioned' (array of mentioned profiles), 'url' (url to link as),
+ 'title' (title of the link), 'position' (position of the text to
+ replace), 'text' (text to replace)
+
+StartShowSubscriptionsContent: before showing the subscriptions content
+- $action: the current action
+
+EndShowSubscriptionsContent: after showing the subscriptions content
+- $action: the current action
+
+StartShowUserGroupsContent: before showing the user groups content
+- $action: the current action
+
+EndShowUserGroupsContent: after showing the user groups content
+- $action: the current action
+
+StartShowAllContent: before showing the all (you and friends) content
+- $action: the current action
+
+EndShowAllContent: after showing the all (you and friends) content
+- $action: the current action
+
+StartShowSubscriptionsMiniList: at the start of subscriptions mini list
+- $action: the current action
+
+EndShowSubscriptionsMiniList: at the end of subscriptions mini list
+- $action: the current action
+
+StartShowGroupsMiniList: at the start of groups mini list
+- $action: the current action
+
+EndShowGroupsMiniList: at the end of groups mini list
+- $action: the current action
+
+StartDeleteUserForm: starting the data in the form for deleting a user
+- $action: action being shown
+- $user: user being deleted
+
+EndDeleteUserForm: Ending the data in the form for deleting a user
+- $action: action being shown
+- $user: user being deleted
+
+StartDeleteUser: handling the post for deleting a user
+- $action: action being shown
+- $user: user being deleted
+
+EndDeleteUser: handling the post for deleting a user
+- $action: action being shown
+- $user: user being deleted
+
diff --git a/README b/README
index 75336eb83..45b72e9ac 100644
--- a/README
+++ b/README
@@ -2,40 +2,40 @@
README
------
-StatusNet 0.9.0 ("Stand") Beta 5
-1 Feb 2010
+StatusNet 0.9.0 ("Stand")
+4 Mar 2010
-This is the README file for StatusNet (formerly Laconica), the Open
-Source microblogging platform. It includes installation instructions,
-descriptions of options you can set, warnings, tips, and general info
-for administrators. Information on using StatusNet can be found in the
+This is the README file for StatusNet, the Open Source microblogging
+platform. It includes installation instructions, descriptions of
+options you can set, warnings, tips, and general info for
+administrators. Information on using StatusNet can be found in the
"doc" subdirectory or in the "help" section on-line.
About
=====
-StatusNet (formerly Laconica) is a Free and Open Source microblogging
-platform. It helps people in a community, company or group to exchange
-short (140 characters, by default) messages over the Web. Users can
-choose which people to "follow" and receive only their friends' or
-colleagues' status messages. It provides a similar service to sites
-like Twitter, Jaiku, Yammer, and Plurk.
+StatusNet is a Free and Open Source microblogging platform. It helps
+people in a community, company or group to exchange short (140
+characters, by default) messages over the Web. Users can choose which
+people to "follow" and receive only their friends' or colleagues'
+status messages. It provides a similar service to sites like Twitter,
+Google Buzz, or Yammer.
With a little work, status messages can be sent to mobile phones,
instant messenger programs (GTalk/Jabber), and specially-designed
desktop clients that support the Twitter API.
-StatusNet supports an open standard called OpenMicroBlogging
-<http://openmicroblogging.org/> that lets users on different Web sites
-or in different companies subscribe to each others' notices. It
-enables a distributed social network spread all across the Web.
+StatusNet supports an open standard called OStatus
+<http://ostatus.org/> that lets users in different networks follow
+each other. It enables a distributed social network spread all across
+the Web.
StatusNet was originally developed for the Open Software Service,
Identi.ca <http://identi.ca/>. It is shared with you in hope that you
too make an Open Software Service available to your users. To learn
more, please see the Open Software Service Definition 1.1:
- http://www.opendefinition.org/ossd
+ http://www.opendefinition.org/ossd
StatusNet, Inc. <http://status.net/> also offers this software as a
Web service, requiring no installation on your part. The software run
@@ -77,203 +77,57 @@ for additional terms.
New this version
================
-This is a major feature release since version 0.8.2, released Nov 1 2009.
-It is also a security release since 0.9.0beta4 January 27 2010. Beta
-users are strongly encouraged to upgrade to deal with a security alert.
-
-http://status.net/wiki/Security_alert_0000002
+This is a major feature release since version 0.8.3, released Feb 1
+2010. It is the final release version of 0.9.0, replacing any beta
+versions.
Notable changes this version:
-- Records of deleted notices are stored without the notice content.
-- Much of the optional core featureset has been moved to plugins.
-- OpenID support moved from core to a plugin. Helps test the strength of
- our plugin architecture and makes it easy to disable this
- functionality for e.g. intranet sites.
-- Many additional hook events (see EVENTS.txt for details).
-- OMB 0.1 support re-implemented using libomb.
-- Re-structure database so notices, messages, bios and group
- descriptions can be over 140 characters. Limit defined by
- site administrator as configuration option; can be unlimited.
-- Configuration data now optionally stored in the database, which
- overrides any settings in config files.
-- Twitter integration re-implemented as a plugin.
-- Facebook integration re-implemented as a plugin.
-- Role-based authorization framework. Users can have named roles, and
- roles can have rights (e.g., to delete notices, change configuration
- data, or ban uncooperative users). Default roles 'admin' (for
- configuration) and 'moderator' (for community management) added.
-- Plugin for PubSubHubBub (PuSH) support.
-- Considerable code style cleanup to meet PEAR code standards.
-- Made a common library for HTTP-client access which uses available
- HTTP libraries where possible.
-- Added statuses/home_timeline method to API.
-- Hooks for plugins to handle notices offline, either by defining
- their own queue handler scripts or to use a default plugin queue
- handler script.
-- Plugins can now modify the database schema, adding their own tables
- or modifying existing ones.
-- Groups API.
-- Twitter API supports Web caching for some methods.
-- Twitter API refactored into one-action-per-method.
-- Realtime plugin supports a tear-off window.
-- FOAF for groups.
-- Moved all JavaScript tags to just before </body> by default,
- significantly speeding up apparent page load time.
-- Added a Realtime plugin for Orbited server.
-- Added a mobile plugin to give a more mobile-phone-friendly layout
- when a mobile browser is detected.
-- Use CSS sprites for most common icons.
-- Fixes for images and buttons on Web output.
-- New plugin requires that users validate their email before posting.
-- New plugin UserFlag lets users flag other profiles for review.
-- Considerably better i18n support. Use TranslateWiki to update
- translations.
-- Notices and profiles now store location information.
-- New plugin, Geonames, for turning location names and lat/long pairs
- into structured IDs and vice versa. Architecture reusable for other
- systems.
-- Better check of license compatibility between site licenses.
-- Some improvements in XMPP output.
-- Media upload in the API.
-- Replies appear in the user's inbox.
-- Improved the UI on the bookmarklet.
-- StatusNet identities can be used as OpenID identities.
-- Script to register a user.
-- Script to make someone a group admin.
-- Script to make someone a site admin or moderator.
-- 'login' command.
-- Pluggable authentication.
-- LDAP authentication plugin.
-- Script for console interaction with the site (!).
-- Users don't see group posts from people they've blocked.
-- Admin panel interface for changing site configuration.
-- Users can be sandboxed (limited contributions) or silenced
- (no contributions) by moderators.
-- Many changes to make language usage more consistent.
-- Sphinx search moved to a plugin.
-- GeoURL plugin.
-- Profile and group lists support hAtom.
-- Massive refactoring of util.js.
-- Mapstraction plugin to show maps on inbox and profile pages.
-- Play/pause buttons for realtime notices.
-- Support for geo microformat.
-- Partial support for feed subscriptions, RSSCloud, PubSubHubBub.
-- Support for geolocation in browser (Chrome, Firefox).
-- Quit trying to negotiate HTML format. Always use text/html.
- We lose, and so do Web standards. Boo.
-- Better logging of request info.
-- Better output for errors in Web interface.
-- No longer store .mo files; these need to be generated.
-- Minify plugin.
-- Events to allow pluginizing logger.
-- New framework for plugin localization.
-- Gravatar plugin.
-- Add support for "repeats" (similar to Twitter's "retweets").
-- Support for repeats in Twitter API.
-- Better notification of direct messages.
-- New plugin to add "powered by StatusNet" to logo.
-- Returnto works for private sites.
-- Localisation updates, including new Persian translation.
-- CAS authentication plugin
-- Get rid of DB_DataObject native cache (big memory leaker)
-- setconfig.php script to set configuration variables
-- Blacklist plugin, to blacklist URLs and nicknames
-- Users can set flag whether they want to share location
- both in notice form (for one notice) and profile settings
- (any notice)
-- notice inboxes moved from normalized notice_inbox table to
- denormalized inbox table
-- Automatic compression of Memcache
-- Memory caching pluginized
-- Memcache, XCache, APC and Diskcache plugins
-- A script to update user locations
-- cache empty query results
-- A sample plugin to show best plugin practices
-- CacheLog plugin to debug cache accesses
-- Require users to login to view attachments on private sites
-- Plugin to use Mollom spam detection service
-- Plugin for RSSCloud
-- Add an array of default plugins
-- A version action to give credit to contributors and plugin
- developers
-- Daemon to read IMAP mailbox instead of using a mailbox script
-- Pass session information between SSL and non-SSL server
- when SSL set to 'sometimes'
-- Major refactoring of queue handlers to manage very
- large hosting site (like status.net)
-- SubscriptionThrottle plugin to prevent subscription spamming
-- Don't enqueue into plugin or SMS queues when disabled (breaks unqueuehandler if SMS queue isn't attached)
-- Improve name validation checks on local File references
-- fix local file include vulnerability in doc.php
-- Reusing fixed selector name for 'processing' in util.js
-- Removed hAtom pattern from registration page.
-- restructuring of User::registerNew() lost password munging
-- Add a script to clear the cache for a given key
-- buggy fetch for site owner
-- Added missing concat of </li> in Realtime response
-- Updated XHR binded events to work better in jQuery 1.4.1. Using .live() for event delegation instead of jQuery.data() and checking to see if an element was previously binded.
-- Updated jQuery Form Plugin from v2.17 to v2.36
-- Updated jQuery JavaScript Library from v1.3.2 to v1.4.1
-- move schema.type.php to typeschema.php like other files
-- Add Really Simple Discovery (RSD) support
-- Add a robots.txt URL to the site root
-- error clearing tags for profiles from memcached
-- on exceptions, stomp logs the error and reenqueues
-- add lat, lon, location and remove closing tag from geocode.php
-- Use passed-in lat long in geocode.php
-- better handling of null responses from geonames.org
-- Globalized form notice data geo values
-- Using jQuery chaining in FormNoticeXHR
-- Using form object instead of form_id and find(). Slightly faster and easier to read.
-- removed describeTable from base class, and fixed it up in pgsql
-- getTableDef() mostly working in postgres
-- move the schema DDL sql off into seperate files for each db we support
-- plugin to limit number of registered users
-- add hooks for user registration
-- live fast, die young in bash scripts
-- for single-user mode, retrieve either site owner or defined nickname
-- method to get the site owner
-- define a constant for the 'owner' role of a site
-- add simple cache getter/setter static functions to Memcached_DataObject
-- Adds notice author's name to @title in Realtime response
-- Hides .author from XHR response in showstream
-- Hides .author from XHR response in showstream
-- Fix more fatal errors in queue edge cases
-- Don't attempt to resend XMPP messages that can't be broadcast due to the profile being deleted.
-- Wrap each bit of distrib queue handler's saving operation in a try/catch; log exceptions but let everything else continue.
-- Log exceptions from queuedaemon.php if they're not already caught
-- Move sessions settings to its own panel
-- Fixes for status_network db object .ini and tag setter script
-- Add a script to set tags for sites
-- Adjust API authentication to also check for OAuth protocol params in the HTTP Authorization header, as defined in OAuth HTTP Authorization Scheme.
-- Last-chance distribution if enqueueing fails
-- Manual failover for stomp queues.
-- lost config in index.php made all traffic go to master
-- "Revert "move RW setup above user get in index.php so remember_me works""
-- Revert "move RW setup above user get in index.php so remember_me works"
-- move RW setup above user get in index.php so remember_me works
-- hide most DB_DataObject errors
-- always set up database_rw, regardless, so cached sessions work
-- update mysqltimestamps on insert and update
-- additional debugging data for Sessions
-- 'Sign in with Twitter' button img
-- Update to biz theme
-- Remove redundant session token field from form (was already being added by base class).
-- 'Sign in with Twitter' button img
-- Can now set $config['queue']['stomp_persistent'] = false; to explicitly disable persistence when we queue items
-- Showing processing indicator for form_repeat on submit instead of form
-- Removed avatar from repeat of username (matches noticelist)
-- Removed unused variable assignment for avatar URL and added missing fn
-- Don't preemptively close existing DB connections for web views (needed to keep # of conns from going insane on multi-site queue daemons, so just doing for CLI) May, or may not, help with mystery session problems
-- dropping the setcookie() call from common_ensure_session() since we're pretty sure it's unnecessary
-- append '/' on cookie path for now (may still need some refactoring)
-- set session cookie correctly
-- Fix for Mapstraction plugin's zoomed map links
-- debug log line for control channel sub
-- Move faceboookapp.js to the Facebook plugin
-- fix for fix for bad realtime JS load
-- default 24-hour expiry on Memcached objects where not specified.
+- Support for the new distributed status update standard OStatus
+ <http://ostatus.org>, based on PubSubHubbub, Salmon, Webfinger,
+ and Activity Streams.
+- Support for location using the Geolocation API. Notices are (optionally)
+ marked with lat-long information with geo microformats, and can be shown
+ on a map.
+- No fixed content size. Notice size is configurable, from 1 to
+ unlimited number of characters. Default is still 140!
+- An authorization framework, allowing different levels of users.
+- A Web-based administration panel.
+- A moderation system that lets site moderators sandbox, silence,
+ or delete uncooperative users.
+- A flag system that lets users flag profiles for moderator review.
+- Support for OAuth <http://oauth.net> authentication in the Twitter
+ API.
+- User roles system that lets the owner of the site to assign
+ administrator and moderator roles to other users.
+- A pluggable authentication system.
+- An authentication plugin for LDAP servers.
+- Many features that were core in 0.8.x are now plugins, such
+ as OpenID, Twitter integration, Facebook integration
+- A much-improved offline processing system
+- In-browser "realtime" updates using a number of realtime
+ servers (Meteor, Orbited, Cometd)
+- A plugin to provide an interface optimized for mobile browsers
+- Support for Facebook Connect
+- Support for logging in with a Twitter account
+- Vastly improved translation with additional languages and
+ translation in plugins
+- Support for all-SSL instances
+- Core support for "repeats" (like Twitter's "retweets")
+- Pluggable caching system, with plugins for Memcached,
+ APC, XCache, and a disk-based cache
+- Plugin to support RSSCloud
+- A framework for adding advertisements to a public site,
+ and plugins for Google AdSense and OpenX server
+- Plugins to throttle excessive subscriptions and registrations.
+- A plugin to blacklist particular URLs or nicknames.
+
+There are also literally thousands of bugs fixed and minor features
+added. A full changelog is available at http://status.net/wiki/StatusNet_0.9.0.
+
+Under the covers, the software has a vastly improved plugin and
+extension mechanism that makes writing powerful and flexible additions
+to the core functionality much easier.
Prerequisites
=============
@@ -312,6 +166,8 @@ For some functionality, you will also need the following extensions:
- Sphinx Search. A client for the sphinx server, an alternative
to MySQL or Postgresql fulltext search. You will also need a
Sphinx server to serve the search queries.
+- bcmath or gmp. For Salmon signatures (part of OStatus). Needed
+ if you have OStatus configured.
You will almost definitely get 2-3 times better performance from your
site if you install a PHP bytecode cache/accelerator. Some well-known
@@ -361,6 +217,9 @@ and the URLs are listed here for your convenience.
- PEAR Validate is an oEmbed dependency.
- PEAR Net_URL2 is an oEmbed dependency.
- Console_GetOpt for parsing command-line options.
+- libomb. a library for implementing OpenMicroBlogging 0.1, the
+ predecessor to OStatus.
+- HTTP_Request2, a library for making HTTP requests.
A design goal of StatusNet is that the basic Web functionality should
work on even the most restrictive commercial hosting services.
@@ -378,9 +237,9 @@ especially if you've previously installed PHP/MySQL packages.
1. Unpack the tarball you downloaded on your Web server. Usually a
command like this will work:
- tar zxf statusnet-0.8.2.tar.gz
+ tar zxf statusnet-0.9.0.tar.gz
- ...which will make a statusnet-0.8.2 subdirectory in your current
+ ...which will make a statusnet-0.9.0 subdirectory in your current
directory. (If you don't have shell access on your Web server, you
may have to unpack the tarball on your local computer and FTP the
files to the server.)
@@ -388,34 +247,34 @@ especially if you've previously installed PHP/MySQL packages.
2. Move the tarball to a directory of your choosing in your Web root
directory. Usually something like this will work:
- mv statusnet-0.8.2 /var/www/mublog
+ mv statusnet-0.9.0 /var/www/statusnet
- This will make your StatusNet instance available in the mublog path of
- your server, like "http://example.net/mublog". "microblog" or
+ This will make your StatusNet instance available in the statusnet path of
+ your server, like "http://example.net/statusnet". "microblog" or
"statusnet" might also be good path names. If you know how to
configure virtual hosts on your web server, you can try setting up
"http://micro.example.net/" or the like.
3. Make your target directory writeable by the Web server.
- chmod a+w /var/www/mublog/
+ chmod a+w /var/www/statusnet/
On some systems, this will probably work:
- chgrp www-data /var/www/mublog/
- chmod g+w /var/www/mublog/
+ chgrp www-data /var/www/statusnet/
+ chmod g+w /var/www/statusnet/
If your Web server runs as another user besides "www-data", try
that user's default group instead. As a last resort, you can create
- a new group like "mublog" and add the Web server's user to the group.
+ a new group like "statusnet" and add the Web server's user to the group.
4. You should also take this moment to make your avatar, background, and
file subdirectories writeable by the Web server. An insecure way to do
this is:
- chmod a+w /var/www/mublog/avatar
- chmod a+w /var/www/mublog/background
- chmod a+w /var/www/mublog/file
+ chmod a+w /var/www/statusnet/avatar
+ chmod a+w /var/www/statusnet/background
+ chmod a+w /var/www/statusnet/file
You can also make the avatar, background, and file directories
writeable by the Web server group, as noted above.
@@ -423,7 +282,7 @@ especially if you've previously installed PHP/MySQL packages.
5. Create a database to hold your microblog data. Something like this
should work:
- mysqladmin -u "username" --password="password" create statusnet
+ mysqladmin -u "username" --password="password" create statusnet
Note that StatusNet must have its own database; you can't share the
database with another program. You can name it whatever you want,
@@ -437,17 +296,17 @@ especially if you've previously installed PHP/MySQL packages.
database. If you have shell access, this will probably work from the
MySQL shell:
- GRANT ALL on statusnet.*
- TO 'lacuser'@'localhost'
- IDENTIFIED BY 'lacpassword';
+ GRANT ALL on statusnet.*
+ TO 'statusnetuser'@'localhost'
+ IDENTIFIED BY 'statusnetpassword';
- You should change 'lacuser' and 'lacpassword' to your preferred new
+ You should change 'statusnetuser' and 'statusnetpassword' to your preferred new
username and password. You may want to test logging in to MySQL as
this new user.
7. In a browser, navigate to the StatusNet install script; something like:
- http://yourserver.example.com/mublog/install.php
+ http://yourserver.example.com/statusnet/install.php
Enter the database connection information and your site name. The
install program will configure your site and install the initial,
@@ -467,16 +326,16 @@ By default, StatusNet will use URLs that include the main PHP program's
name in them. For example, a user's home profile might be
found at:
- http://example.org/mublog/index.php/mublog/fred
+ http://example.org/statusnet/index.php/statusnet/fred
On certain systems that don't support this kind of syntax, they'll
look like this:
- http://example.org/mublog/index.php?p=mublog/fred
+ http://example.org/statusnet/index.php?p=statusnet/fred
It's possible to configure the software so it looks like this instead:
- http://example.org/mublog/fred
+ http://example.org/statusnet/fred
These "fancy URLs" are more readable and memorable for users. To use
fancy URLs, you must either have Apache 2.x with .htaccess enabled and
@@ -501,7 +360,7 @@ your server.
You should now be able to navigate to a "fancy" URL on your server,
like:
- http://example.net/mublog/main/register
+ http://example.net/statusnet/main/register
If you changed your HTTP server configuration, you may need to restart
the server first.
@@ -512,11 +371,11 @@ directory is 'All' in your Apache configuration file. This is usually
/etc/apache2/sites-available/default. See the Apache documentation for
.htaccess files for more details:
- http://httpd.apache.org/docs/2.2/howto/htaccess.html
+ http://httpd.apache.org/docs/2.2/howto/htaccess.html
Also, check that mod_rewrite is installed and enabled:
- http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
+ http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
Sphinx
------
@@ -524,8 +383,8 @@ Sphinx
To use a Sphinx server to search users and notices, you'll need to
enable the SphinxSearch plugin. Add to your config.php:
- addPlugin('SphinxSearch');
- $config['sphinx']['server'] = 'searchhost.local';
+ addPlugin('SphinxSearch');
+ $config['sphinx']['server'] = 'searchhost.local';
You also need to install, compile and enable the sphinx pecl extension for
php on the client side, which itself depends on the sphinx development files.
@@ -553,33 +412,33 @@ For this to work, there *must* be a domain or sub-domain for which all
1. Run the SQL script carrier.sql in your StatusNet database. This will
usually work:
- mysql -u "lacuser" --password="lacpassword" statusnet < db/carrier.sql
+ mysql -u "statusnetuser" --password="statusnetpassword" statusnet < db/carrier.sql
This will populate your database with a list of wireless carriers
that support email SMS gateways.
2. Make sure the maildaemon.php file is executable:
- chmod +x scripts/maildaemon.php
+ chmod +x scripts/maildaemon.php
Note that "daemon" is kind of a misnomer here; the script is more
of a filter than a daemon.
2. Edit /etc/aliases on your mail server and add the following line:
- *: /path/to/statusnet/scripts/maildaemon.php
+ *: /path/to/statusnet/scripts/maildaemon.php
3. Run whatever code you need to to update your aliases database. For
many mail servers (Postfix, Exim, Sendmail), this should work:
- newaliases
+ newaliases
You may need to restart your mail server for the new database to
take effect.
4. Set the following in your config.php file:
- $config['mail']['domain'] = 'yourdomain.example.net';
+ $config['mail']['domain'] = 'yourdomain.example.net';
At this point, post-by-email and post-by-SMS-gateway should work. Note
that if your mail server is on a different computer from your email
@@ -633,7 +492,7 @@ search, indexing, bridging, or other cool services.
To configure a downstream site to receive your public stream, add
their "JID" (Jabber ID) to your config.php as follows:
- $config['xmpp']['public'][] = 'downstream@example.net';
+ $config['xmpp']['public'][] = 'downstream@example.net';
(Don't miss those square brackets at the end.) Note that your XMPP
broadcasting must be configured as mentioned above. Although you can
@@ -643,7 +502,7 @@ consider setting up queues and daemons.
Queues and daemons
------------------
-Some activities that StatusNet needs to do, like broadcast OMB, SMS,
+Some activities that StatusNet needs to do, like broadcast OStatus, SMS,
and XMPP messages, can be 'queued' and done by off-line bots instead.
For this to work, you must be able to run long-running offline
processes, either on your main Web server or on another server you
@@ -662,21 +521,19 @@ server is probably a good idea for high-volume sites.
3. In your config.php files (both the Web server and the queues
server!), set the following variable:
- $config['queue']['enabled'] = true;
+ $config['queue']['enabled'] = true;
You may also want to look at the 'daemon' section of this file for
more daemon options. Note that if you set the 'user' and/or 'group'
options, you'll need to create that user and/or group by hand.
They're not created automatically.
-4. On the queues server, run the command scripts/startdaemons.sh. It
- needs as a parameter the install path; if you run it from the
- StatusNet dir, "." should suffice.
+4. On the queues server, run the command scripts/startdaemons.sh.
This will run the queue handlers:
* queuedaemon.php - polls for queued items for inbox processing and
- pushing out to OMB, SMS, XMPP, etc.
+ pushing out to OStatus, SMS, XMPP, etc.
* xmppdaemon.php - listens for new XMPP messages from users and stores
them as notices in the database; also pulls queued XMPP output from
queuedaemon.php to push out to clients.
@@ -685,6 +542,9 @@ These two daemons will automatically restart in most cases of failure
including memory leaks (if a memory_limit is set), but may still die
or behave oddly if they lose connections to the XMPP or queue servers.
+Additional daemons may be also started by this script for certain
+plugins, such as the Twitter bridge.
+
It may be a good idea to use a daemon-monitoring service, like 'monit',
to check their status and keep them running.
@@ -693,46 +553,11 @@ default. This can be useful for starting, stopping, and monitoring the
daemons.
Since version 0.8.0, it's now possible to use a STOMP server instead of
-our kind of hacky home-grown DB-based queue solution. See the "queues"
-config section below for how to configure to use STOMP. As of this
-writing, the software has been tested with ActiveMQ.
-
-Sitemaps
---------
-
-Sitemap files <http://sitemaps.org/> are a very nice way of telling
-search engines and other interested bots what's available on your site
-and what's changed recently. You can generate sitemap files for your
-StatusNet instance.
-
-1. Choose your sitemap URL layout. StatusNet creates a number of
- sitemap XML files for different parts of your site. You may want to
- put these in a sub-directory of your StatusNet directory to avoid
- clutter. The sitemap index file tells the search engines and other
- bots where to find all the sitemap files; it *must* be in the main
- installation directory or higher. Both types of file must be
- available through HTTP.
+our kind of hacky home-grown DB-based queue solution. This is strongly
+recommended for best response time, especially when using XMPP.
-2. To generate your sitemaps, run the following command on your server:
-
- php scripts/sitemap.php -f index-file-path -d sitemap-directory -u URL-prefix-for-sitemaps
-
- Here, index-file-path is the full path to the sitemap index file,
- like './sitemapindex.xml'. sitemap-directory is the directory where
- you want the sitemaps stored, like './sitemaps/' (make sure the dir
- exists). URL-prefix-for-sitemaps is the full URL for the sitemap dir,
- typically something like <http://example.net/mublog/sitemaps/>.
-
-You can use several methods for submitting your sitemap index to
-search engines to get your site indexed. One is to add a line like the
-following to your robots.txt file:
-
- Sitemap: /mublog/sitemapindex.xml
-
-This is a good idea for letting *all* Web spiders know about your
-sitemap. You can also submit sitemap files to major search engines
-using their respective "Webmaster centres"; see sitemaps.org for links
-to these resources.
+See the "queues" config section below for how to configure to use STOMP.
+As of this writing, the software has been tested with ActiveMQ 5.3.
Themes
------
@@ -755,15 +580,15 @@ following files:
display.css: a CSS2 file for "default" styling for all browsers.
ie6.css: a CSS2 file for override styling for fixing up Internet
- Explorer 6.
+ Explorer 6.
ie7.css: a CSS2 file for override styling for fixing up Internet
- Explorer 7.
+ Explorer 7.
logo.png: a logo image for the site.
default-avatar-profile.png: a 96x96 pixel image to use as the avatar for
- users who don't upload their own.
+ users who don't upload their own.
default-avatar-stream.png: Ditto, but 48x48. For streams of notices.
default-avatar-mini.png: Ditto ditto, but 24x24. For subscriptions
- listing on profile pages.
+ listing on profile pages.
You may want to start by copying the files from the default theme to
your own directory.
@@ -803,30 +628,26 @@ not visible to non-logged-in users. This might be useful for
workgroups who want to share a microblogging site for project
management, but host it on a public server.
-Note that this is an experimental feature; total privacy is not
-guaranteed or ensured. Also, privacy is all-or-nothing for a site; you
-can't have some accounts or notices private, and others public.
-Finally, the interaction of private sites with OpenMicroBlogging is
-undefined. Remote users won't be able to subscribe to users on a
-private site, but users of the private site may be able to subscribe
-to users on a remote site. (Or not... it's not well tested.) The
-"proper behaviour" hasn't been defined here, so handle with care.
+Total privacy is not guaranteed or ensured. Also, privacy is
+all-or-nothing for a site; you can't have some accounts or notices
+private, and others public. The interaction of private sites
+with OStatus is undefined.
Access to file attachments can also be restricted to logged-in users only.
1. Add a directory outside the web root where your file uploads will be
stored. Usually a command like this will work:
- mkdir /var/www/mublog-files
+ mkdir /var/www/statusnet-files
2. Make the file uploads directory writeable by the web server. An
insecure way to do this is:
- chmod a+x /var/www/mublog-files
+ chmod a+x /var/www/statusnet-files
3. Tell StatusNet to use this directory for file uploads. Add a line
like this to your config.php:
- $config['attachments']['dir'] = '/var/www/mublog-files';
+ $config['attachments']['dir'] = '/var/www/statusnet-files';
Upgrading
=========
@@ -841,7 +662,7 @@ with this situation.
If you've been using StatusNet 0.7, 0.6, 0.5 or lower, or if you've
been tracking the "git" version of the software, you will probably
want to upgrade and keep your existing data. There is no automated
-upgrade procedure in StatusNet 0.8.2. Try these step-by-step
+upgrade procedure in StatusNet 0.9.0. Try these step-by-step
instructions; read to the end first before trying them.
0. Download StatusNet and set up all the prerequisites as if you were
@@ -861,29 +682,29 @@ instructions; read to the end first before trying them.
maildaemon.php file, and running something like "newaliases".
5. Once all writing processes to your site are turned off, make a
final backup of the Web directory and database.
-6. Move your StatusNet directory to a backup spot, like "mublog.bak".
-7. Unpack your StatusNet 0.8.2 tarball and move it to "mublog" or
+6. Move your StatusNet directory to a backup spot, like "statusnet.bak".
+7. Unpack your StatusNet 0.9.0 tarball and move it to "statusnet" or
wherever your code used to be.
8. Copy the config.php file and avatar directory from your old
directory to your new directory.
9. Copy htaccess.sample to .htaccess in the new directory. Change the
RewriteBase to use the correct path.
10. Rebuild the database. (You can safely skip this step and go to #12
- if you're upgrading from another 0.8.x version).
+ if you're upgrading from another 0.9.x version).
NOTE: this step is destructive and cannot be
reversed. YOU CAN EASILY DESTROY YOUR SITE WITH THIS STEP. Don't
do it without a known-good backup!
- If your database is at version 0.7.4, you can run a special upgrade
- script:
+ If your database is at version 0.8.0 or above, you can run a
+ special upgrade script:
- mysql -u<rootuser> -p<rootpassword> <database> db/074to080.sql
+ mysql -u<rootuser> -p<rootpassword> <database> db/08to09.sql
Otherwise, go to your StatusNet directory and AFTER YOU MAKE A
BACKUP run the rebuilddb.sh script like this:
- ./scripts/rebuilddb.sh rootuser rootpassword database db/statusnet.sql
+ ./scripts/rebuilddb.sh rootuser rootpassword database db/statusnet.sql
Here, rootuser and rootpassword are the username and password for a
user who can drop and create databases as well as tables; typically
@@ -943,10 +764,17 @@ Configuration options
The main configuration file for StatusNet (excepting configurations for
dependency software) is config.php in your StatusNet directory. If you
-edit any other file in the directory, like lib/common.php (where most
+edit any other file in the directory, like lib/default.php (where most
of the defaults are defined), you will lose your configuration options
in any upgrade, and you will wish that you had been more careful.
+Starting with version 0.9.0, a Web based configuration panel has been
+added to StatusNet. The preferred method for changing config options is
+to use this panel.
+
+A command-line script, setconfig.php, can be used to set individual
+configuration options. It's in the scripts/ directory.
+
Starting with version 0.7.1, you can put config files in the
/etc/statusnet/ directory on your server, if it exists. Config files
will be included in this order:
@@ -960,7 +788,7 @@ Almost all configuration options are made through a two-dimensional
associative array, cleverly named $config. A typical configuration
line will be:
- $config['section']['option'] = value;
+ $config['section']['option'] = value;
For brevity, the following documentation describes each section and
option.
@@ -972,79 +800,79 @@ This section is a catch-all for site-wide variables.
name: the name of your site, like 'YourCompany Microblog'.
server: the server part of your site's URLs, like 'example.net'.
-path: The path part of your site's URLs, like 'mublog' or ''
- (installed in root).
+path: The path part of your site's URLs, like 'statusnet' or ''
+ (installed in root).
fancy: whether or not your site uses fancy URLs (see Fancy URLs
- section above). Default is false.
+ section above). Default is false.
logfile: full path to a file for StatusNet to save logging
- information to. You may want to use this if you don't have
- access to syslog.
+ information to. You may want to use this if you don't have
+ access to syslog.
logdebug: whether to log additional debug info like backtraces on
- hard errors. Default false.
+ hard errors. Default false.
locale_path: full path to the directory for locale data. Unless you
- store all your locale data in one place, you probably
- don't need to use this.
+ store all your locale data in one place, you probably
+ don't need to use this.
language: default language for your site. Defaults to US English.
- Note that this is overridden if a user is logged in and has
- selected a different language. It is also overridden if the
- user is NOT logged in, but their browser requests a different
- langauge. Since pretty much everybody's browser requests a
- language, that means that changing this setting has little or
- no effect in practice.
+ Note that this is overridden if a user is logged in and has
+ selected a different language. It is also overridden if the
+ user is NOT logged in, but their browser requests a different
+ langauge. Since pretty much everybody's browser requests a
+ language, that means that changing this setting has little or
+ no effect in practice.
languages: A list of languages supported on your site. Typically you'd
- only change this if you wanted to disable support for one
- or another language:
- "unset($config['site']['languages']['de'])" will disable
- support for German.
+ only change this if you wanted to disable support for one
+ or another language:
+ "unset($config['site']['languages']['de'])" will disable
+ support for German.
theme: Theme for your site (see Theme section). Two themes are
- provided by default: 'default' and 'stoica' (the one used by
- Identi.ca). It's appreciated if you don't use the 'stoica' theme
- except as the basis for your own.
+ provided by default: 'default' and 'stoica' (the one used by
+ Identi.ca). It's appreciated if you don't use the 'stoica' theme
+ except as the basis for your own.
email: contact email address for your site. By default, it's extracted
- from your Web server environment; you may want to customize it.
+ from your Web server environment; you may want to customize it.
broughtbyurl: name of an organization or individual who provides the
- service. Each page will include a link to this name in the
- footer. A good way to link to the blog, forum, wiki,
- corporate portal, or whoever is making the service available.
+ service. Each page will include a link to this name in the
+ footer. A good way to link to the blog, forum, wiki,
+ corporate portal, or whoever is making the service available.
broughtby: text used for the "brought by" link.
timezone: default timezone for message display. Users can set their
- own time zone. Defaults to 'UTC', which is a pretty good default.
+ own time zone. Defaults to 'UTC', which is a pretty good default.
closed: If set to 'true', will disallow registration on your site.
- This is a cheap way to restrict accounts to only one
- individual or group; just register the accounts you want on
- the service, *then* set this variable to 'true'.
+ This is a cheap way to restrict accounts to only one
+ individual or group; just register the accounts you want on
+ the service, *then* set this variable to 'true'.
inviteonly: If set to 'true', will only allow registration if the user
- was invited by an existing user.
+ was invited by an existing user.
private: If set to 'true', anonymous users will be redirected to the
- 'login' page. Also, API methods that normally require no
- authentication will require it. Note that this does not turn
- off registration; use 'closed' or 'inviteonly' for the
- behaviour you want.
+ 'login' page. Also, API methods that normally require no
+ authentication will require it. Note that this does not turn
+ off registration; use 'closed' or 'inviteonly' for the
+ behaviour you want.
notice: A plain string that will appear on every page. A good place
- to put introductory information about your service, or info about
- upgrades and outages, or other community info. Any HTML will
- be escaped.
+ to put introductory information about your service, or info about
+ upgrades and outages, or other community info. Any HTML will
+ be escaped.
logo: URL of an image file to use as the logo for the site. Overrides
- the logo in the theme, if any.
+ the logo in the theme, if any.
ssl: Whether to use SSL and https:// URLs for some or all pages.
- Possible values are 'always' (use it for all pages), 'never'
- (don't use it for any pages), or 'sometimes' (use it for
- sensitive pages that include passwords like login and registration,
- but not for regular pages). Default to 'never'.
+ Possible values are 'always' (use it for all pages), 'never'
+ (don't use it for any pages), or 'sometimes' (use it for
+ sensitive pages that include passwords like login and registration,
+ but not for regular pages). Default to 'never'.
sslserver: use an alternate server name for SSL URLs, like
- 'secure.example.org'. You should be careful to set cookie
- parameters correctly so that both the SSL server and the
- "normal" server can access the session cookie and
- preferably other cookies as well.
+ 'secure.example.org'. You should be careful to set cookie
+ parameters correctly so that both the SSL server and the
+ "normal" server can access the session cookie and
+ preferably other cookies as well.
shorturllength: Length of URL at which URLs in a message exceeding 140
- characters will be sent to the user's chosen
- shortening service.
+ characters will be sent to the user's chosen
+ shortening service.
dupelimit: minimum time allowed for one person to say the same thing
- twice. Default 60s. Anything lower is considered a user
- or UI error.
+ twice. Default 60s. Anything lower is considered a user
+ or UI error.
textlimit: default max size for texts in the site. Defaults to 140.
- 0 means no limit. Can be fine-tuned for notices, messages,
- profile bios and group descriptions.
+ 0 means no limit. Can be fine-tuned for notices, messages,
+ profile bios and group descriptions.
db
--
@@ -1054,44 +882,44 @@ DB_DataObject (see <http://ur1.ca/7xp>). The ones that you may want to
set are listed below for clarity.
database: a DSN (Data Source Name) for your StatusNet database. This is
- in the format 'protocol://username:password@hostname/databasename',
- where 'protocol' is 'mysql' or 'mysqli' (or possibly 'postgresql', if you
- really know what you're doing), 'username' is the username,
- 'password' is the password, and etc.
+ in the format 'protocol://username:password@hostname/databasename',
+ where 'protocol' is 'mysql' or 'mysqli' (or possibly 'postgresql', if you
+ really know what you're doing), 'username' is the username,
+ 'password' is the password, and etc.
ini_yourdbname: if your database is not named 'statusnet', you'll need
- to set this to point to the location of the
- statusnet.ini file. Note that the real name of your database
- should go in there, not literally 'yourdbname'.
+ to set this to point to the location of the
+ statusnet.ini file. Note that the real name of your database
+ should go in there, not literally 'yourdbname'.
db_driver: You can try changing this to 'MDB2' to use the other driver
- type for DB_DataObject, but note that it breaks the OpenID
- libraries, which only support PEAR::DB.
+ type for DB_DataObject, but note that it breaks the OpenID
+ libraries, which only support PEAR::DB.
debug: On a database error, you may get a message saying to set this
- value to 5 to see debug messages in the browser. This breaks
- just about all pages, and will also expose the username and
- password
+ value to 5 to see debug messages in the browser. This breaks
+ just about all pages, and will also expose the username and
+ password
quote_identifiers: Set this to true if you're using postgresql.
type: either 'mysql' or 'postgresql' (used for some bits of
- database-type-specific SQL in the code). Defaults to mysql.
+ database-type-specific SQL in the code). Defaults to mysql.
mirror: you can set this to an array of DSNs, like the above
- 'database' value. If it's set, certain read-only actions will
- use a random value out of this array for the database, rather
- than the one in 'database' (actually, 'database' is overwritten).
- You can offload a busy DB server by setting up MySQL replication
- and adding the slaves to this array. Note that if you want some
- requests to go to the 'database' (master) server, you'll need
- to include it in this array, too.
+ 'database' value. If it's set, certain read-only actions will
+ use a random value out of this array for the database, rather
+ than the one in 'database' (actually, 'database' is overwritten).
+ You can offload a busy DB server by setting up MySQL replication
+ and adding the slaves to this array. Note that if you want some
+ requests to go to the 'database' (master) server, you'll need
+ to include it in this array, too.
utf8: whether to talk to the database in UTF-8 mode. This is the default
- with new installations, but older sites may want to turn it off
- until they get their databases fixed up. See "UTF-8 database"
- above for details.
+ with new installations, but older sites may want to turn it off
+ until they get their databases fixed up. See "UTF-8 database"
+ above for details.
schemacheck: when to let plugins check the database schema to add
- tables or update them. Values can be 'runtime' (default)
- or 'script'. 'runtime' can be costly (plugins check the
- schema on every hit, adding potentially several db
- queries, some quite long), but not everyone knows how to
- run a script. If you can, set this to 'script' and run
- scripts/checkschema.php whenever you install or upgrade a
- plugin.
+ tables or update them. Values can be 'runtime' (default)
+ or 'script'. 'runtime' can be costly (plugins check the
+ schema on every hit, adding potentially several db
+ queries, some quite long), but not everyone knows how to
+ run a script. If you can, set this to 'script' and run
+ scripts/checkschema.php whenever you install or upgrade a
+ plugin.
syslog
------
@@ -1100,13 +928,13 @@ By default, StatusNet sites log error messages to the syslog facility.
(You can override this using the 'logfile' parameter described above).
appname: The name that StatusNet uses to log messages. By default it's
- "statusnet", but if you have more than one installation on the
- server, you may want to change the name for each instance so
- you can track log messages more easily.
+ "statusnet", but if you have more than one installation on the
+ server, you may want to change the name for each instance so
+ you can track log messages more easily.
priority: level to log at. Currently ignored.
facility: what syslog facility to used. Defaults to LOG_USER, only
- reset if you know what syslog is and have a good reason
- to change it.
+ reset if you know what syslog is and have a good reason
+ to change it.
queue
-----
@@ -1117,18 +945,52 @@ sending out SMS email or XMPP messages, for off-line processing. See
enabled: Whether to uses queues. Defaults to false.
subsystem: Which kind of queueserver to use. Values include "db" for
- our hacked-together database queuing (no other server
- required) and "stomp" for a stomp server.
+ our hacked-together database queuing (no other server
+ required) and "stomp" for a stomp server.
stomp_server: "broker URI" for stomp server. Something like
- "tcp://hostname:61613". More complicated ones are
- possible; see your stomp server's documentation for
- details.
+ "tcp://hostname:61613". More complicated ones are
+ possible; see your stomp server's documentation for
+ details.
queue_basename: a root name to use for queues (stomp only). Typically
- something like '/queue/sitename/' makes sense.
+ something like '/queue/sitename/' makes sense. If running
+ multiple instances on the same server, make sure that
+ either this setting or $config['site']['nickname'] are
+ unique for each site to keep them separate.
+
stomp_username: username for connecting to the stomp server; defaults
- to null.
+ to null.
stomp_password: password for connecting to the stomp server; defaults
- to null.
+ to null.
+
+stomp_persistent: keep items across queue server restart, if enabled.
+
+softlimit: an absolute or relative "soft memory limit"; daemons will
+ restart themselves gracefully when they find they've hit
+ this amount of memory usage. Defaults to 90% of PHP's global
+ memory_limit setting.
+
+inboxes: delivery of messages to receiver's inboxes can be delayed to
+ queue time for best interactive performance on the sender.
+ This may however be annoyingly slow when using the DB queues,
+ so you can set this to false if it's causing trouble.
+
+breakout: for stomp, individual queues are by default grouped up for
+ best scalability. If some need to be run by separate daemons,
+ etc they can be manually adjusted here.
+
+ Default will share all queues for all sites within each group.
+ Specify as <group>/<queue> or <group>/<queue>/<site>,
+ using nickname identifier as site.
+
+ 'main/distrib' separate "distrib" queue covering all sites
+ 'xmpp/xmppout/mysite' separate "xmppout" queue covering just 'mysite'
+
+max_retries: for stomp, drop messages after N failed attempts to process.
+ Defaults to 10.
+
+dead_letter_dir: for stomp, optional directory to dump data on failed
+ queue processing events after discarding them.
+
license
-------
@@ -1138,11 +1000,11 @@ choice for any public site. Note that some other servers will not
accept notices if you apply a stricter license than this.
type: one of 'cc' (for Creative Commons licenses), 'allrightsreserved'
- (default copyright), or 'private' (for private and confidential
- information).
+ (default copyright), or 'private' (for private and confidential
+ information).
owner: for 'allrightsreserved' or 'private', an assigned copyright
- holder (for example, an employer for a private site). If
- not specified, will be attributed to 'contributors'.
+ holder (for example, an employer for a private site). If
+ not specified, will be attributed to 'contributors'.
url: URL of the license, used for links.
title: Title for the license, like 'Creative Commons Attribution 3.0'.
image: A button shown on each page for the license.
@@ -1154,9 +1016,9 @@ This is for configuring out-going email. We use PEAR's Mail module,
see: http://pear.php.net/manual/en/package.mail.mail.factory.php
backend: the backend to use for mail, one of 'mail', 'sendmail', and
- 'smtp'. Defaults to PEAR's default, 'mail'.
+ 'smtp'. Defaults to PEAR's default, 'mail'.
params: if the mail backend requires any parameters, you can provide
- them in an associative array.
+ them in an associative array.
nickname
--------
@@ -1164,36 +1026,36 @@ nickname
This is for configuring nicknames in the service.
blacklist: an array of strings for usernames that may not be
- registered. A default array exists for strings that are
- used by StatusNet (e.g. 'doc', 'main', 'avatar', 'theme')
- but you may want to add others if you have other software
- installed in a subdirectory of StatusNet or if you just
- don't want certain words used as usernames.
+ registered. A default array exists for strings that are
+ used by StatusNet (e.g. 'doc', 'main', 'avatar', 'theme')
+ but you may want to add others if you have other software
+ installed in a subdirectory of StatusNet or if you just
+ don't want certain words used as usernames.
featured: an array of nicknames of 'featured' users of the site.
- Can be useful to draw attention to well-known users, or
- interesting people, or whatever.
+ Can be useful to draw attention to well-known users, or
+ interesting people, or whatever.
avatar
------
For configuring avatar access.
-dir: Directory to look for avatar files and to put them into.
- Defaults to avatar subdirectory of install directory; if
- you change it, make sure to change path, too.
-path: Path to avatars. Defaults to path for avatar subdirectory,
- but you can change it if you wish. Note that this will
- be included with the avatar server, too.
+dir: Directory to look for avatar files and to put them into.
+ Defaults to avatar subdirectory of install directory; if
+ you change it, make sure to change path, too.
+path: Path to avatars. Defaults to path for avatar subdirectory,
+ but you can change it if you wish. Note that this will
+ be included with the avatar server, too.
server: If set, defines another server where avatars are stored in the
- root directory. Note that the 'avatar' subdir still has to be
- writeable. You'd typically use this to split HTTP requests on
- the client to speed up page loading, either with another
- virtual server or with an NFS or SAMBA share. Clients
- typically only make 2 connections to a single server at a
- time <http://ur1.ca/6ih>, so this can parallelize the job.
- Defaults to null.
-ssl: Whether to access avatars using HTTPS. Defaults to null, meaning
- to guess based on site-wide SSL settings.
+ root directory. Note that the 'avatar' subdir still has to be
+ writeable. You'd typically use this to split HTTP requests on
+ the client to speed up page loading, either with another
+ virtual server or with an NFS or SAMBA share. Clients
+ typically only make 2 connections to a single server at a
+ time <http://ur1.ca/6ih>, so this can parallelize the job.
+ Defaults to null.
+ssl: Whether to access avatars using HTTPS. Defaults to null, meaning
+ to guess based on site-wide SSL settings.
public
------
@@ -1201,41 +1063,41 @@ public
For configuring the public stream.
localonly: If set to true, only messages posted by users of this
- service (rather than other services, filtered through OMB)
- are shown in the public stream. Default true.
+ service (rather than other services, filtered through OMB)
+ are shown in the public stream. Default true.
blacklist: An array of IDs of users to hide from the public stream.
- Useful if you have someone making excessive Twitterfeed posts
- to the site, other kinds of automated posts, testing bots, etc.
+ Useful if you have someone making excessive Twitterfeed posts
+ to the site, other kinds of automated posts, testing bots, etc.
autosource: Sources of notices that are from automatic posters, and thus
- should be kept off the public timeline. Default empty.
+ should be kept off the public timeline. Default empty.
theme
-----
server: Like avatars, you can speed up page loading by pointing the
- theme file lookup to another server (virtual or real).
- Defaults to NULL, meaning to use the site server.
-dir: Directory where theme files are stored. Used to determine
- whether to show parts of a theme file. Defaults to the theme
- subdirectory of the install directory.
-path: Path part of theme URLs, before the theme name. Relative to the
- theme server. It may make sense to change this path when upgrading,
- (using version numbers as the path) to make sure that all files are
- reloaded by caching clients or proxies. Defaults to null,
- which means to use the site path + '/theme'.
-ssl: Whether to use SSL for theme elements. Default is null, which means
- guess based on site SSL settings.
+ theme file lookup to another server (virtual or real).
+ Defaults to NULL, meaning to use the site server.
+dir: Directory where theme files are stored. Used to determine
+ whether to show parts of a theme file. Defaults to the theme
+ subdirectory of the install directory.
+path: Path part of theme URLs, before the theme name. Relative to the
+ theme server. It may make sense to change this path when upgrading,
+ (using version numbers as the path) to make sure that all files are
+ reloaded by caching clients or proxies. Defaults to null,
+ which means to use the site path + '/theme'.
+ssl: Whether to use SSL for theme elements. Default is null, which means
+ guess based on site SSL settings.
javascript
----------
server: You can speed up page loading by pointing the
- theme file lookup to another server (virtual or real).
- Defaults to NULL, meaning to use the site server.
-path: Path part of Javascript URLs. Defaults to null,
- which means to use the site path + '/js/'.
-ssl: Whether to use SSL for JavaScript files. Default is null, which means
- guess based on site SSL settings.
+ theme file lookup to another server (virtual or real).
+ Defaults to NULL, meaning to use the site server.
+path: Path part of Javascript URLs. Defaults to null,
+ which means to use the site path + '/js/'.
+ssl: Whether to use SSL for JavaScript files. Default is null, which means
+ guess based on site SSL settings.
xmpp
----
@@ -1245,27 +1107,27 @@ For configuring the XMPP sub-system.
enabled: Whether to accept and send messages by XMPP. Default false.
server: server part of XMPP ID for update user.
port: connection port for clients. Default 5222, which you probably
- shouldn't need to change.
+ shouldn't need to change.
user: username for the client connection. Users will receive messages
- from 'user'@'server'.
+ from 'user'@'server'.
resource: a unique identifier for the connection to the server. This
- is actually used as a prefix for each XMPP component in the system.
+ is actually used as a prefix for each XMPP component in the system.
password: password for the user account.
host: some XMPP domains are served by machines with a different
- hostname. (For example, @gmail.com GTalk users connect to
- talk.google.com). Set this to the correct hostname if that's the
- case with your server.
+ hostname. (For example, @gmail.com GTalk users connect to
+ talk.google.com). Set this to the correct hostname if that's the
+ case with your server.
encryption: Whether to encrypt the connection between StatusNet and the
- XMPP server. Defaults to true, but you can get
- considerably better performance turning it off if you're
- connecting to a server on the same machine or on a
- protected network.
+ XMPP server. Defaults to true, but you can get
+ considerably better performance turning it off if you're
+ connecting to a server on the same machine or on a
+ protected network.
debug: if turned on, this will make the XMPP library blurt out all of
- the incoming and outgoing messages as XML stanzas. Use as a
- last resort, and never turn it on if you don't have queues
- enabled, since it will spit out sensitive data to the browser.
+ the incoming and outgoing messages as XML stanzas. Use as a
+ last resort, and never turn it on if you don't have queues
+ enabled, since it will spit out sensitive data to the browser.
public: an array of JIDs to send _all_ notices to. This is useful for
- participating in third-party search and archiving services.
+ participating in third-party search and archiving services.
invite
------
@@ -1280,8 +1142,8 @@ tag
Miscellaneous tagging stuff.
dropoff: Decay factor for tag listing, in seconds.
- Defaults to exponential decay over ten days; you can twiddle
- with it to try and get better results for your site.
+ Defaults to exponential decay over ten days; you can twiddle
+ with it to try and get better results for your site.
popular
-------
@@ -1289,8 +1151,8 @@ popular
Settings for the "popular" section of the site.
dropoff: Decay factor for popularity listing, in seconds.
- Defaults to exponential decay over ten days; you can twiddle
- with it to try and get better results for your site.
+ Defaults to exponential decay over ten days; you can twiddle
+ with it to try and get better results for your site.
daemon
------
@@ -1298,14 +1160,14 @@ daemon
For daemon processes.
piddir: directory that daemon processes should write their PID file
- (process ID) to. Defaults to /var/run/, which is where this
- stuff should usually go on Unix-ish systems.
+ (process ID) to. Defaults to /var/run/, which is where this
+ stuff should usually go on Unix-ish systems.
user: If set, the daemons will try to change their effective user ID
- to this user before running. Probably a good idea, especially if
- you start the daemons as root. Note: user name, like 'daemon',
- not 1001.
+ to this user before running. Probably a good idea, especially if
+ you start the daemons as root. Note: user name, like 'daemon',
+ not 1001.
group: If set, the daemons will try to change their effective group ID
- to this named group. Again, a name, not a numerical ID.
+ to this named group. Again, a name, not a numerical ID.
memcached
---------
@@ -1315,13 +1177,13 @@ database data in memcached <http://www.danga.com/memcached/>.
enabled: Set to true to enable. Default false.
server: a string with the hostname of the memcached server. Can also
- be an array of hostnames, if you've got more than one server.
+ be an array of hostnames, if you've got more than one server.
base: memcached uses key-value pairs to store data. We build long,
- funny-looking keys to make sure we don't have any conflicts. The
- base of the key is usually a simplified version of the site name
- (like "Identi.ca" => "identica"), but you can overwrite this if
- you need to. You can safely ignore it if you only have one
- StatusNet site using your memcached server.
+ funny-looking keys to make sure we don't have any conflicts. The
+ base of the key is usually a simplified version of the site name
+ (like "Identi.ca" => "identica"), but you can overwrite this if
+ you need to. You can safely ignore it if you only have one
+ StatusNet site using your memcached server.
port: Port to connect to; defaults to 11211.
emailpost
@@ -1330,7 +1192,7 @@ emailpost
For post-by-email.
enabled: Whether to enable post-by-email. Defaults to true. You will
- also need to set up maildaemon.php.
+ also need to set up maildaemon.php.
sms
---
@@ -1338,7 +1200,7 @@ sms
For SMS integration.
enabled: Whether to enable SMS integration. Defaults to true. Queues
- should also be enabled.
+ should also be enabled.
integration
-----------
@@ -1353,7 +1215,7 @@ inboxes
For notice inboxes.
enabled: No longer used. If you set this to something other than true,
- StatusNet will no longer run.
+ StatusNet will no longer run.
throttle
--------
@@ -1362,8 +1224,8 @@ For notice-posting throttles.
enabled: Whether to throttle posting. Defaults to false.
count: Each user can make this many posts in 'timespan' seconds. So, if count
- is 100 and timespan is 3600, then there can be only 100 posts
- from a user every hour.
+ is 100 and timespan is 3600, then there can be only 100 posts
+ from a user every hour.
timespan: see 'count'.
profile
@@ -1371,12 +1233,8 @@ profile
Profile management.
-banned: an array of usernames and/or profile IDs of 'banned' profiles.
- The site will reject any notices by these users -- they will
- not be accepted at all. (Compare with blacklisted users above,
- whose posts just won't show up in the public stream.)
biolimit: max character length of bio; 0 means no limit; null means to use
- the site text limit default.
+ the site text limit default.
newuser
-------
@@ -1384,13 +1242,13 @@ newuser
Options with new users.
default: nickname of a user account to automatically subscribe new
- users to. Typically this would be system account for e.g.
- service updates or announcements. Users are able to unsub
- if they want. Default is null; no auto subscribe.
+ users to. Typically this would be system account for e.g.
+ service updates or announcements. Users are able to unsub
+ if they want. Default is null; no auto subscribe.
welcome: nickname of a user account that sends welcome messages to new
- users. Can be the same as 'default' account, although on
- busy servers it may be a good idea to keep that one just for
- 'urgent' messages. Default is null; no message.
+ users. Can be the same as 'default' account, although on
+ busy servers it may be a good idea to keep that one just for
+ 'urgent' messages. Default is null; no message.
If either of these special user accounts are specified, the users should
be created before the configuration is updated.
@@ -1407,19 +1265,19 @@ helps StatusNet developers take your needs into account when updating
the software.
run: string indicating when to run the statistics. Values can be 'web'
- (run occasionally at Web time), 'cron' (run from a cron script),
- or 'never' (don't ever run). If you set it to 'cron', remember to
- schedule the script to run on a regular basis.
+ (run occasionally at Web time), 'cron' (run from a cron script),
+ or 'never' (don't ever run). If you set it to 'cron', remember to
+ schedule the script to run on a regular basis.
frequency: if run value is 'web', how often to report statistics.
- Measured in Web hits; depends on how active your site is.
- Default is 10000 -- that is, one report every 10000 Web hits,
- on average.
+ Measured in Web hits; depends on how active your site is.
+ Default is 10000 -- that is, one report every 10000 Web hits,
+ on average.
reporturl: URL to post statistics to. Defaults to StatusNet developers'
- report system, but if they go evil or disappear you may
- need to update this to another value. Note: if you
- don't want to report stats, it's much better to
- set 'run' to 'never' than to set this value to something
- nonsensical.
+ report system, but if they go evil or disappear you may
+ need to update this to another value. Note: if you
+ don't want to report stats, it's much better to
+ set 'run' to 'never' than to set this value to something
+ nonsensical.
attachments
-----------
@@ -1432,14 +1290,14 @@ We suggest the use of the pecl file_info extension to handle mime type
detection.
supported: an array of mime types you accept to store and distribute,
- like 'image/gif', 'video/mpeg', 'audio/mpeg', etc. Make sure you
- setup your server to properly recognize the types you want to
- support.
-uploads: false to disable uploading files with notices (true by default).
+ like 'image/gif', 'video/mpeg', 'audio/mpeg', etc. Make sure you
+ setup your server to properly recognize the types you want to
+ support.
+uploads: false to disable uploading files with notices (true by default).
filecommand: The required MIME_Type library may need to use the 'file'
- command. It tries the one in the Web server's path, but if
- you're having problems with uploads, try setting this to the
- correct value. Note: 'file' must accept '-b' and '-i' options.
+ command. It tries the one in the Web server's path, but if
+ you're having problems with uploads, try setting this to the
+ correct value. Note: 'file' must accept '-b' and '-i' options.
For quotas, be sure you've set the upload_max_filesize and post_max_size
in php.ini to be large enough to handle your upload. In httpd.conf
@@ -1447,26 +1305,26 @@ in php.ini to be large enough to handle your upload. In httpd.conf
set too low (it's optional, so it may not be there at all).
file_quota: maximum size for a single file upload in bytes. A user can send
- any amount of notices with attachments as long as each attachment
- is smaller than file_quota.
+ any amount of notices with attachments as long as each attachment
+ is smaller than file_quota.
user_quota: total size in bytes a user can store on this server. Each user
- can store any number of files as long as their total size does
- not exceed the user_quota.
+ can store any number of files as long as their total size does
+ not exceed the user_quota.
monthly_quota: total size permitted in the current month. This is the total
- size in bytes that a user can upload each month.
+ size in bytes that a user can upload each month.
dir: directory accessible to the Web process where uploads should go.
- Defaults to the 'file' subdirectory of the install directory, which
- should be writeable by the Web user.
+ Defaults to the 'file' subdirectory of the install directory, which
+ should be writeable by the Web user.
server: server name to use when creating URLs for uploaded files.
- Defaults to null, meaning to use the default Web server. Using
- a virtual server here can speed up Web performance.
+ Defaults to null, meaning to use the default Web server. Using
+ a virtual server here can speed up Web performance.
path: URL path, relative to the server, to find files. Defaults to
- main path + '/file/'.
+ main path + '/file/'.
ssl: whether to use HTTPS for file URLs. Defaults to null, meaning to
- guess based on other SSL settings.
+ guess based on other SSL settings.
filecommand: command to use for determining the type of a file. May be
- skipped if fileinfo extension is installed. Defaults to
- '/usr/bin/file'.
+ skipped if fileinfo extension is installed. Defaults to
+ '/usr/bin/file'.
group
-----
@@ -1474,10 +1332,10 @@ group
Options for group functionality.
maxaliases: maximum number of aliases a group can have. Default 3. Set
- to 0 or less to prevent aliases in a group.
+ to 0 or less to prevent aliases in a group.
desclimit: maximum number of characters to allow in group descriptions.
- null (default) means to use the site-wide text limits. 0
- means no limit.
+ null (default) means to use the site-wide text limits. 0
+ means no limit.
oohembed
--------
@@ -1492,11 +1350,11 @@ search
Some stuff for search.
type: type of search. Ignored if PostgreSQL or Sphinx are enabled. Can either
- be 'fulltext' (default) or 'like'. The former is faster and more efficient
- but requires the lame old MyISAM engine for MySQL. The latter
- will work with InnoDB but could be miserably slow on large
- systems. We'll probably add another type sometime in the future,
- with our own indexing system (maybe like MediaWiki's).
+ be 'fulltext' (default) or 'like'. The former is faster and more efficient
+ but requires the lame old MyISAM engine for MySQL. The latter
+ will work with InnoDB but could be miserably slow on large
+ systems. We'll probably add another type sometime in the future,
+ with our own indexing system (maybe like MediaWiki's).
sessions
--------
@@ -1504,11 +1362,11 @@ sessions
Session handling.
handle: boolean. Whether we should register our own PHP session-handling
- code (using the database and memcache if enabled). Defaults to false.
- Setting this to true makes some sense on large or multi-server
- sites, but it probably won't hurt for smaller ones, either.
+ code (using the database and memcache if enabled). Defaults to false.
+ Setting this to true makes some sense on large or multi-server
+ sites, but it probably won't hurt for smaller ones, either.
debug: whether to output debugging info for session storage. Can help
- with weird session bugs, sometimes. Default false.
+ with weird session bugs, sometimes. Default false.
background
----------
@@ -1517,14 +1375,14 @@ Users can upload backgrounds for their pages; this section defines
their use.
server: the server to use for background. Using a separate (even
- virtual) server for this can speed up load times. Default is
- null; same as site server.
+ virtual) server for this can speed up load times. Default is
+ null; same as site server.
dir: directory to write backgrounds too. Default is '/background/'
- subdir of install dir.
+ subdir of install dir.
path: path to backgrounds. Default is sub-path of install path; note
- that you may need to change this if you change site-path too.
+ that you may need to change this if you change site-path too.
ssl: Whether or not to use HTTPS for background files. Defaults to
- null, meaning to guess from site-wide SSL settings.
+ null, meaning to guess from site-wide SSL settings.
ping
----
@@ -1533,7 +1391,7 @@ Using the "XML-RPC Ping" method initiated by weblogs.com, the site can
notify third-party servers of updates.
notify: an array of URLs for ping endpoints. Default is the empty
- array (no notification).
+ array (no notification).
design
------
@@ -1555,8 +1413,8 @@ notice
Configuration options specific to notices.
contentlimit: max length of the plain-text content of a notice.
- Default is null, meaning to use the site-wide text limit.
- 0 means no limit.
+ Default is null, meaning to use the site-wide text limit.
+ 0 means no limit.
message
-------
@@ -1564,8 +1422,8 @@ message
Configuration options specific to messages.
contentlimit: max length of the plain-text content of a message.
- Default is null, meaning to use the site-wide text limit.
- 0 means no limit.
+ Default is null, meaning to use the site-wide text limit.
+ 0 means no limit.
logincommand
------------
@@ -1573,14 +1431,14 @@ logincommand
Configuration options for the login command.
disabled: whether to enable this command. If enabled, users who send
- the text 'login' to the site through any channel will
- receive a link to login to the site automatically in return.
- Possibly useful for users who primarily use an XMPP or SMS
- interface and can't be bothered to remember their site
- password. Note that the security implications of this are
- pretty serious and have not been thoroughly tested. You
- should enable it only after you've convinced yourself that
- it is safe. Default is 'false'.
+ the text 'login' to the site through any channel will
+ receive a link to login to the site automatically in return.
+ Possibly useful for users who primarily use an XMPP or SMS
+ interface and can't be bothered to remember their site
+ password. Note that the security implications of this are
+ pretty serious and have not been thoroughly tested. You
+ should enable it only after you've convinced yourself that
+ it is safe. Default is 'false'.
singleuser
----------
@@ -1599,11 +1457,11 @@ Web crawlers. See http://www.robotstxt.org/ for more information
on the format of this file.
crawldelay: if non-empty, this value is provided as the Crawl-Delay:
- for the robots.txt file. see http://ur1.ca/l5a0
- for more information. Default is zero, no explicit delay.
+ for the robots.txt file. see http://ur1.ca/l5a0
+ for more information. Default is zero, no explicit delay.
disallow: Array of (virtual) directories to disallow. Default is 'main',
- 'search', 'message', 'settings', 'admin'. Ignored when site
- is private, in which case the entire site ('/') is disallowed.
+ 'search', 'message', 'settings', 'admin'. Ignored when site
+ is private, in which case the entire site ('/') is disallowed.
Plugins
=======
@@ -1662,7 +1520,7 @@ repository (see below), and you get a compilation error ("unexpected
T_STRING") in the browser, check to see that you don't have any
conflicts in your code.
-If you upgraded to StatusNet 0.8.2 without reading the "Notice
+If you upgraded to StatusNet 0.9.0 without reading the "Notice
inboxes" section above, and all your users' 'Personal' tabs are empty,
read the "Notice inboxes" section above.
@@ -1695,7 +1553,7 @@ If you're adventurous or impatient, you may want to install the
development version of StatusNet. To get it, use the git version
control tool <http://git-scm.com/> like so:
- git clone git@gitorious.org:statusnet/mainline.git
+ git clone git@gitorious.org:statusnet/mainline.git
This is the version of the software that runs on Identi.ca and the
status.net hosted service. Using it is a mixed bag. On the positive
@@ -1717,16 +1575,16 @@ There are several ways to get more information about StatusNet.
* The #statusnet IRC channel on freenode.net <http://www.freenode.net/>.
* The StatusNet wiki, http://status.net/wiki/
* The StatusNet blog, http://status.net/blog/
-* The StatusNet status update, <http://status.status.net/status> (!)
+* The StatusNet status update, <http://status.status.net/> (!)
Feedback
========
-* Microblogging messages to http://identi.ca/evan are very welcome.
-* StatusNet's Trac server has a bug tracker for any defects you may find,
- or ideas for making things better. http://status.net/trac/
-* e-mail to evan@status.net will usually be read and responded to very
- quickly, unless the question is really hard.
+* Microblogging messages to http://support.status.net/ are very welcome.
+* The microblogging group http://identi.ca/group/statusnet is a good
+ place to discuss the software.
+* StatusNet has a bug tracker for any defects you may find, or ideas for
+ making things better. http://status.net/bugs
Credits
=======
diff --git a/actions/accessadminpanel.php b/actions/accessadminpanel.php
index 4768e2faf..73354e97a 100644
--- a/actions/accessadminpanel.php
+++ b/actions/accessadminpanel.php
@@ -51,6 +51,7 @@ class AccessadminpanelAction extends AdminPanelAction
function title()
{
+ // TRANS: Page title
return _('Access');
}
@@ -62,6 +63,7 @@ class AccessadminpanelAction extends AdminPanelAction
function getInstructions()
{
+ // TRANS: Page notice
return _('Site access settings');
}
@@ -155,24 +157,34 @@ class AccessAdminPanelForm extends AdminForm
function formData()
{
$this->out->elementStart('fieldset', array('id' => 'settings_admin_access'));
+ // TRANS: Form legend for registration form.
$this->out->element('legend', null, _('Registration'));
$this->out->elementStart('ul', 'form_data');
$this->li();
- $this->out->checkbox('private', _('Private'),
+ // TRANS: Checkbox instructions for admin setting "Private"
+ $instructions = _('Prohibit anonymous users (not logged in) from viewing site?');
+ // TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+ $this->out->checkbox('private', _m('LABEL', 'Private'),
(bool) $this->value('private'),
- _('Prohibit anonymous users (not logged in) from viewing site?'));
+ $instructions);
$this->unli();
$this->li();
+ // TRANS: Checkbox instructions for admin setting "Invite only"
+ $instructions = _('Make registration invitation only.');
+ // TRANS: Checkbox label for configuring site as invite only.
$this->out->checkbox('inviteonly', _('Invite only'),
(bool) $this->value('inviteonly'),
- _('Make registration invitation only.'));
+ $instructions);
$this->unli();
$this->li();
+ // TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+ $instructions = _('Disable new registrations.');
+ // TRANS: Checkbox label for disabling new user registrations.
$this->out->checkbox('closed', _('Closed'),
(bool) $this->value('closed'),
- _('Disable new registrations.'));
+ $instructions);
$this->unli();
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
@@ -186,7 +198,9 @@ class AccessAdminPanelForm extends AdminForm
function formActions()
{
- $this->out->submit('submit', _('Save'), 'submit', null, _('Save access settings'));
+ // TRANS: Title / tooltip for button to save access settings in site admin panel
+ $title = _('Save access settings');
+ $this->out->submit('submit', _m('BUTTON', 'Save'), 'submit', null, $title);
}
}
diff --git a/actions/all.php b/actions/all.php
index 3eb185214..8c22e6f5f 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -60,6 +60,7 @@ class AllAction extends ProfileAction
}
if ($this->page > 1 && $this->notice->N == 0) {
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'), $code = 404);
}
@@ -81,8 +82,10 @@ class AllAction extends ProfileAction
function title()
{
if ($this->page > 1) {
+ // TRANS: Page title. %1$s is user nickname, %2$d is page number
return sprintf(_('%1$s and friends, page %2$d'), $this->user->nickname, $this->page);
} else {
+ // TRANS: Page title. %1$s is user nickname
return sprintf(_("%s and friends"), $this->user->nickname);
}
}
@@ -96,6 +99,7 @@ class AllAction extends ProfileAction
'nickname' =>
$this->user->nickname)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (RSS 1.0)'), $this->user->nickname)),
new Feed(Feed::RSS2,
common_local_url(
@@ -104,6 +108,7 @@ class AllAction extends ProfileAction
'id' => $this->user->nickname
)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (RSS 2.0)'), $this->user->nickname)),
new Feed(Feed::ATOM,
common_local_url(
@@ -112,6 +117,7 @@ class AllAction extends ProfileAction
'id' => $this->user->nickname
)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (Atom)'), $this->user->nickname))
);
}
@@ -124,6 +130,7 @@ class AllAction extends ProfileAction
function showEmptyListMessage()
{
+ // TRANS: %1$s is user nickname
$message = sprintf(_('This is the timeline for %s and friends but no one has posted anything yet.'), $this->user->nickname) . ' ';
if (common_logged_in()) {
@@ -131,6 +138,7 @@ class AllAction extends ProfileAction
if ($this->user->id === $current_user->id) {
$message .= _('Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.');
} else {
+ // TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) from his profile or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
}
} else {
@@ -144,26 +152,32 @@ class AllAction extends ProfileAction
function showContent()
{
- $nl = new NoticeList($this->notice, $this);
+ if (Event::handle('StartShowAllContent', array($this))) {
+ $nl = new NoticeList($this->notice, $this);
- $cnt = $nl->show();
+ $cnt = $nl->show();
- if (0 == $cnt) {
- $this->showEmptyListMessage();
- }
+ if (0 == $cnt) {
+ $this->showEmptyListMessage();
+ }
- $this->pagination(
- $this->page > 1, $cnt > NOTICES_PER_PAGE,
- $this->page, 'all', array('nickname' => $this->user->nickname)
- );
+ $this->pagination(
+ $this->page > 1, $cnt > NOTICES_PER_PAGE,
+ $this->page, 'all', array('nickname' => $this->user->nickname)
+ );
+
+ Event::handle('EndShowAllContent', array($this));
+ }
}
function showPageTitle()
{
$user = common_current_user();
if ($user && ($user->id == $this->user->id)) {
+ // TRANS: H1 text
$this->element('h1', null, _("You and friends"));
} else {
+ // TRANS: H1 text. %1$s is user nickname
$this->element('h1', null, sprintf(_('%s and friends'), $this->user->nickname));
}
}
diff --git a/actions/allrss.php b/actions/allrss.php
index 28b1be27d..01e737ad7 100644
--- a/actions/allrss.php
+++ b/actions/allrss.php
@@ -83,6 +83,7 @@ class AllrssAction extends Rss10Action
function getNotices($limit=0)
{
$cur = common_current_user();
+ $user = $this->user;
if (!empty($cur) && $cur->id == $user->id) {
$notice = $this->user->noticeInbox(0, $limit);
@@ -90,7 +91,6 @@ class AllrssAction extends Rss10Action
$notice = $this->user->noticesWithFriends(0, $limit);
}
- $user = $this->user;
$notice = $user->noticesWithFriends(0, $limit);
$notices = array();
diff --git a/actions/apidirectmessage.php b/actions/apidirectmessage.php
index 5fbc46518..53da9e0c6 100644
--- a/actions/apidirectmessage.php
+++ b/actions/apidirectmessage.php
@@ -79,7 +79,7 @@ class ApiDirectMessageAction extends ApiAuthAction
}
$server = common_root_url();
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
if ($this->arg('sent')) {
@@ -182,11 +182,6 @@ class ApiDirectMessageAction extends ApiAuthAction
$message->whereAdd('id > ' . $this->since_id);
}
- if (!empty($since)) {
- $d = date('Y-m-d H:i:s', $this->since);
- $message->whereAdd("created > '$d'");
- }
-
$message->orderBy('created DESC, id DESC');
$message->limit((($this->page - 1) * $this->count), $this->count);
$message->find();
diff --git a/actions/apifriendshipsdestroy.php b/actions/apifriendshipsdestroy.php
index 91c6fd032..d48a57756 100644
--- a/actions/apifriendshipsdestroy.php
+++ b/actions/apifriendshipsdestroy.php
@@ -124,12 +124,9 @@ class ApiFriendshipsDestroyAction extends ApiAuthAction
return;
}
- $result = subs_unsubscribe_user($this->user, $this->other->nickname);
-
- if (is_string($result)) {
- $this->clientError($result, 403, $this->format);
- return;
- }
+ // throws an exception on error
+ Subscription::cancel($this->user->getProfile(),
+ $this->other->getProfile());
$this->initDocument($this->format);
$this->showProfile($this->other, $this->format);
diff --git a/actions/apigroupcreate.php b/actions/apigroupcreate.php
index 028d76a78..145806356 100644
--- a/actions/apigroupcreate.php
+++ b/actions/apigroupcreate.php
@@ -123,7 +123,9 @@ class ApiGroupCreateAction extends ApiAuthAction
'description' => $this->description,
'location' => $this->location,
'aliases' => $this->aliases,
- 'userid' => $this->user->id));
+ 'userid' => $this->user->id,
+ 'local' => true));
+
switch($this->format) {
case 'xml':
$this->showSingleXmlGroup($group);
@@ -306,9 +308,9 @@ class ApiGroupCreateAction extends ApiAuthAction
function groupNicknameExists($nickname)
{
- $group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
- if (!empty($group)) {
+ if (!empty($local)) {
return true;
}
diff --git a/actions/apigrouplist.php b/actions/apigrouplist.php
index 66b67a030..98fdb0497 100644
--- a/actions/apigrouplist.php
+++ b/actions/apigrouplist.php
@@ -93,7 +93,7 @@ class ApiGroupListAction extends ApiBareAuthAction
$sitename = common_config('site', 'name');
$title = sprintf(_("%s's groups"), $this->user->nickname);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:Groups";
$link = common_local_url(
'usergroups',
@@ -152,8 +152,7 @@ class ApiGroupListAction extends ApiBareAuthAction
($this->page - 1) * $this->count,
$this->count,
$this->since_id,
- $this->max_id,
- $this->since
+ $this->max_id
);
while ($group->fetch()) {
diff --git a/actions/apigrouplistall.php b/actions/apigrouplistall.php
index 1921c1f19..e1b54a832 100644
--- a/actions/apigrouplistall.php
+++ b/actions/apigrouplistall.php
@@ -88,7 +88,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
$sitename = common_config('site', 'name');
$title = sprintf(_("%s groups"), $sitename);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:Groups";
$link = common_local_url('groups');
$subtitle = sprintf(_("groups on %s"), $sitename);
@@ -134,13 +134,13 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
function getGroups()
{
- $groups = array();
-
- // XXX: Use the $page, $count, $max_id, $since_id, and $since parameters
+ $qry = 'SELECT user_group.* '.
+ 'from user_group join local_group on user_group.id = local_group.group_id '.
+ 'order by created desc ';
$group = new User_group();
- $group->orderBy('created DESC');
- $group->find();
+
+ $group->query($qry);
while ($group->fetch()) {
$groups[] = clone($group);
diff --git a/actions/apigroupmembership.php b/actions/apigroupmembership.php
index 3c7c8e883..9f72b527c 100644
--- a/actions/apigroupmembership.php
+++ b/actions/apigroupmembership.php
@@ -125,8 +125,7 @@ class ApiGroupMembershipAction extends ApiPrivateAuthAction
($this->page - 1) * $this->count,
$this->count,
$this->since_id,
- $this->max_id,
- $this->since
+ $this->max_id
);
while ($profile->fetch()) {
diff --git a/actions/apistatusnetconfig.php b/actions/apistatusnetconfig.php
index 0345a9bc0..bff8313b5 100644
--- a/actions/apistatusnetconfig.php
+++ b/actions/apistatusnetconfig.php
@@ -32,8 +32,6 @@ if (!defined('STATUSNET')) {
exit(1);
}
-require_once INSTALLDIR . '/lib/api.php';
-
/**
* Gives a full dump of configuration variables for this instance
* of StatusNet, minus variables that may be security-sensitive (like
diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php
index f7f900ddf..c89d02247 100644
--- a/actions/apitimelinefavorites.php
+++ b/actions/apitimelinefavorites.php
@@ -110,7 +110,7 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
$this->user->nickname
);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:Favorites:" . $this->user->id;
$subtitle = sprintf(
diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php
index 0af04fe4f..9ef3ace60 100644
--- a/actions/apitimelinefriends.php
+++ b/actions/apitimelinefriends.php
@@ -112,7 +112,7 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
$title = sprintf(_("%s and friends"), $this->user->nickname);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:FriendsTimeline:" . $this->user->id;
$subtitle = sprintf(
@@ -202,11 +202,11 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
if (!empty($this->auth_user) && $this->auth_user->id == $this->user->id) {
$notice = $this->user->ownFriendsTimeline(($this->page-1) * $this->count,
$this->count, $this->since_id,
- $this->max_id, $this->since);
+ $this->max_id);
} else {
$notice = $this->user->friendsTimeline(($this->page-1) * $this->count,
$this->count, $this->since_id,
- $this->max_id, $this->since);
+ $this->max_id);
}
while ($notice->fetch()) {
diff --git a/actions/apitimelinegroup.php b/actions/apitimelinegroup.php
index 3c74e36b5..8f971392b 100644
--- a/actions/apitimelinegroup.php
+++ b/actions/apitimelinegroup.php
@@ -104,32 +104,21 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
function showTimeline()
{
- $sitename = common_config('site', 'name');
- $avatar = $this->group->homepage_logo;
- $title = sprintf(_("%s timeline"), $this->group->nickname);
- $taguribase = common_config('integration', 'taguri');
- $id = "tag:$taguribase:GroupTimeline:" . $this->group->id;
-
- $subtitle = sprintf(
- _('Updates from %1$s on %2$s!'),
- $this->group->nickname,
- $sitename
- );
-
- $logo = ($avatar) ? $avatar : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
+ // We'll pull common formatting out of this for other formats
+ $atom = new AtomGroupNoticeFeed($this->group);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline(
+ $this->showRssTimeline(
$this->notices,
- $title,
+ $atom->title,
$this->group->homeUrl(),
- $subtitle,
+ $atom->subtitle,
null,
- $logo
+ $atom->logo
);
break;
case 'atom':
@@ -138,41 +127,18 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
try {
- // If this was called using an integer ID, i.e.: using the canonical
- // URL for this group's feed, then pass the Group object into the feed,
- // so the OStatus plugin, and possibly other plugins, can access it.
- // Feels sorta hacky. -- Z
-
- $atom = null;
- $id = $this->arg('id');
-
- if (strval(intval($id)) === strval($id)) {
- $atom = new AtomGroupNoticeFeed($this->group);
- } else {
- $atom = new AtomGroupNoticeFeed();
- }
-
- $atom->setId($id);
- $atom->setTitle($title);
- $atom->setSubtitle($subtitle);
- $atom->setLogo($logo);
- $atom->setUpdated('now');
-
$atom->addAuthorRaw($this->group->asAtomAuthor());
$atom->setActivitySubject($this->group->asActivitySubject());
- $atom->addLink($this->group->homeUrl());
-
$id = $this->arg('id');
$aargs = array('format' => 'atom');
if (!empty($id)) {
$aargs['id'] = $id;
}
+ $self = $this->getSelfUri('ApiTimelineGroup', $aargs);
- $atom->addLink(
- $this->getSelfUri('ApiTimelineGroup', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->setId($self);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
@@ -213,8 +179,7 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
($this->page-1) * $this->count,
$this->count,
$this->since_id,
- $this->max_id,
- $this->since
+ $this->max_id
);
while ($notice->fetch()) {
diff --git a/actions/apitimelinehome.php b/actions/apitimelinehome.php
index ae4168070..abd387786 100644
--- a/actions/apitimelinehome.php
+++ b/actions/apitimelinehome.php
@@ -113,7 +113,7 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
$title = sprintf(_("%s and friends"), $this->user->nickname);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:HomeTimeline:" . $this->user->id;
$subtitle = sprintf(
@@ -200,13 +200,13 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$notice = $this->user->noticeInbox(
($this->page-1) * $this->count,
$this->count, $this->since_id,
- $this->max_id, $this->since
+ $this->max_id
);
} else {
$notice = $this->user->noticesWithFriends(
($this->page-1) * $this->count,
$this->count, $this->since_id,
- $this->max_id, $this->since
+ $this->max_id
);
}
diff --git a/actions/apitimelinementions.php b/actions/apitimelinementions.php
index d2e31d0bd..31627ab7b 100644
--- a/actions/apitimelinementions.php
+++ b/actions/apitimelinementions.php
@@ -117,7 +117,7 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
_('%1$s / Updates mentioning %2$s'),
$sitename, $this->user->nickname
);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:Mentions:" . $this->user->id;
$link = common_local_url(
'replies',
@@ -189,7 +189,7 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$notice = $this->user->getReplies(
($this->page - 1) * $this->count, $this->count,
- $this->since_id, $this->max_id, $this->since
+ $this->since_id, $this->max_id
);
while ($notice->fetch()) {
diff --git a/actions/apitimelinepublic.php b/actions/apitimelinepublic.php
index c1fa72a3e..3e4dad690 100644
--- a/actions/apitimelinepublic.php
+++ b/actions/apitimelinepublic.php
@@ -75,10 +75,6 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$this->notices = $this->getNotices();
- if ($this->since) {
- throw new ServerException("since parameter is disabled for performance; use since_id", 403);
- }
-
return true;
}
@@ -109,7 +105,7 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$sitename = common_config('site', 'name');
$sitelogo = (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png');
$title = sprintf(_("%s public timeline"), $sitename);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:PublicTimeline";
$link = common_root_url();
$subtitle = sprintf(_("%s updates from everyone!"), $sitename);
diff --git a/actions/apitimelineretweetedtome.php b/actions/apitimelineretweetedtome.php
index e47bc30b8..73e35c86b 100644
--- a/actions/apitimelineretweetedtome.php
+++ b/actions/apitimelineretweetedtome.php
@@ -109,7 +109,7 @@ class ApiTimelineRetweetedToMeAction extends ApiAuthAction
$profile = $this->auth_user->getProfile();
$title = sprintf(_("Repeated to %s"), $this->auth_user->nickname);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:RepeatedToMe:" . $this->auth_user->id;
$link = common_local_url('all',
array('nickname' => $this->auth_user->nickname));
diff --git a/actions/apitimelineretweetsofme.php b/actions/apitimelineretweetsofme.php
index 26706a75e..c77912fd0 100644
--- a/actions/apitimelineretweetsofme.php
+++ b/actions/apitimelineretweetsofme.php
@@ -112,7 +112,7 @@ class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
$profile = $this->auth_user->getProfile();
$title = sprintf(_("Repeats of %s"), $this->auth_user->nickname);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:RepeatsOfMe:" . $this->auth_user->id;
header('Content-Type: application/atom+xml; charset=utf-8');
diff --git a/actions/apitimelinetag.php b/actions/apitimelinetag.php
index 5b6ded4c0..a29061fcc 100644
--- a/actions/apitimelinetag.php
+++ b/actions/apitimelinetag.php
@@ -105,7 +105,7 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$this->tag,
$sitename
);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:TagTimeline:".$tag;
switch($this->format) {
diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php
index 9f7ec4c23..2d0047c04 100644
--- a/actions/apitimelineuser.php
+++ b/actions/apitimelineuser.php
@@ -112,21 +112,17 @@ class ApiTimelineUserAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- $sitename = common_config('site', 'name');
- $title = sprintf(_("%s timeline"), $this->user->nickname);
- $taguribase = common_config('integration', 'taguri');
- $id = "tag:$taguribase:UserTimeline:" . $this->user->id;
+ // We'll use the shared params from the Atom stub
+ // for other feed types.
+ $atom = new AtomUserNoticeFeed($this->user);
+ $title = $atom->title;
$link = common_local_url(
'showstream',
array('nickname' => $this->user->nickname)
);
- $subtitle = sprintf(
- _('Updates from %1$s on %2$s!'),
- $this->user->nickname, $sitename
- );
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $subtitle = $atom->subtitle;
+ $logo = $atom->logo;
// FriendFeed's SUP protocol
// Also added RSS and Atom feeds
@@ -148,56 +144,18 @@ class ApiTimelineUserAction extends ApiBareAuthAction
header('Content-Type: application/atom+xml; charset=utf-8');
- // If this was called using an integer ID, i.e.: using the canonical
- // URL for this user's feed, then pass the User object into the feed,
- // so the OStatus plugin, and possibly other plugins, can access it.
- // Feels sorta hacky. -- Z
-
- $atom = null;
- $id = $this->arg('id');
-
- if (strval(intval($id)) === strval($id)) {
- $atom = new AtomUserNoticeFeed($this->user);
- } else {
- $atom = new AtomUserNoticeFeed();
- }
-
- $atom->setId($id);
- $atom->setTitle($title);
- $atom->setSubtitle($subtitle);
- $atom->setLogo($logo);
- $atom->setUpdated('now');
-
- $atom->addLink(
- common_local_url(
- 'showstream',
- array('nickname' => $this->user->nickname)
- )
- );
-
$id = $this->arg('id');
$aargs = array('format' => 'atom');
if (!empty($id)) {
$aargs['id'] = $id;
}
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineUser', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
-
- $atom->addLink(
- $suplink,
- array(
- 'rel' => 'http://api.friendfeed.com/2008/03#sup',
- 'type' => 'application/json'
- )
- );
+ $self = $this->getSelfUri('ApiTimelineUser', $aargs);
+ $atom->setId($self);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
- #$this->raw($atom->getString());
- print $atom->getString(); // temporary for output buffering
+ $this->raw($atom->getString());
break;
case 'json':
@@ -222,7 +180,7 @@ class ApiTimelineUserAction extends ApiBareAuthAction
$notice = $this->user->getNotices(
($this->page-1) * $this->count, $this->count,
- $this->since_id, $this->max_id, $this->since
+ $this->since_id, $this->max_id
);
while ($notice->fetch()) {
diff --git a/actions/blockedfromgroup.php b/actions/blockedfromgroup.php
index 0b4caf5bf..a0598db27 100644
--- a/actions/blockedfromgroup.php
+++ b/actions/blockedfromgroup.php
@@ -74,7 +74,14 @@ class BlockedfromgroupAction extends GroupDesignAction
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
+
+ $this->group = User_group::staticGet('id', $local->group_id);
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
diff --git a/actions/deleteuser.php b/actions/deleteuser.php
index 32b703aa7..c4f84fad2 100644
--- a/actions/deleteuser.php
+++ b/actions/deleteuser.php
@@ -131,18 +131,21 @@ class DeleteuserAction extends ProfileFormAction
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->element('legend', _('Delete user'));
- $this->element('p', null,
- _('Are you sure you want to delete this user? '.
- 'This will clear all data about the user from the '.
- 'database, without a backup.'));
- $this->element('input', array('id' => 'deleteuserto-' . $id,
- 'name' => 'profileid',
- 'type' => 'hidden',
- 'value' => $id));
- foreach ($this->args as $k => $v) {
- if (substr($k, 0, 9) == 'returnto-') {
- $this->hidden($k, $v);
+ if (Event::handle('StartDeleteUserForm', array($this, $this->user))) {
+ $this->element('p', null,
+ _('Are you sure you want to delete this user? '.
+ 'This will clear all data about the user from the '.
+ 'database, without a backup.'));
+ $this->element('input', array('id' => 'deleteuserto-' . $id,
+ 'name' => 'profileid',
+ 'type' => 'hidden',
+ 'value' => $id));
+ foreach ($this->args as $k => $v) {
+ if (substr($k, 0, 9) == 'returnto-') {
+ $this->hidden($k, $v);
+ }
}
+ Event::handle('EndDeleteUserForm', array($this, $this->user));
}
$this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user"));
$this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Delete this user'));
@@ -158,7 +161,9 @@ class DeleteuserAction extends ProfileFormAction
function handlePost()
{
- $this->user->delete();
+ if (Event::handle('StartDeleteUser', array($this, $this->user))) {
+ $this->user->delete();
+ Event::handle('EndDeleteUser', array($this, $this->user));
+ }
}
}
-
diff --git a/actions/doc.php b/actions/doc.php
index eaf4b7df2..459f5f096 100644
--- a/actions/doc.php
+++ b/actions/doc.php
@@ -173,6 +173,10 @@ class DocAction extends Action
}
$local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*');
+ if ($local === false) {
+ // Some systems return false, others array(), if dir didn't exist.
+ $local = array();
+ }
if (count($local) || isset($localDef)) {
return $this->negotiateLanguage($local, $localDef);
@@ -183,6 +187,9 @@ class DocAction extends Action
}
$dist = glob(INSTALLDIR.'/doc-src/'.$this->title.'.*');
+ if ($dist === false) {
+ $dist = array();
+ }
if (count($dist) || isset($distDef)) {
return $this->negotiateLanguage($dist, $distDef);
diff --git a/actions/editgroup.php b/actions/editgroup.php
index ad0b6e185..4b596cade 100644
--- a/actions/editgroup.php
+++ b/actions/editgroup.php
@@ -86,10 +86,14 @@ class EditgroupAction extends GroupDesignAction
}
$groupid = $this->trimmed('groupid');
+
if ($groupid) {
$this->group = User_group::staticGet('id', $groupid);
} else {
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if ($local) {
+ $this->group = User_group::staticGet('id', $local->group_id);
+ }
}
if (!$this->group) {
@@ -245,6 +249,7 @@ class EditgroupAction extends GroupDesignAction
$this->group->homepage = $homepage;
$this->group->description = $description;
$this->group->location = $location;
+ $this->group->mainpage = common_local_url('showgroup', array('nickname' => $nickname));
$result = $this->group->update($orig);
@@ -259,6 +264,12 @@ class EditgroupAction extends GroupDesignAction
$this->serverError(_('Could not create aliases.'));
}
+ if ($nickname != $orig->nickname) {
+ common_log(LOG_INFO, "Saving local group info.");
+ $local = Local_group::staticGet('group_id', $this->group->id);
+ $local->setNickname($nickname);
+ }
+
$this->group->query('COMMIT');
if ($this->group->nickname != $orig->nickname) {
@@ -272,10 +283,10 @@ class EditgroupAction extends GroupDesignAction
function nicknameExists($nickname)
{
- $group = User_group::staticGet('nickname', $nickname);
+ $group = Local_group::staticGet('nickname', $nickname);
if (!empty($group) &&
- $group->id != $this->group->id) {
+ $group->group_id != $this->group->id) {
return true;
}
diff --git a/actions/favor.php b/actions/favor.php
index 2aeb1da61..afca9768a 100644
--- a/actions/favor.php
+++ b/actions/favor.php
@@ -79,7 +79,7 @@ class FavorAction extends Action
$this->clientError(_('This notice is already a favorite!'));
return;
}
- $fave = Fave::addNew($user, $notice);
+ $fave = Fave::addNew($user->getProfile(), $notice);
if (!$fave) {
$this->serverError(_('Could not create favorite.'));
return;
diff --git a/actions/foafgroup.php b/actions/foafgroup.php
index f5fd7fe88..ebdf1cee2 100644
--- a/actions/foafgroup.php
+++ b/actions/foafgroup.php
@@ -56,7 +56,14 @@ class FoafGroupAction extends Action
return false;
}
- $this->group = User_group::staticGet('nickname', $this->nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
+
+ $this->group = User_group::staticGet('id', $local->group_id);
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
@@ -113,7 +120,7 @@ class FoafGroupAction extends Action
if ($this->group->homepage_logo) {
$this->element('depiction', array('rdf:resource' => $this->group->homepage_logo));
}
-
+
$members = $this->group->getMembers();
$member_details = array();
while ($members->fetch()) {
@@ -123,7 +130,7 @@ class FoafGroupAction extends Action
);
$this->element('member', array('rdf:resource' => $member_uri));
}
-
+
$admins = $this->group->getAdmins();
while ($admins->fetch()) {
$admin_uri = common_local_url('userbyid', array('id'=>$admins->id));
@@ -132,7 +139,7 @@ class FoafGroupAction extends Action
}
$this->elementEnd('Group');
-
+
ksort($member_details);
foreach ($member_details as $uri => $details) {
if ($details['is_admin'])
@@ -158,7 +165,7 @@ class FoafGroupAction extends Action
));
}
}
-
+
$this->elementEnd('rdf:RDF');
$this->endXML();
}
diff --git a/actions/grantrole.php b/actions/grantrole.php
new file mode 100644
index 000000000..cd6bd4d79
--- /dev/null
+++ b/actions/grantrole.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Action class to sandbox an abusive user
+ *
+ * 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);
+}
+
+/**
+ * Sandbox a user.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class GrantRoleAction extends ProfileFormAction
+{
+ /**
+ * Check parameters
+ *
+ * @param array $args action arguments (URL, GET, POST)
+ *
+ * @return boolean success flag
+ */
+
+ function prepare($args)
+ {
+ if (!parent::prepare($args)) {
+ return false;
+ }
+
+ $this->role = $this->arg('role');
+ if (!Profile_role::isValid($this->role)) {
+ $this->clientError(_("Invalid role."));
+ return false;
+ }
+ if (!Profile_role::isSettable($this->role)) {
+ $this->clientError(_("This role is reserved and cannot be set."));
+ return false;
+ }
+
+ $cur = common_current_user();
+
+ assert(!empty($cur)); // checked by parent
+
+ if (!$cur->hasRight(Right::GRANTROLE)) {
+ $this->clientError(_("You cannot grant user roles on this site."));
+ return false;
+ }
+
+ assert(!empty($this->profile)); // checked by parent
+
+ if ($this->profile->hasRole($this->role)) {
+ $this->clientError(_("User already has this role."));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Sandbox a user.
+ *
+ * @return void
+ */
+
+ function handlePost()
+ {
+ $this->profile->grantRole($this->role);
+ }
+}
diff --git a/actions/groupdesignsettings.php b/actions/groupdesignsettings.php
index e290ba514..526226a28 100644
--- a/actions/groupdesignsettings.php
+++ b/actions/groupdesignsettings.php
@@ -90,7 +90,10 @@ class GroupDesignSettingsAction extends DesignSettingsAction
if ($groupid) {
$this->group = User_group::staticGet('id', $groupid);
} else {
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if ($local) {
+ $this->group = User_group::staticGet('id', $local->group_id);
+ }
}
if (!$this->group) {
diff --git a/actions/grouplogo.php b/actions/grouplogo.php
index 3c9b56296..f414a23cc 100644
--- a/actions/grouplogo.php
+++ b/actions/grouplogo.php
@@ -92,7 +92,10 @@ class GrouplogoAction extends GroupDesignAction
if ($groupid) {
$this->group = User_group::staticGet('id', $groupid);
} else {
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if ($local) {
+ $this->group = User_group::staticGet('id', $local->group_id);
+ }
}
if (!$this->group) {
diff --git a/actions/groupmembers.php b/actions/groupmembers.php
index f16e972a4..a16debd7b 100644
--- a/actions/groupmembers.php
+++ b/actions/groupmembers.php
@@ -77,7 +77,14 @@ class GroupmembersAction extends GroupDesignAction
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
+
+ $this->group = User_group::staticGet('id', $local->group_id);
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
diff --git a/actions/grouprss.php b/actions/grouprss.php
index 866fc66eb..490f6f945 100644
--- a/actions/grouprss.php
+++ b/actions/grouprss.php
@@ -92,7 +92,14 @@ class groupRssAction extends Rss10Action
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
+
+ $this->group = User_group::staticGet('id', $local->group_id);
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
diff --git a/actions/groups.php b/actions/groups.php
index 10a1d5964..8aacff8b0 100644
--- a/actions/groups.php
+++ b/actions/groups.php
@@ -109,17 +109,21 @@ class GroupsAction extends Action
}
$offset = ($this->page-1) * GROUPS_PER_PAGE;
- $limit = GROUPS_PER_PAGE + 1;
+ $limit = GROUPS_PER_PAGE + 1;
+
+ $qry = 'SELECT user_group.* '.
+ 'from user_group join local_group on user_group.id = local_group.group_id '.
+ 'order by user_group.created desc '.
+ 'limit ' . $limit . ' offset ' . $offset;
$groups = new User_group();
- $groups->orderBy('created DESC');
- $groups->limit($offset, $limit);
$cnt = 0;
- if ($groups->find()) {
- $gl = new GroupList($groups, null, $this);
- $cnt = $gl->show();
- }
+
+ $groups->query($qry);
+
+ $gl = new GroupList($groups, null, $this);
+ $cnt = $gl->show();
$this->pagination($this->page > 1, $cnt > GROUPS_PER_PAGE,
$this->page, 'groups');
diff --git a/actions/hcard.php b/actions/hcard.php
new file mode 100644
index 000000000..55d0f65c8
--- /dev/null
+++ b/actions/hcard.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show the user's hcard
+ *
+ * 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 Personal
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * User profile page
+ *
+ * @category Personal
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class HcardAction extends Action
+{
+ var $user;
+ var $profile;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $nickname_arg = $this->arg('nickname');
+ $nickname = common_canonical_nickname($nickname_arg);
+
+ // Permanent redirect on non-canonical nickname
+
+ if ($nickname_arg != $nickname) {
+ $args = array('nickname' => $nickname);
+ common_redirect(common_local_url('hcard', $args), 301);
+ return false;
+ }
+
+ $this->user = User::staticGet('nickname', $nickname);
+
+ if (!$this->user) {
+ $this->clientError(_('No such user.'), 404);
+ return false;
+ }
+
+ $this->profile = $this->user->getProfile();
+
+ if (!$this->profile) {
+ $this->serverError(_('User has no profile.'));
+ return false;
+ }
+
+ return true;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ function title()
+ {
+ return $this->profile->getBestName();
+ }
+
+ function showContent()
+ {
+ $up = new ShortUserProfile($this, $this->user, $this->profile);
+ $up->show();
+ }
+
+ function showHeader()
+ {
+ return;
+ }
+
+ function showAside()
+ {
+ return;
+ }
+
+ function showSecondaryNav()
+ {
+ return;
+ }
+}
+
+class ShortUserProfile extends UserProfile
+{
+ function showEntityActions()
+ {
+ return;
+ }
+} \ No newline at end of file
diff --git a/actions/invite.php b/actions/invite.php
index d0ed64ec9..54b2de62a 100644
--- a/actions/invite.php
+++ b/actions/invite.php
@@ -194,7 +194,8 @@ class InviteAction extends CurrentUserDesignAction
_('Optionally add a personal message to the invitation.'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('send', _('Send'));
+ // TRANS: Send button for inviting friends
+ $this->submit('send', _m('BUTTON', 'Send'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
diff --git a/actions/joingroup.php b/actions/joingroup.php
index 235e5ab4c..f87e5dae2 100644
--- a/actions/joingroup.php
+++ b/actions/joingroup.php
@@ -62,23 +62,33 @@ class JoingroupAction extends Action
}
$nickname_arg = $this->trimmed('nickname');
- $nickname = common_canonical_nickname($nickname_arg);
+ $id = intval($this->arg('id'));
+ if ($id) {
+ $this->group = User_group::staticGet('id', $id);
+ } else if ($nickname_arg) {
+ $nickname = common_canonical_nickname($nickname_arg);
+
+ // Permanent redirect on non-canonical nickname
+
+ if ($nickname_arg != $nickname) {
+ $args = array('nickname' => $nickname);
+ common_redirect(common_local_url('leavegroup', $args), 301);
+ return false;
+ }
- // Permanent redirect on non-canonical nickname
+ $local = Local_group::staticGet('nickname', $nickname);
- if ($nickname_arg != $nickname) {
- $args = array('nickname' => $nickname);
- common_redirect(common_local_url('joingroup', $args), 301);
- return false;
- }
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
- if (!$nickname) {
- $this->clientError(_('No nickname.'), 404);
+ $this->group = User_group::staticGet('id', $local->group_id);
+ } else {
+ $this->clientError(_('No nickname or ID.'), 404);
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
-
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
return false;
diff --git a/actions/leavegroup.php b/actions/leavegroup.php
index 9b9d83b6c..329b5aafe 100644
--- a/actions/leavegroup.php
+++ b/actions/leavegroup.php
@@ -62,23 +62,33 @@ class LeavegroupAction extends Action
}
$nickname_arg = $this->trimmed('nickname');
- $nickname = common_canonical_nickname($nickname_arg);
+ $id = intval($this->arg('id'));
+ if ($id) {
+ $this->group = User_group::staticGet('id', $id);
+ } else if ($nickname_arg) {
+ $nickname = common_canonical_nickname($nickname_arg);
+
+ // Permanent redirect on non-canonical nickname
+
+ if ($nickname_arg != $nickname) {
+ $args = array('nickname' => $nickname);
+ common_redirect(common_local_url('leavegroup', $args), 301);
+ return false;
+ }
- // Permanent redirect on non-canonical nickname
+ $local = Local_group::staticGet('nickname', $nickname);
- if ($nickname_arg != $nickname) {
- $args = array('nickname' => $nickname);
- common_redirect(common_local_url('leavegroup', $args), 301);
- return false;
- }
+ if (!$local) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
- if (!$nickname) {
- $this->clientError(_('No nickname.'), 404);
+ $this->group = User_group::staticGet('id', $local->group_id);
+ } else {
+ $this->clientError(_('No nickname or ID.'), 404);
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
-
if (!$this->group) {
$this->clientError(_('No such group.'), 404);
return false;
diff --git a/actions/newgroup.php b/actions/newgroup.php
index 25da7f8fc..75bc293ec 100644
--- a/actions/newgroup.php
+++ b/actions/newgroup.php
@@ -180,6 +180,8 @@ class NewgroupAction extends Action
}
}
+ $mainpage = common_local_url('showgroup', array('nickname' => $nickname));
+
$cur = common_current_user();
// Checked in prepare() above
@@ -192,16 +194,18 @@ class NewgroupAction extends Action
'description' => $description,
'location' => $location,
'aliases' => $aliases,
- 'userid' => $cur->id));
+ 'userid' => $cur->id,
+ 'mainpage' => $mainpage,
+ 'local' => true));
common_redirect($group->homeUrl(), 303);
}
function nicknameExists($nickname)
{
- $group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
- if (!empty($group)) {
+ if (!empty($local)) {
return true;
}
diff --git a/actions/newnotice.php b/actions/newnotice.php
index 78480abab..ed0fa1b2b 100644
--- a/actions/newnotice.php
+++ b/actions/newnotice.php
@@ -294,6 +294,9 @@ class NewnoticeAction extends Action
if ($profile) {
$content = '@' . $profile->nickname . ' ';
}
+ } else {
+ // @fixme most of these bits above aren't being passed on above
+ $inreplyto = null;
}
$notice_form = new NoticeForm($this, '', $content, null, $inreplyto);
diff --git a/actions/oauthconnectionssettings.php b/actions/oauthconnectionssettings.php
index b1467f0d0..f125f4c63 100644
--- a/actions/oauthconnectionssettings.php
+++ b/actions/oauthconnectionssettings.php
@@ -99,7 +99,7 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
$application = $profile->getApplications($offset, $limit);
- $cnt == 0;
+ $cnt = 0;
if (!empty($application)) {
$al = new ApplicationList($application, $user, $this, true);
@@ -112,7 +112,7 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
$this->pagination($this->page > 1, $cnt > APPS_PER_PAGE,
$this->page, 'connectionssettings',
- array('nickname' => $this->user->nickname));
+ array('nickname' => $user->nickname));
}
/**
diff --git a/actions/postnotice.php b/actions/postnotice.php
index fb0670376..b2f6f1bb9 100644
--- a/actions/postnotice.php
+++ b/actions/postnotice.php
@@ -54,7 +54,10 @@ class PostnoticeAction extends Action
*/
function prepare($argarray)
{
+ StatusNet::setApi(true); // Send smaller error pages
+
parent::prepare($argarray);
+
try {
$this->checkNotice();
} catch (Exception $e) {
@@ -71,6 +74,14 @@ class PostnoticeAction extends Action
$srv = new OMB_Service_Provider(null, omb_oauth_datastore(),
omb_oauth_server());
$srv->handlePostNotice();
+ } catch (OMB_RemoteServiceException $rse) {
+ $msg = $rse->getMessage();
+ if (preg_match('/Revoked accesstoken/', $msg) ||
+ preg_match('/No subscriber/', $msg)) {
+ $this->clientError($msg, 403);
+ } else {
+ $this->clientError($msg);
+ }
} catch (Exception $e) {
$this->serverError($e->getMessage());
return;
diff --git a/actions/profilesettings.php b/actions/profilesettings.php
index 0d6777879..161e35b11 100644
--- a/actions/profilesettings.php
+++ b/actions/profilesettings.php
@@ -285,6 +285,10 @@ class ProfilesettingsAction extends AccountSettingsAction
} else {
// Re-initialize language environment if it changed
common_init_language();
+ // Clear the site owner, in case nickname changed
+ if ($user->hasRole(Profile_role::OWNER)) {
+ User::blow('user:site_owner');
+ }
}
}
diff --git a/actions/public.php b/actions/public.php
index 50278bfce..0b3b5fde8 100644
--- a/actions/public.php
+++ b/actions/public.php
@@ -94,6 +94,7 @@ class PublicAction extends Action
}
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/replies.php b/actions/replies.php
index 164c328db..4ff1b7a8d 100644
--- a/actions/replies.php
+++ b/actions/replies.php
@@ -89,6 +89,7 @@ class RepliesAction extends OwnerDesignAction
NOTICES_PER_PAGE + 1);
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/revokerole.php b/actions/revokerole.php
new file mode 100644
index 000000000..b78c1c25a
--- /dev/null
+++ b/actions/revokerole.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Action class to sandbox an abusive user
+ *
+ * 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);
+}
+
+/**
+ * Sandbox a user.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class RevokeRoleAction extends ProfileFormAction
+{
+ /**
+ * Check parameters
+ *
+ * @param array $args action arguments (URL, GET, POST)
+ *
+ * @return boolean success flag
+ */
+
+ function prepare($args)
+ {
+ if (!parent::prepare($args)) {
+ return false;
+ }
+
+ $this->role = $this->arg('role');
+ if (!Profile_role::isValid($this->role)) {
+ $this->clientError(_("Invalid role."));
+ return false;
+ }
+ if (!Profile_role::isSettable($this->role)) {
+ $this->clientError(_("This role is reserved and cannot be set."));
+ return false;
+ }
+
+ $cur = common_current_user();
+
+ assert(!empty($cur)); // checked by parent
+
+ if (!$cur->hasRight(Right::REVOKEROLE)) {
+ $this->clientError(_("You cannot revoke user roles on this site."));
+ return false;
+ }
+
+ assert(!empty($this->profile)); // checked by parent
+
+ if (!$this->profile->hasRole($this->role)) {
+ $this->clientError(_("User doesn't have this role."));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Sandbox a user.
+ *
+ * @return void
+ */
+
+ function handlePost()
+ {
+ $this->profile->revokeRole($this->role);
+ }
+}
diff --git a/actions/showfavorites.php b/actions/showfavorites.php
index f2d082293..5b85de683 100644
--- a/actions/showfavorites.php
+++ b/actions/showfavorites.php
@@ -134,6 +134,7 @@ class ShowfavoritesAction extends OwnerDesignAction
}
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/showgroup.php b/actions/showgroup.php
index eb1238902..5704b13d1 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -122,9 +122,9 @@ class ShowgroupAction extends GroupDesignAction
return false;
}
- $this->group = User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
- if (!$this->group) {
+ if (!$local) {
$alias = Group_alias::staticGet('alias', $nickname);
if ($alias) {
$args = array('id' => $alias->group_id);
@@ -134,11 +134,19 @@ class ShowgroupAction extends GroupDesignAction
common_redirect(common_local_url('groupbyid', $args), 301);
return false;
} else {
+ common_log(LOG_NOTICE, "Couldn't find local group for nickname '$nickname'");
$this->clientError(_('No such group.'), 404);
return false;
}
}
+ $this->group = User_group::staticGet('id', $local->group_id);
+
+ if (!$this->group) {
+ $this->clientError(_('No such group.'), 404);
+ return false;
+ }
+
common_set_returnto($this->selfUrl());
return true;
@@ -293,19 +301,20 @@ class ShowgroupAction extends GroupDesignAction
$this->element('h2', null, _('Group actions'));
$this->elementStart('ul');
$this->elementStart('li', 'entity_subscribe');
- $cur = common_current_user();
- if ($cur) {
- if ($cur->isMember($this->group)) {
- $lf = new LeaveForm($this, $this->group);
- $lf->show();
- } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) {
- $jf = new JoinForm($this, $this->group);
- $jf->show();
+ if (Event::handle('StartGroupSubscribe', array($this, $this->group))) {
+ $cur = common_current_user();
+ if ($cur) {
+ if ($cur->isMember($this->group)) {
+ $lf = new LeaveForm($this, $this->group);
+ $lf->show();
+ } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) {
+ $jf = new JoinForm($this, $this->group);
+ $jf->show();
+ }
}
+ Event::handle('EndGroupSubscribe', array($this, $this->group));
}
-
$this->elementEnd('li');
-
$this->elementEnd('ul');
$this->elementEnd('div');
}
diff --git a/actions/siteadminpanel.php b/actions/siteadminpanel.php
index 8c8f8b374..cb3c2e8fd 100644
--- a/actions/siteadminpanel.php
+++ b/actions/siteadminpanel.php
@@ -66,7 +66,7 @@ class SiteadminpanelAction extends AdminPanelAction
function getInstructions()
{
- return _('Basic settings for this StatusNet site.');
+ return _('Basic settings for this StatusNet site');
}
/**
@@ -90,10 +90,11 @@ class SiteadminpanelAction extends AdminPanelAction
function saveSettings()
{
- static $settings = array('site' => array('name', 'broughtby', 'broughtbyurl',
- 'email', 'timezone', 'language',
- 'site', 'textlimit', 'dupelimit'),
- 'snapshot' => array('run', 'reporturl', 'frequency'));
+ static $settings = array(
+ 'site' => array('name', 'broughtby', 'broughtbyurl',
+ 'email', 'timezone', 'language',
+ 'site', 'textlimit', 'dupelimit'),
+ );
$values = array();
@@ -158,25 +159,6 @@ class SiteadminpanelAction extends AdminPanelAction
$this->clientError(sprintf(_('Unknown language "%s".'), $values['site']['language']));
}
- // Validate report URL
-
- if (!is_null($values['snapshot']['reporturl']) &&
- !Validate::uri($values['snapshot']['reporturl'], array('allowed_schemes' => array('http', 'https')))) {
- $this->clientError(_("Invalid snapshot report URL."));
- }
-
- // Validate snapshot run value
-
- if (!in_array($values['snapshot']['run'], array('web', 'cron', 'never'))) {
- $this->clientError(_("Invalid snapshot run value."));
- }
-
- // Validate snapshot run value
-
- if (!Validate::number($values['snapshot']['frequency'])) {
- $this->clientError(_("Snapshot frequency must be a number."));
- }
-
// Validate text limit
if (!Validate::number($values['site']['textlimit'], array('min' => 140))) {
@@ -277,40 +259,14 @@ class SiteAdminPanelForm extends AdminForm
$this->unli();
$this->li();
- $this->out->dropdown('language', _('Language'),
- get_nice_language_list(), _('Default site language'),
+ $this->out->dropdown('language', _('Default language'),
+ get_nice_language_list(), _('Site language when autodetection from browser settings is not available'),
false, $this->value('language'));
$this->unli();
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
- $this->out->elementStart('fieldset', array('id' => 'settings_admin_snapshots'));
- $this->out->element('legend', null, _('Snapshots'));
- $this->out->elementStart('ul', 'form_data');
- $this->li();
- $snapshot = array('web' => _('Randomly during Web hit'),
- 'cron' => _('In a scheduled job'),
- 'never' => _('Never'));
- $this->out->dropdown('run', _('Data snapshots'),
- $snapshot, _('When to send statistical data to status.net servers'),
- false, $this->value('run', 'snapshot'));
- $this->unli();
-
- $this->li();
- $this->input('frequency', _('Frequency'),
- _('Snapshots will be sent once every N web hits'),
- 'snapshot');
- $this->unli();
-
- $this->li();
- $this->input('reporturl', _('Report URL'),
- _('Snapshots will be sent to this URL'),
- 'snapshot');
- $this->unli();
- $this->out->elementEnd('ul');
- $this->out->elementEnd('fieldset');
-
$this->out->elementStart('fieldset', array('id' => 'settings_admin_limits'));
$this->out->element('legend', null, _('Limits'));
$this->out->elementStart('ul', 'form_data');
diff --git a/actions/sitenoticeadminpanel.php b/actions/sitenoticeadminpanel.php
new file mode 100644
index 000000000..3931aa982
--- /dev/null
+++ b/actions/sitenoticeadminpanel.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Site notice administration panel
+ *
+ * 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 Settings
+ * @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);
+}
+
+require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+
+/**
+ * Update the site-wide notice text
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class SitenoticeadminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return _('Site Notice');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _('Edit site-wide message');
+ }
+
+ /**
+ * Show the site notice admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new SiteNoticeAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ $siteNotice = $this->trimmed('site-notice');
+
+ // assert(all values are valid);
+ // This throws an exception on validation errors
+
+ $this->validate(&$siteNotice);
+
+ $config = new Config();
+
+ $result = Config::save('site', 'notice', $siteNotice);
+
+ if (!$result) {
+ $this->ServerError(_("Unable to save site notice."));
+ }
+ }
+
+ function validate(&$siteNotice)
+ {
+ // Validate notice text
+
+ if (mb_strlen($siteNotice) > 255) {
+ $this->clientError(
+ _('Max length for the site-wide notice is 255 chars')
+ );
+ }
+
+ // scrub HTML input
+
+ $config = array(
+ 'safe' => 1,
+ 'deny_attribute' => 'id,style,on*'
+ );
+
+ $siteNotice = htmLawed($siteNotice, $config);
+ }
+}
+
+class SiteNoticeAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'form_site_notice_admin_panel';
+ }
+
+ /**
+ * class of the form
+ *
+ * @return string class of the form
+ */
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ /**
+ * Action of the form
+ *
+ * @return string URL of the action
+ */
+
+ function action()
+ {
+ return common_local_url('sitenoticeadminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->out->elementStart('li');
+ $this->out->textarea(
+ 'site-notice',
+ _('Site notice text'),
+ common_config('site', 'notice'),
+ _('Site-wide notice text (255 chars max; HTML okay)')
+ );
+ $this->out->elementEnd('li');
+
+ $this->out->elementEnd('ul');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit(
+ 'submit',
+ _('Save'),
+ 'submit',
+ null,
+ _('Save site notice')
+ );
+ }
+}
diff --git a/actions/snapshotadminpanel.php b/actions/snapshotadminpanel.php
new file mode 100644
index 000000000..a0c2315bc
--- /dev/null
+++ b/actions/snapshotadminpanel.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Snapshots administration panel
+ *
+ * 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 Settings
+ * @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);
+}
+
+/**
+ * Manage snapshots
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class SnapshotadminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return _('Snapshots');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _('Manage snapshot configuration');
+ }
+
+ /**
+ * Show the snapshots admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new SnapshotAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $settings = array(
+ 'snapshot' => array('run', 'reporturl', 'frequency')
+ );
+
+ $values = array();
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting] = $this->trimmed($setting);
+ }
+ }
+
+ // This throws an exception on validation errors
+
+ $this->validate($values);
+
+ // assert(all values are valid);
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+ function validate(&$values)
+ {
+ // Validate snapshot run value
+
+ if (!in_array($values['snapshot']['run'], array('web', 'cron', 'never'))) {
+ $this->clientError(_("Invalid snapshot run value."));
+ }
+
+ // Validate snapshot frequency value
+
+ if (!Validate::number($values['snapshot']['frequency'])) {
+ $this->clientError(_("Snapshot frequency must be a number."));
+ }
+
+ // Validate report URL
+
+ if (!is_null($values['snapshot']['reporturl'])
+ && !Validate::uri(
+ $values['snapshot']['reporturl'],
+ array('allowed_schemes' => array('http', 'https')
+ )
+ )) {
+ $this->clientError(_("Invalid snapshot report URL."));
+ }
+ }
+}
+
+class SnapshotAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'form_snapshot_admin_panel';
+ }
+
+ /**
+ * class of the form
+ *
+ * @return string class of the form
+ */
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ /**
+ * Action of the form
+ *
+ * @return string URL of the action
+ */
+
+ function action()
+ {
+ return common_local_url('snapshotadminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart(
+ 'fieldset',
+ array('id' => 'settings_admin_snapshots')
+ );
+ $this->out->element('legend', null, _('Snapshots'));
+ $this->out->elementStart('ul', 'form_data');
+ $this->li();
+ $snapshot = array(
+ 'web' => _('Randomly during Web hit'),
+ 'cron' => _('In a scheduled job'),
+ 'never' => _('Never')
+ );
+ $this->out->dropdown(
+ 'run',
+ _('Data snapshots'),
+ $snapshot,
+ _('When to send statistical data to status.net servers'),
+ false,
+ $this->value('run', 'snapshot')
+ );
+ $this->unli();
+
+ $this->li();
+ $this->input(
+ 'frequency',
+ _('Frequency'),
+ _('Snapshots will be sent once every N web hits'),
+ 'snapshot'
+ );
+ $this->unli();
+
+ $this->li();
+ $this->input(
+ 'reporturl',
+ _('Report URL'),
+ _('Snapshots will be sent to this URL'),
+ 'snapshot'
+ );
+ $this->unli();
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit(
+ 'submit',
+ _('Save'),
+ 'submit',
+ null,
+ _('Save snapshot settings')
+ );
+ }
+}
diff --git a/actions/subscribe.php b/actions/subscribe.php
index a90d7facd..b1243f393 100644
--- a/actions/subscribe.php
+++ b/actions/subscribe.php
@@ -1,7 +1,9 @@
<?php
-/*
+/**
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010, StatusNet, Inc.
+ *
+ * Subscription action.
*
* 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
@@ -15,68 +17,142 @@
*
* 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/>.
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2008-2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Subscription action
+ *
+ * Subscribing to a profile. Does not work for OMB 0.1 remote subscriptions,
+ * but may work for other remote subscription protocols, like OStatus.
+ *
+ * Takes parameters:
+ *
+ * - subscribeto: a profile ID
+ * - token: session token to prevent CSRF attacks
+ * - ajax: boolean; whether to return Ajax or full-browser results
+ *
+ * Only works if the current user is logged in.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2008-2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
class SubscribeAction extends Action
{
+ var $user;
+ var $other;
- function handle($args)
- {
- parent::handle($args);
+ /**
+ * Check pre-requisites and instantiate attributes
+ *
+ * @param Array $args array of arguments (URL, GET, POST)
+ *
+ * @return boolean success flag
+ */
- if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'));
- return;
- }
+ function prepare($args)
+ {
+ parent::prepare($args);
- $user = common_current_user();
+ // Only allow POST requests
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
- common_redirect(common_local_url('subscriptions', array('nickname' => $user->nickname)));
- return;
+ $this->clientError(_('This action only accepts POST requests.'));
+ return false;
}
- # CSRF protection
+ // CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->clientError(_('There was a problem with your session token. Try again, please.'));
- return;
+ $this->clientError(_('There was a problem with your session token.'.
+ ' Try again, please.'));
+ return false;
+ }
+
+ // Only for logged-in users
+
+ $this->user = common_current_user();
+
+ if (empty($this->user)) {
+ $this->clientError(_('Not logged in.'));
+ return false;
}
+ // Profile to subscribe to
+
$other_id = $this->arg('subscribeto');
- $other = User::staticGet('id', $other_id);
+ $this->other = Profile::staticGet('id', $other_id);
- if (!$other) {
- $this->clientError(_('Not a local user.'));
- return;
+ if (empty($this->other)) {
+ $this->clientError(_('No such profile.'));
+ return false;
}
- $result = subs_subscribe_to($user, $other);
+ // OMB 0.1 doesn't have a mechanism for local-server-
+ // originated subscription.
+
+ $omb01 = Remote_profile::staticGet('id', $other_id);
- if (is_string($result)) {
- $this->clientError($result);
- return;
+ if (!empty($omb01)) {
+ $this->clientError(_('You cannot subscribe to an OMB 0.1'.
+ ' remote profile with this action.'));
+ return false;
}
+ return true;
+ }
+
+ /**
+ * Handle request
+ *
+ * Does the subscription and returns results.
+ *
+ * @param Array $args unused.
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ // Throws exception on error
+
+ Subscription::start($this->user->getProfile(),
+ $this->other);
+
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
$this->element('title', null, _('Subscribed'));
$this->elementEnd('head');
$this->elementStart('body');
- $unsubscribe = new UnsubscribeForm($this, $other->getProfile());
+ $unsubscribe = new UnsubscribeForm($this, $this->other);
$unsubscribe->show();
$this->elementEnd('body');
$this->elementEnd('html');
} else {
- common_redirect(common_local_url('subscriptions', array('nickname' =>
- $user->nickname)),
- 303);
+ $url = common_local_url('subscriptions',
+ array('nickname' => $this->user->nickname));
+ common_redirect($url, 303);
}
}
}
diff --git a/actions/subscribers.php b/actions/subscribers.php
index cd3e2ee5b..4bced6284 100644
--- a/actions/subscribers.php
+++ b/actions/subscribers.php
@@ -143,9 +143,12 @@ class SubscribersListItem extends SubscriptionListItem
function showActions()
{
$this->startActions();
- $this->showSubscribeButton();
- // Relevant code!
- $this->showBlockForm();
+ if (Event::handle('StartProfileListItemActionElements', array($this))) {
+ $this->showSubscribeButton();
+ // Relevant code!
+ $this->showBlockForm();
+ Event::handle('EndProfileListItemActionElements', array($this));
+ }
$this->endActions();
}
diff --git a/actions/subscriptions.php b/actions/subscriptions.php
index 0ef31aa9f..ba6171ef4 100644
--- a/actions/subscriptions.php
+++ b/actions/subscriptions.php
@@ -79,32 +79,37 @@ class SubscriptionsAction extends GalleryAction
function showContent()
{
- parent::showContent();
+ if (Event::handle('StartShowSubscriptionsContent', array($this))) {
+ parent::showContent();
- $offset = ($this->page-1) * PROFILES_PER_PAGE;
- $limit = PROFILES_PER_PAGE + 1;
+ $offset = ($this->page-1) * PROFILES_PER_PAGE;
+ $limit = PROFILES_PER_PAGE + 1;
- $cnt = 0;
+ $cnt = 0;
- if ($this->tag) {
- $subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
- } else {
- $subscriptions = $this->user->getSubscriptions($offset, $limit);
- }
+ if ($this->tag) {
+ $subscriptions = $this->user->getTaggedSubscriptions($this->tag, $offset, $limit);
+ } else {
+ $subscriptions = $this->user->getSubscriptions($offset, $limit);
+ }
- if ($subscriptions) {
- $subscriptions_list = new SubscriptionsList($subscriptions, $this->user, $this);
- $cnt = $subscriptions_list->show();
- if (0 == $cnt) {
- $this->showEmptyListMessage();
+ if ($subscriptions) {
+ $subscriptions_list = new SubscriptionsList($subscriptions, $this->user, $this);
+ $cnt = $subscriptions_list->show();
+ if (0 == $cnt) {
+ $this->showEmptyListMessage();
+ }
}
- }
- $subscriptions->free();
+ $subscriptions->free();
+
+ $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
+ $this->page, 'subscriptions',
+ array('nickname' => $this->user->nickname));
- $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
- $this->page, 'subscriptions',
- array('nickname' => $this->user->nickname));
+
+ Event::handle('EndShowSubscriptionsContent', array($this));
+ }
}
function showScripts()
diff --git a/actions/sup.php b/actions/sup.php
index 5daf0a1c1..4e428dfa5 100644
--- a/actions/sup.php
+++ b/actions/sup.php
@@ -66,10 +66,12 @@ class SupAction extends Action
$divider = common_sql_date(time() - $seconds);
$notice->query('SELECT profile_id, max(id) AS max_id ' .
- 'FROM notice ' .
+ 'FROM ( ' .
+ 'SELECT profile_id, id FROM notice ' .
((common_config('db','type') == 'pgsql') ?
'WHERE extract(epoch from created) > (extract(epoch from now()) - ' . $seconds . ') ' :
'WHERE created > "'.$divider.'" ' ) .
+ ') AS latest ' .
'GROUP BY profile_id');
$updates = array();
diff --git a/actions/tag.php b/actions/tag.php
index e91df6ea9..ee9617b66 100644
--- a/actions/tag.php
+++ b/actions/tag.php
@@ -48,6 +48,7 @@ class TagAction extends Action
$this->notice = Notice_tag::getStream($this->tag, (($this->page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1);
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/twitapisearchatom.php b/actions/twitapisearchatom.php
index baed2a0c7..24aa619bd 100644
--- a/actions/twitapisearchatom.php
+++ b/actions/twitapisearchatom.php
@@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once INSTALLDIR.'/lib/api.php';
-
/**
* Action for outputting search results in Twitter compatible Atom
* format.
@@ -245,7 +243,7 @@ class TwitapisearchatomAction extends ApiAction
'xmlns:twitter' => 'http://api.twitter.com/',
'xml:lang' => 'en-US')); // XXX Other locales ?
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$this->element('id', null, "tag:$taguribase:search/$server");
$site_uri = common_path(false);
@@ -329,7 +327,7 @@ class TwitapisearchatomAction extends ApiAction
$this->elementStart('entry');
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$this->element('id', null, "tag:$taguribase:$notice->id");
$this->element('published', null, common_date_w3dtf($notice->created));
diff --git a/actions/twitapisearchjson.php b/actions/twitapisearchjson.php
index 741ed78d6..b5c006aa7 100644
--- a/actions/twitapisearchjson.php
+++ b/actions/twitapisearchjson.php
@@ -31,7 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once INSTALLDIR.'/lib/api.php';
require_once INSTALLDIR.'/lib/jsonsearchresultslist.php';
/**
diff --git a/actions/twitapitrends.php b/actions/twitapitrends.php
index 779405e6d..5a04569a2 100644
--- a/actions/twitapitrends.php
+++ b/actions/twitapitrends.php
@@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once INSTALLDIR.'/lib/api.php';
-
/**
* Returns the top ten queries that are currently trending
*
diff --git a/actions/updateprofile.php b/actions/updateprofile.php
index e416a6fa9..bae6108cc 100644
--- a/actions/updateprofile.php
+++ b/actions/updateprofile.php
@@ -55,6 +55,8 @@ class UpdateprofileAction extends Action
*/
function prepare($argarray)
{
+ StatusNet::setApi(true); // Send smaller error pages
+
parent::prepare($argarray);
$license = $_POST['omb_listenee_license'];
$site_license = common_config('license', 'url');
@@ -75,6 +77,14 @@ class UpdateprofileAction extends Action
$srv = new OMB_Service_Provider(null, omb_oauth_datastore(),
omb_oauth_server());
$srv->handleUpdateProfile();
+ } catch (OMB_RemoteServiceException $rse) {
+ $msg = $rse->getMessage();
+ if (preg_match('/Revoked accesstoken/', $msg) ||
+ preg_match('/No subscriber/', $msg)) {
+ $this->clientError($msg, 403);
+ } else {
+ $this->clientError($msg);
+ }
} catch (Exception $e) {
$this->serverError($e->getMessage());
return;
diff --git a/actions/useradminpanel.php b/actions/useradminpanel.php
index 6813222f5..ee9c23076 100644
--- a/actions/useradminpanel.php
+++ b/actions/useradminpanel.php
@@ -55,7 +55,8 @@ class UseradminpanelAction extends AdminPanelAction
function title()
{
- return _('User');
+ // TRANS: User admin panel title
+ return _m('TITLE', 'User');
}
/**
diff --git a/actions/usergroups.php b/actions/usergroups.php
index 97faabae6..29bda0a76 100644
--- a/actions/usergroups.php
+++ b/actions/usergroups.php
@@ -130,22 +130,26 @@ class UsergroupsAction extends OwnerDesignAction
_('Search for more groups'));
$this->elementEnd('p');
- $offset = ($this->page-1) * GROUPS_PER_PAGE;
- $limit = GROUPS_PER_PAGE + 1;
+ if (Event::handle('StartShowUserGroupsContent', array($this))) {
+ $offset = ($this->page-1) * GROUPS_PER_PAGE;
+ $limit = GROUPS_PER_PAGE + 1;
+
+ $groups = $this->user->getGroups($offset, $limit);
+
+ if ($groups) {
+ $gl = new GroupList($groups, $this->user, $this);
+ $cnt = $gl->show();
+ if (0 == $cnt) {
+ $this->showEmptyListMessage();
+ }
+ }
- $groups = $this->user->getGroups($offset, $limit);
+ $this->pagination($this->page > 1, $cnt > GROUPS_PER_PAGE,
+ $this->page, 'usergroups',
+ array('nickname' => $this->user->nickname));
- if ($groups) {
- $gl = new GroupList($groups, $this->user, $this);
- $cnt = $gl->show();
- if (0 == $cnt) {
- $this->showEmptyListMessage();
- }
+ Event::handle('EndShowUserGroupsContent', array($this));
}
-
- $this->pagination($this->page > 1, $cnt > GROUPS_PER_PAGE,
- $this->page, 'usergroups',
- array('nickname' => $this->user->nickname));
}
function showEmptyListMessage()
diff --git a/classes/Fave.php b/classes/Fave.php
index 8113c8e16..a04f15e9c 100644
--- a/classes/Fave.php
+++ b/classes/Fave.php
@@ -21,17 +21,47 @@ class Fave extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- static function addNew($user, $notice) {
- $fave = new Fave();
- $fave->user_id = $user->id;
- $fave->notice_id = $notice->id;
- if (!$fave->insert()) {
- common_log_db_error($fave, 'INSERT', __FILE__);
- return false;
+ static function addNew($profile, $notice) {
+
+ $fave = null;
+
+ if (Event::handle('StartFavorNotice', array($profile, $notice, &$fave))) {
+
+ $fave = new Fave();
+
+ $fave->user_id = $profile->id;
+ $fave->notice_id = $notice->id;
+
+ if (!$fave->insert()) {
+ common_log_db_error($fave, 'INSERT', __FILE__);
+ return false;
+ }
+
+ Event::handle('EndFavorNotice', array($profile, $notice));
}
+
return $fave;
}
+ function delete()
+ {
+ $profile = Profile::staticGet('id', $this->user_id);
+ $notice = Notice::staticGet('id', $this->notice_id);
+
+ $result = null;
+
+ if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) {
+
+ $result = parent::delete();
+
+ if ($result) {
+ Event::handle('EndDisfavorNotice', array($profile, $notice));
+ }
+ }
+
+ return $result;
+ }
+
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Fave', $kv);
@@ -47,7 +77,7 @@ class Fave extends Memcached_DataObject
return $ids;
}
- function _streamDirect($user_id, $own, $offset, $limit, $since_id, $max_id, $since)
+ function _streamDirect($user_id, $own, $offset, $limit, $since_id, $max_id)
{
$fav = new Fave();
$qry = null;
@@ -70,10 +100,6 @@ class Fave extends Memcached_DataObject
$qry .= 'AND notice_id <= ' . $max_id . ' ';
}
- if (!is_null($since)) {
- $qry .= 'AND modified > \'' . date('Y-m-d H:i:s', $since) . '\' ';
- }
-
// NOTE: we sort by fave time, not by notice time!
$qry .= 'ORDER BY modified DESC ';
diff --git a/classes/File.php b/classes/File.php
index 189e04ce0..4ecd3b959 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -169,7 +169,11 @@ class File extends Memcached_DataObject
{
require_once 'MIME/Type/Extension.php';
$mte = new MIME_Type_Extension();
- $ext = $mte->getExtension($mimetype);
+ try {
+ $ext = $mte->getExtension($mimetype);
+ } catch ( Exception $e) {
+ $ext = strtolower(preg_replace('/\W/', '', $mimetype));
+ }
$nickname = $profile->nickname;
$datestamp = strftime('%Y%m%dT%H%M%S', time());
$random = strtolower(common_confirmation_code(32));
@@ -286,5 +290,12 @@ class File extends Memcached_DataObject
}
return $enclosure;
}
+
+ // quick back-compat hack, since there's still code using this
+ function isEnclosure()
+ {
+ $enclosure = $this->getEnclosure();
+ return !empty($enclosure);
+ }
}
diff --git a/classes/Inbox.php b/classes/Inbox.php
index be62611a1..014ba3d82 100644
--- a/classes/Inbox.php
+++ b/classes/Inbox.php
@@ -137,7 +137,7 @@ class Inbox extends Memcached_DataObject
}
}
- function stream($user_id, $offset, $limit, $since_id, $max_id, $since, $own=false)
+ function stream($user_id, $offset, $limit, $since_id, $max_id, $own=false)
{
$inbox = Inbox::staticGet('user_id', $user_id);
@@ -195,15 +195,15 @@ class Inbox extends Memcached_DataObject
* @param int $limit
* @param mixed $since_id return only notices after but not including this id
* @param mixed $max_id return only notices up to and including this id
- * @param mixed $since obsolete/ignored
* @param mixed $own ignored?
* @return array of Notice objects
*
* @todo consider repacking the inbox when this happens?
+ * @fixme reimplement $own if we need it?
*/
- function streamNotices($user_id, $offset, $limit, $since_id, $max_id, $since, $own=false)
+ function streamNotices($user_id, $offset, $limit, $since_id, $max_id, $own=false)
{
- $ids = self::stream($user_id, $offset, self::MAX_NOTICES, $since_id, $max_id, $since, $own);
+ $ids = self::stream($user_id, $offset, self::MAX_NOTICES, $since_id, $max_id, $own);
// Do a bulk lookup for the first $limit items
// Fast path when nothing's deleted.
diff --git a/classes/Local_group.php b/classes/Local_group.php
new file mode 100644
index 000000000..42312ec63
--- /dev/null
+++ b/classes/Local_group.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Table Definition for local_group
+ */
+
+class Local_group extends Memcached_DataObject
+{
+ ###START_AUTOCODE
+ /* the code below is auto generated do not remove the above tag */
+
+ public $__table = 'local_group'; // table name
+ public $group_id; // int(4) primary_key not_null
+ public $nickname; // varchar(64) unique_key
+ public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00
+ public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
+
+ /* Static get */
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Local_group',$k,$v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ function setNickname($nickname)
+ {
+ $this->decache();
+ $qry = 'UPDATE local_group set nickname = "'.$nickname.'" where group_id = ' . $this->group_id;
+
+ $result = $this->query($qry);
+
+ if ($result) {
+ $this->nickname = $nickname;
+ $this->fixupTimestamps();
+ $this->encache();
+ } else {
+ common_log_db_error($local, 'UPDATE', __FILE__);
+ throw new ServerException(_('Could not update local group.'));
+ }
+
+ return $result;
+ }
+}
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index 40576dc71..bc4c3a000 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -501,7 +501,11 @@ class Memcached_DataObject extends Safe_DataObject
function raiseError($message, $type = null, $behaviour = null)
{
- throw new ServerException("DB_DataObject error [$type]: $message");
+ $id = get_class($this);
+ if ($this->id) {
+ $id .= ':' . $this->id;
+ }
+ throw new ServerException("[$id] DB_DataObject error [$type]: $message");
}
static function cacheGet($keyPart)
diff --git a/classes/Notice.php b/classes/Notice.php
index b0edb6de6..4c7e6ab4b 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -121,6 +121,9 @@ class Notice extends Memcached_DataObject
$result = parent::delete();
}
+ /**
+ * Extract #hashtags from this notice's content and save them to the database.
+ */
function saveTags()
{
/* extract all #hastags */
@@ -129,14 +132,22 @@ class Notice extends Memcached_DataObject
return true;
}
+ /* Add them to the database */
+ return $this->saveKnownTags($match[1]);
+ }
+
+ /**
+ * Record the given set of hash tags in the db for this notice.
+ * Given tag strings will be normalized and checked for dupes.
+ */
+ function saveKnownTags($hashtags)
+ {
//turn each into their canonical tag
//this is needed to remove dupes before saving e.g. #hash.tag = #hashtag
- $hashtags = array();
- for($i=0; $i<count($match[1]); $i++) {
- $hashtags[] = common_canonical_tag($match[1][$i]);
+ for($i=0; $i<count($hashtags); $i++) {
+ $hashtags[$i] = common_canonical_tag($hashtags[$i]);
}
- /* Add them to the database */
foreach(array_unique($hashtags) as $hashtag) {
/* elide characters we don't want in the tag */
$this->saveTag($hashtag);
@@ -145,6 +156,10 @@ class Notice extends Memcached_DataObject
return true;
}
+ /**
+ * Record a single hash tag as associated with this notice.
+ * Tag format and uniqueness must be validated by caller.
+ */
function saveTag($hashtag)
{
$tag = new Notice_tag();
@@ -187,13 +202,25 @@ class Notice extends Memcached_DataObject
* int 'location_ns' geoname namespace to interpret location_id
* int 'reply_to'; notice ID this is a reply to
* int 'repeat_of'; notice ID this is a repeat of
- * string 'uri' permalink to notice; defaults to local notice URL
+ * string 'uri' unique ID for notice; defaults to local notice URL
+ * string 'url' permalink to notice; defaults to local notice URL
+ * string 'rendered' rendered HTML version of content
+ * array 'replies' list of profile URIs for reply delivery in
+ * place of extracting @-replies from content.
+ * array 'groups' list of group IDs to deliver to, in place of
+ * extracting ! tags from content
+ * array 'tags' list of hashtag strings to save with the notice
+ * in place of extracting # tags from content
+ * array 'urls' list of attached/referred URLs to save with the
+ * notice in place of extracting links from content
+ * @fixme tag override
*
* @return Notice
* @throws ClientException
*/
static function saveNew($profile_id, $content, $source, $options=null) {
$defaults = array('uri' => null,
+ 'url' => null,
'reply_to' => null,
'repeat_of' => null);
@@ -256,9 +283,10 @@ class Notice extends Memcached_DataObject
}
$notice->content = $final;
- $notice->rendered = common_render_content($final, $notice);
+
$notice->source = $source;
$notice->uri = $uri;
+ $notice->url = $url;
// Handle repeat case
@@ -283,6 +311,12 @@ class Notice extends Memcached_DataObject
$notice->location_ns = $location_ns;
}
+ if (!empty($rendered)) {
+ $notice->rendered = $rendered;
+ } else {
+ $notice->rendered = common_render_content($final, $notice);
+ }
+
if (Event::handle('StartNoticeSave', array(&$notice))) {
// XXX: some of these functions write to the DB
@@ -325,8 +359,36 @@ class Notice extends Memcached_DataObject
# Clear the cache for subscribed users, so they'll update at next request
# XXX: someone clever could prepend instead of clearing the cache
+
$notice->blowOnInsert();
+ // Save per-notice metadata...
+
+ if (isset($replies)) {
+ $notice->saveKnownReplies($replies);
+ } else {
+ $notice->saveReplies();
+ }
+
+ if (isset($groups)) {
+ $notice->saveKnownGroups($groups);
+ } else {
+ $notice->saveGroups();
+ }
+
+ if (isset($tags)) {
+ $notice->saveKnownTags($tags);
+ } else {
+ $notice->saveTags();
+ }
+
+ if (isset($urls)) {
+ $notice->saveKnownUrls($urls);
+ } else {
+ $notice->saveUrls();
+ }
+
+ // Prepare inbox delivery, may be queued to background.
$notice->distribute();
return $notice;
@@ -370,6 +432,25 @@ class Notice extends Memcached_DataObject
common_replace_urls_callback($this->content, array($this, 'saveUrl'), $this->id);
}
+ /**
+ * Save the given URLs as related links/attachments to the db
+ *
+ * follow redirects and save all available file information
+ * (mimetype, date, size, oembed, etc.)
+ *
+ * @return void
+ */
+ function saveKnownUrls($urls)
+ {
+ // @fixme validation?
+ foreach ($urls as $url) {
+ File::processNew($url, $this->id);
+ }
+ }
+
+ /**
+ * @private callback
+ */
function saveUrl($data) {
list($url, $notice_id) = $data;
File::processNew($url, $notice_id);
@@ -502,17 +583,17 @@ class Notice extends Memcached_DataObject
}
}
- function publicStream($offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
+ function publicStream($offset=0, $limit=20, $since_id=0, $max_id=0)
{
$ids = Notice::stream(array('Notice', '_publicStreamDirect'),
array(),
'public',
- $offset, $limit, $since_id, $max_id, $since);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- function _publicStreamDirect($offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
+ function _publicStreamDirect($offset=0, $limit=20, $since_id=0, $max_id=0)
{
$notice = new Notice();
@@ -541,10 +622,6 @@ class Notice extends Memcached_DataObject
$notice->whereAdd('id <= ' . $max_id);
}
- if (!is_null($since)) {
- $notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$ids = array();
if ($notice->find()) {
@@ -559,17 +636,17 @@ class Notice extends Memcached_DataObject
return $ids;
}
- function conversationStream($id, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
+ function conversationStream($id, $offset=0, $limit=20, $since_id=0, $max_id=0)
{
$ids = Notice::stream(array('Notice', '_conversationStreamDirect'),
array($id),
'notice:conversation_ids:'.$id,
- $offset, $limit, $since_id, $max_id, $since);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- function _conversationStreamDirect($id, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
+ function _conversationStreamDirect($id, $offset=0, $limit=20, $since_id=0, $max_id=0)
{
$notice = new Notice();
@@ -592,10 +669,6 @@ class Notice extends Memcached_DataObject
$notice->whereAdd('id <= ' . $max_id);
}
- if (!is_null($since)) {
- $notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$ids = array();
if ($notice->find()) {
@@ -677,11 +750,39 @@ class Notice extends Memcached_DataObject
return $ni;
}
- function addToInboxes($groups, $recipients)
+ /**
+ * Adds this notice to the inboxes of each local user who should receive
+ * it, based on author subscriptions, group memberships, and @-replies.
+ *
+ * Warning: running a second time currently will make items appear
+ * multiple times in users' inboxes.
+ *
+ * @fixme make more robust against errors
+ * @fixme break up massive deliveries to smaller background tasks
+ *
+ * @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
+ */
+ function addToInboxes($groups=null, $recipients=null)
{
$ni = $this->whoGets($groups, $recipients);
- Inbox::bulkInsert($this->id, array_keys($ni));
+ $ids = array_keys($ni);
+
+ // We remove the author (if they're a local user),
+ // since we'll have already done this in distribute()
+
+ $i = array_search($this->profile_id, $ids);
+
+ if ($i !== false) {
+ unset($ids[$i]);
+ }
+
+ // Bulk insert
+
+ Inbox::bulkInsert($this->id, $ids);
return;
}
@@ -714,6 +815,42 @@ class Notice extends Memcached_DataObject
}
/**
+ * Record this notice to the given group inboxes for delivery.
+ * Overrides the regular parsing of !group markup.
+ *
+ * @param string $group_ids
+ * @fixme might prefer URIs as identifiers, as for replies?
+ * best with generalizations on user_group to support
+ * remote groups better.
+ */
+ function saveKnownGroups($group_ids)
+ {
+ if (!is_array($group_ids)) {
+ throw new ServerException("Bad type provided to saveKnownGroups");
+ }
+
+ $groups = array();
+ foreach ($group_ids as $id) {
+ $group = User_group::staticGet('id', $id);
+ if ($group) {
+ common_log(LOG_ERR, "Local delivery to group id $id, $group->nickname");
+ $result = $this->addToGroupInbox($group);
+ if (!$result) {
+ common_log_db_error($gi, 'INSERT', __FILE__);
+ }
+
+ // @fixme should we save the tags here or not?
+ $groups[] = clone($group);
+ } else {
+ common_log(LOG_ERR, "Local delivery to group id $id skipped, doesn't exist");
+ }
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Parse !group delivery and record targets into group_inbox.
* @return array of Group objects
*/
function saveGroups()
@@ -740,7 +877,7 @@ class Notice extends Memcached_DataObject
foreach (array_unique($match[1]) as $nickname) {
/* XXX: remote groups. */
- $group = User_group::getForNickname($nickname);
+ $group = User_group::getForNickname($nickname, $profile);
if (empty($group)) {
continue;
@@ -797,8 +934,51 @@ class Notice extends Memcached_DataObject
}
/**
+ * Save reply records indicating that this notice needs to be
+ * delivered to the local users with the given URIs.
+ *
+ * Since this is expected to be used when saving foreign-sourced
+ * messages, we won't deliver to any remote targets as that's the
+ * source service's responsibility.
+ *
+ * @fixme Unlike saveReplies() there's no mail notification here.
+ * Move that to distrib queue handler?
+ *
+ * @param array of unique identifier URIs for recipients
+ */
+ function saveKnownReplies($uris)
+ {
+ foreach ($uris as $uri) {
+
+ $user = User::staticGet('uri', $uri);
+
+ if (!empty($user)) {
+
+ $reply = new Reply();
+
+ $reply->notice_id = $this->id;
+ $reply->profile_id = $user->id;
+
+ $id = $reply->insert();
+
+ self::blow('reply:stream:%d', $user->id);
+ }
+ }
+
+ return;
+ }
+
+ /**
+ * Pull @-replies from this message's content in StatusNet markup format
+ * and save reply records indicating that this message needs to be
+ * delivered to those users.
+ *
+ * Side effect: local recipients get e-mail notifications here.
+ * @fixme move mail notifications to distrib?
+ *
* @return array of integer profile IDs
*/
+
function saveReplies()
{
// Don't save reply data for repeats
@@ -807,76 +987,47 @@ class Notice extends Memcached_DataObject
return array();
}
- // Alternative reply format
- $tname = false;
- if (preg_match('/^T ([A-Z0-9]{1,64}) /', $this->content, $match)) {
- $tname = $match[1];
- }
- // extract all @messages
- $cnt = preg_match_all('/(?:^|\s)@([a-z0-9]{1,64})/', $this->content, $match);
-
- $names = array();
+ $sender = Profile::staticGet($this->profile_id);
- if ($cnt || $tname) {
- // XXX: is there another way to make an array copy?
- $names = ($tname) ? array_unique(array_merge(array(strtolower($tname)), $match[1])) : array_unique($match[1]);
- }
+ // @todo ideally this parser information would only
+ // be calculated once.
- $sender = Profile::staticGet($this->profile_id);
+ $mentions = common_find_mentions($this->content, $this);
$replied = array();
// store replied only for first @ (what user/notice what the reply directed,
// we assume first @ is it)
- for ($i=0; $i<count($names); $i++) {
- $nickname = $names[$i];
- $recipient = common_relative_profile($sender, $nickname, $this->created);
- if (empty($recipient)) {
- continue;
- }
- // Don't save replies from blocked profile to local user
- $recipient_user = User::staticGet('id', $recipient->id);
- if (!empty($recipient_user) && $recipient_user->hasBlocked($sender)) {
- continue;
- }
- $reply = new Reply();
- $reply->notice_id = $this->id;
- $reply->profile_id = $recipient->id;
- $id = $reply->insert();
- if (!$id) {
- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
- common_log(LOG_ERR, 'DB error inserting reply: ' . $last_error->message);
- common_server_error(sprintf(_('DB error inserting reply: %s'), $last_error->message));
- return array();
- } else {
- $replied[$recipient->id] = 1;
- }
- }
+ foreach ($mentions as $mention) {
- // Hash format replies, too
- $cnt = preg_match_all('/(?:^|\s)@#([a-z0-9]{1,64})/', $this->content, $match);
- if ($cnt) {
- foreach ($match[1] as $tag) {
- $tagged = Profile_tag::getTagged($sender->id, $tag);
- foreach ($tagged as $t) {
- if (!$replied[$t->id]) {
- // Don't save replies from blocked profile to local user
- $t_user = User::staticGet('id', $t->id);
- if ($t_user && $t_user->hasBlocked($sender)) {
- continue;
- }
- $reply = new Reply();
- $reply->notice_id = $this->id;
- $reply->profile_id = $t->id;
- $id = $reply->insert();
- if (!$id) {
- common_log_db_error($reply, 'INSERT', __FILE__);
- return array();
- } else {
- $replied[$recipient->id] = 1;
- }
- }
+ foreach ($mention['mentioned'] as $mentioned) {
+
+ // skip if they're already covered
+
+ if (!empty($replied[$mentioned->id])) {
+ continue;
+ }
+
+ // Don't save replies from blocked profile to local user
+
+ $mentioned_user = User::staticGet('id', $mentioned->id);
+ if (!empty($mentioned_user) && $mentioned_user->hasBlocked($sender)) {
+ continue;
+ }
+
+ $reply = new Reply();
+
+ $reply->notice_id = $this->id;
+ $reply->profile_id = $mentioned->id;
+
+ $id = $reply->insert();
+
+ if (!$id) {
+ common_log_db_error($reply, 'INSERT', __FILE__);
+ throw new ServerException("Couldn't save reply for {$this->id}, {$mentioned->id}");
+ } else {
+ $replied[$mentioned->id] = 1;
}
}
}
@@ -917,9 +1068,10 @@ class Notice extends Memcached_DataObject
}
/**
- * Same calculation as saveGroups but without the saving
- * @fixme merge the functions
- * @return array of Group_inbox objects
+ * Pull list of groups this notice needs to be delivered to,
+ * as previously recorded by saveGroups() or saveKnownGroups().
+ *
+ * @return array of Group objects
*/
function getGroups()
{
@@ -942,7 +1094,10 @@ class Notice extends Memcached_DataObject
if ($gi->find()) {
while ($gi->fetch()) {
- $groups[] = clone($gi);
+ $group = User_group::staticGet('id', $gi->group_id);
+ if ($group) {
+ $groups[] = $group;
+ }
}
}
@@ -951,7 +1106,7 @@ class Notice extends Memcached_DataObject
return $groups;
}
- function asAtomEntry($namespace=false, $source=false)
+ function asAtomEntry($namespace=false, $source=false, $author=true)
{
$profile = $this->getProfile();
@@ -962,6 +1117,8 @@ class Notice extends Memcached_DataObject
'xmlns:thr' => 'http://purl.org/syndication/thread/1.0',
'xmlns:georss' => 'http://www.georss.org/georss',
'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
+ 'xmlns:media' => 'http://purl.org/syndication/atommedia',
+ 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
'xmlns:ostatus' => 'http://ostatus.org/schema/1.0');
} else {
$attrs = array();
@@ -993,12 +1150,14 @@ class Notice extends Memcached_DataObject
}
$xs->element('title', null, $this->content);
- $xs->element('summary', null, $this->content);
- $xs->raw($profile->asAtomAuthor());
- $xs->raw($profile->asActivityActor());
+ if ($author) {
+ $xs->raw($profile->asAtomAuthor());
+ $xs->raw($profile->asActivityActor());
+ }
$xs->element('link', array('rel' => 'alternate',
+ 'type' => 'text/html',
'href' => $this->bestUrl()));
$xs->element('id', null, $this->uri);
@@ -1045,6 +1204,17 @@ class Notice extends Memcached_DataObject
}
}
+ $groups = $this->getGroups();
+
+ foreach ($groups as $group) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'ostatus:attention',
+ 'href' => $group->permalink()
+ )
+ );
+ }
+
if (!empty($this->repeat_of)) {
$repeat = Notice::staticGet('id', $this->repeat_of);
if (!empty($repeat)) {
@@ -1090,6 +1260,21 @@ class Notice extends Memcached_DataObject
return $xs->getString();
}
+ /**
+ * Returns an XML string fragment with a reference to a notice as an
+ * Activity Streams noun object with the given element type.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @param string $element one of 'subject', 'object', 'target'
+ * @return string
+ */
+ function asActivityNoun($element)
+ {
+ $noun = ActivityObject::fromNotice($this);
+ return $noun->asString('activity:' . $element);
+ }
+
function bestUrl()
{
if (!empty($this->url)) {
@@ -1102,16 +1287,16 @@ class Notice extends Memcached_DataObject
}
}
- function stream($fn, $args, $cachekey, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
+ function stream($fn, $args, $cachekey, $offset=0, $limit=20, $since_id=0, $max_id=0)
{
$cache = common_memcache();
if (empty($cache) ||
- $since_id != 0 || $max_id != 0 || (!is_null($since) && $since > 0) ||
+ $since_id != 0 || $max_id != 0 ||
is_null($limit) ||
($offset + $limit) > NOTICE_CACHE_WINDOW) {
return call_user_func_array($fn, array_merge($args, array($offset, $limit, $since_id,
- $max_id, $since)));
+ $max_id)));
}
$idkey = common_cache_key($cachekey);
@@ -1487,6 +1672,14 @@ class Notice extends Memcached_DataObject
function distribute()
{
+ // We always insert for the author so they don't
+ // have to wait
+
+ $user = User::staticGet('id', $this->profile_id);
+ if (!empty($user)) {
+ Inbox::insertNotice($user->id, $this->id);
+ }
+
if (common_config('queue', 'inboxes')) {
// If there's a failure, we want to _force_
// distribution at this point.
diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php
index c27dcdfd6..47ed6b22d 100644
--- a/classes/Notice_inbox.php
+++ b/classes/Notice_inbox.php
@@ -49,12 +49,12 @@ class Notice_inbox extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- function stream($user_id, $offset, $limit, $since_id, $max_id, $since, $own=false)
+ function stream($user_id, $offset, $limit, $since_id, $max_id, $own=false)
{
throw new Exception('Notice_inbox no longer used; use Inbox');
}
- function _streamDirect($user_id, $own, $offset, $limit, $since_id, $max_id, $since)
+ function _streamDirect($user_id, $own, $offset, $limit, $since_id, $max_id)
{
throw new Exception('Notice_inbox no longer used; use Inbox');
}
diff --git a/classes/Notice_tag.php b/classes/Notice_tag.php
index 4fd76e8ea..a5d0716a7 100644
--- a/classes/Notice_tag.php
+++ b/classes/Notice_tag.php
@@ -46,7 +46,7 @@ class Notice_tag extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function _streamDirect($tag, $offset, $limit, $since_id, $max_id, $since)
+ function _streamDirect($tag, $offset, $limit, $since_id, $max_id)
{
$nt = new Notice_tag();
@@ -63,10 +63,6 @@ class Notice_tag extends Memcached_DataObject
$nt->whereAdd('notice_id < ' . $max_id);
}
- if (!is_null($since)) {
- $nt->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$nt->orderBy('notice_id DESC');
if (!is_null($offset)) {
diff --git a/classes/Profile.php b/classes/Profile.php
index 494c697e4..0322c9358 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -163,27 +163,27 @@ class Profile extends Memcached_DataObject
return null;
}
- function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
+ function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
{
$ids = Notice::stream(array($this, '_streamTaggedDirect'),
array($tag),
'profile:notice_ids_tagged:' . $this->id . ':' . $tag,
- $offset, $limit, $since_id, $max_id, $since);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
+ function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
{
// XXX: I'm not sure this is going to be any faster. It probably isn't.
$ids = Notice::stream(array($this, '_streamDirect'),
array(),
'profile:notice_ids:' . $this->id,
- $offset, $limit, $since_id, $max_id, $since);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- function _streamTaggedDirect($tag, $offset, $limit, $since_id, $max_id, $since)
+ function _streamTaggedDirect($tag, $offset, $limit, $since_id, $max_id)
{
// XXX It would be nice to do this without a join
@@ -202,10 +202,6 @@ class Profile extends Memcached_DataObject
$query .= " and id < $max_id";
}
- if (!is_null($since)) {
- $query .= " and created > '" . date('Y-m-d H:i:s', $since) . "'";
- }
-
$query .= ' order by id DESC';
if (!is_null($offset)) {
@@ -223,7 +219,7 @@ class Profile extends Memcached_DataObject
return $ids;
}
- function _streamDirect($offset, $limit, $since_id, $max_id, $since = null)
+ function _streamDirect($offset, $limit, $since_id, $max_id)
{
$notice = new Notice();
@@ -240,10 +236,6 @@ class Profile extends Memcached_DataObject
$notice->whereAdd('id <= ' . $max_id);
}
- if (!is_null($since)) {
- $notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$notice->orderBy('id DESC');
if (!is_null($offset)) {
@@ -290,6 +282,32 @@ class Profile extends Memcached_DataObject
}
}
+ function getGroups($offset=0, $limit=null)
+ {
+ $qry =
+ 'SELECT user_group.* ' .
+ 'FROM user_group JOIN group_member '.
+ 'ON user_group.id = group_member.group_id ' .
+ 'WHERE group_member.profile_id = %d ' .
+ 'ORDER BY group_member.created DESC ';
+
+ if ($offset>0 && !is_null($limit)) {
+ if ($offset) {
+ if (common_config('db','type') == 'pgsql') {
+ $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+ } else {
+ $qry .= ' LIMIT ' . $offset . ', ' . $limit;
+ }
+ }
+ }
+
+ $groups = new User_group();
+
+ $cnt = $groups->query(sprintf($qry, $this->id));
+
+ return $groups;
+ }
+
function avatarUrl($size=AVATAR_PROFILE_SIZE)
{
$avatar = $this->getAvatar($size);
@@ -725,6 +743,10 @@ class Profile extends Memcached_DataObject
case Right::CONFIGURESITE:
$result = $this->hasRole(Profile_role::ADMINISTRATOR);
break;
+ case Right::GRANTROLE:
+ case Right::REVOKEROLE:
+ $result = $this->hasRole(Profile_role::OWNER);
+ break;
case Right::NEWNOTICE:
case Right::NEWMESSAGE:
case Right::SUBSCRIBE:
@@ -792,44 +814,17 @@ class Profile extends Memcached_DataObject
* Returns an XML string fragment with profile information as an
* Activity Streams noun object with the given element type.
*
- * Assumes that 'activity' namespace has been previously defined.
+ * Assumes that 'activity', 'georss', and 'poco' namespace has been
+ * previously defined.
*
* @param string $element one of 'actor', 'subject', 'object', 'target'
+ *
* @return string
*/
function asActivityNoun($element)
{
- $xs = new XMLStringer(true);
-
- $xs->elementStart('activity:' . $element);
- $xs->element(
- 'activity:object-type',
- null,
- 'http://activitystrea.ms/schema/1.0/person'
- );
- $xs->element(
- 'id',
- null,
- $this->getUri()
- );
- $xs->element('title', null, $this->getBestName());
-
- $avatar = $this->getAvatar(AVATAR_PROFILE_SIZE);
-
- $xs->element(
- 'link', array(
- 'type' => empty($avatar) ? 'image/png' : $avatar->mediatype,
- 'rel' => 'avatar',
- 'href' => empty($avatar)
- ? Avatar::defaultImage(AVATAR_PROFILE_SIZE)
- : $avatar->displayUrl()
- ),
- ''
- );
-
- $xs->elementEnd('activity:' . $element);
-
- return $xs->getString();
+ $noun = ActivityObject::fromProfile($this);
+ return $noun->asString('activity:' . $element);
}
/**
@@ -841,31 +836,37 @@ class Profile extends Memcached_DataObject
{
$uri = null;
- // check for a local user first
- $user = User::staticGet('id', $this->id);
+ // give plugins a chance to set the URI
+ if (Event::handle('StartGetProfileUri', array($this, &$uri))) {
- if (!empty($user)) {
- $uri = common_local_url(
- 'userbyid',
- array('id' => $user->id)
- );
- } else {
-
- // give plugins a chance to set the URI
- if (Event::handle('StartGetProfileUri', array($this, &$uri))) {
+ // check for a local user first
+ $user = User::staticGet('id', $this->id);
+ if (!empty($user)) {
+ $uri = $user->uri;
+ } else {
// return OMB profile if any
$remote = Remote_profile::staticGet('id', $this->id);
-
if (!empty($remote)) {
$uri = $remote->uri;
}
-
- Event::handle('EndGetProfileUri', array($this, &$uri));
}
+ Event::handle('EndGetProfileUri', array($this, &$uri));
}
return $uri;
}
+ function hasBlocked($other)
+ {
+ $block = Profile_block::get($this->id, $other->id);
+
+ if (empty($block)) {
+ $result = false;
+ } else {
+ $result = true;
+ }
+
+ return $result;
+ }
}
diff --git a/classes/Profile_role.php b/classes/Profile_role.php
index bf2c453ed..d0a0b31f0 100644
--- a/classes/Profile_role.php
+++ b/classes/Profile_role.php
@@ -53,4 +53,21 @@ class Profile_role extends Memcached_DataObject
const ADMINISTRATOR = 'administrator';
const SANDBOXED = 'sandboxed';
const SILENCED = 'silenced';
+
+ public static function isValid($role)
+ {
+ // @fixme could probably pull this from class constants
+ $known = array(self::OWNER,
+ self::MODERATOR,
+ self::ADMINISTRATOR,
+ self::SANDBOXED,
+ self::SILENCED);
+ return in_array($role, $known);
+ }
+
+ public static function isSettable($role)
+ {
+ $allowedRoles = array('administrator', 'moderator');
+ return self::isValid($role) && in_array($role, $allowedRoles);
+ }
}
diff --git a/classes/Reply.php b/classes/Reply.php
index 49b1e05e5..659e04c92 100644
--- a/classes/Reply.php
+++ b/classes/Reply.php
@@ -22,16 +22,16 @@ class Reply extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
+ function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
{
$ids = Notice::stream(array('Reply', '_streamDirect'),
array($user_id),
'reply:stream:' . $user_id,
- $offset, $limit, $since_id, $max_id, $since);
+ $offset, $limit, $since_id, $max_id);
return $ids;
}
- function _streamDirect($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
+ function _streamDirect($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0)
{
$reply = new Reply();
$reply->profile_id = $user_id;
@@ -44,10 +44,6 @@ class Reply extends Memcached_DataObject
$reply->whereAdd('notice_id < ' . $max_id);
}
- if (!is_null($since)) {
- $reply->whereAdd('modified > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$reply->orderBy('notice_id DESC');
if (!is_null($offset)) {
diff --git a/classes/Subscription.php b/classes/Subscription.php
index faf1331cd..9cef2df1a 100644
--- a/classes/Subscription.php
+++ b/classes/Subscription.php
@@ -24,7 +24,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Subscription extends Memcached_DataObject
+class Subscription extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -34,8 +34,8 @@ class Subscription extends Memcached_DataObject
public $subscribed; // int(4) primary_key not_null
public $jabber; // tinyint(1) default_1
public $sms; // tinyint(1) default_1
- public $token; // varchar(255)
- public $secret; // varchar(255)
+ public $token; // varchar(255)
+ public $secret; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@@ -45,9 +45,177 @@ class Subscription extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
-
+
function pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Subscription', $kv);
}
+
+ /**
+ * Make a new subscription
+ *
+ * @param Profile $subscriber party to receive new notices
+ * @param Profile $other party sending notices; publisher
+ *
+ * @return Subscription new subscription
+ */
+
+ static function start($subscriber, $other)
+ {
+ if (!$subscriber->hasRight(Right::SUBSCRIBE)) {
+ throw new Exception(_('You have been banned from subscribing.'));
+ }
+
+ if (self::exists($subscriber, $other)) {
+ throw new Exception(_('Already subscribed!'));
+ }
+
+ if ($other->hasBlocked($subscriber)) {
+ throw new Exception(_('User has blocked you.'));
+ }
+
+ if (Event::handle('StartSubscribe', array($subscriber, $other))) {
+
+ $sub = new Subscription();
+
+ $sub->subscriber = $subscriber->id;
+ $sub->subscribed = $other->id;
+ $sub->created = common_sql_now();
+
+ $result = $sub->insert();
+
+ if (!$result) {
+ common_log_db_error($sub, 'INSERT', __FILE__);
+ throw new Exception(_('Could not save subscription.'));
+ }
+
+ $sub->notify();
+
+ self::blow('user:notices_with_friends:%d', $subscriber->id);
+
+ $subscriber->blowSubscriptionsCount();
+ $other->blowSubscribersCount();
+
+ $otherUser = User::staticGet('id', $other->id);
+
+ if (!empty($otherUser) &&
+ $otherUser->autosubscribe &&
+ !self::exists($other, $subscriber) &&
+ !$subscriber->hasBlocked($other)) {
+
+ $auto = new Subscription();
+
+ $auto->subscriber = $subscriber->id;
+ $auto->subscribed = $other->id;
+ $auto->created = common_sql_now();
+
+ $result = $auto->insert();
+
+ if (!$result) {
+ common_log_db_error($auto, 'INSERT', __FILE__);
+ throw new Exception(_('Could not save subscription.'));
+ }
+
+ $auto->notify();
+ }
+
+ Event::handle('EndSubscribe', array($subscriber, $other));
+ }
+
+ return true;
+ }
+
+ function notify()
+ {
+ # XXX: add other notifications (Jabber, SMS) here
+ # XXX: queue this and handle it offline
+ # XXX: Whatever happens, do it in Twitter-like API, too
+
+ $this->notifyEmail();
+ }
+
+ function notifyEmail()
+ {
+ $subscribedUser = User::staticGet('id', $this->subscribed);
+
+ if (!empty($subscribedUser)) {
+
+ $subscriber = Profile::staticGet('id', $this->subscriber);
+
+ mail_subscribe_notify_profile($subscribedUser, $subscriber);
+ }
+ }
+
+ /**
+ * Cancel a subscription
+ *
+ */
+
+ function cancel($subscriber, $other)
+ {
+ if (!self::exists($subscriber, $other)) {
+ throw new Exception(_('Not subscribed!'));
+ }
+
+ // Don't allow deleting self subs
+
+ if ($subscriber->id == $other->id) {
+ throw new Exception(_('Couldn\'t delete self-subscription.'));
+ }
+
+ if (Event::handle('StartUnsubscribe', array($subscriber, $other))) {
+
+ $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
+ 'subscribed' => $other->id));
+
+ // note we checked for existence above
+
+ assert(!empty($sub));
+
+ // @todo: move this block to EndSubscribe handler for
+ // OMB plugin when it exists.
+
+ if (!empty($sub->token)) {
+
+ $token = new Token();
+
+ $token->tok = $sub->token;
+
+ if ($token->find(true)) {
+
+ $result = $token->delete();
+
+ if (!$result) {
+ common_log_db_error($token, 'DELETE', __FILE__);
+ throw new Exception(_('Couldn\'t delete subscription OMB token.'));
+ }
+ } else {
+ common_log(LOG_ERR, "Couldn't find credentials with token {$token->tok}");
+ }
+ }
+
+ $result = $sub->delete();
+
+ if (!$result) {
+ common_log_db_error($sub, 'DELETE', __FILE__);
+ throw new Exception(_('Couldn\'t delete subscription.'));
+ }
+
+ self::blow('user:notices_with_friends:%d', $subscriber->id);
+
+ $subscriber->blowSubscriptionsCount();
+ $other->blowSubscribersCount();
+
+ Event::handle('EndUnsubscribe', array($subscriber, $other));
+ }
+
+ return;
+ }
+
+ function exists($subscriber, $other)
+ {
+ $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
+ 'subscribed' => $other->id));
+ return (empty($sub)) ? false : true;
+ }
}
diff --git a/classes/User.php b/classes/User.php
index 72c3f39e9..fade0f35d 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -80,11 +80,7 @@ class User extends Memcached_DataObject
function isSubscribed($other)
{
- assert(!is_null($other));
- // XXX: cache results of this query
- $sub = Subscription::pkeyGet(array('subscriber' => $this->id,
- 'subscribed' => $other->id));
- return (is_null($sub)) ? false : true;
+ return Subscription::exists($this->getProfile(), $other);
}
// 'update' won't write key columns, so we have to do it ourselves.
@@ -167,17 +163,8 @@ class User extends Memcached_DataObject
function hasBlocked($other)
{
-
- $block = Profile_block::get($this->id, $other->id);
-
- if (is_null($block)) {
- $result = false;
- } else {
- $result = true;
- $block->free();
- }
-
- return $result;
+ $profile = $this->getProfile();
+ return $profile->hasBlocked($other);
}
/**
@@ -219,6 +206,7 @@ class User extends Memcached_DataObject
if(! User::allowed_nickname($nickname)){
common_log(LOG_WARNING, sprintf("Attempted to register a nickname that is not allowed: %s", $profile->nickname),
__FILE__);
+ return false;
}
$profile->profileurl = common_profile_url($nickname);
@@ -469,28 +457,28 @@ class User extends Memcached_DataObject
return $user;
}
- function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- $ids = Reply::stream($this->id, $offset, $limit, $since_id, $before_id, $since);
+ $ids = Reply::stream($this->id, $offset, $limit, $since_id, $before_id);
return Notice::getStreamByIds($ids);
}
- function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null) {
+ function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) {
$profile = $this->getProfile();
if (!$profile) {
return null;
} else {
- return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id, $since);
+ return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id);
}
}
- function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
$profile = $this->getProfile();
if (!$profile) {
return null;
} else {
- return $profile->getNotices($offset, $limit, $since_id, $before_id, $since);
+ return $profile->getNotices($offset, $limit, $since_id, $before_id);
}
}
@@ -500,24 +488,24 @@ class User extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, false);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, false);
}
- function noticeInbox($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function noticeInbox($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, true);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, true);
}
- function friendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function friendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, false);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, false);
}
- function ownFriendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function ownFriendsTimeline($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
- return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, $since, true);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, true);
}
function blowFavesCache()
@@ -625,28 +613,8 @@ class User extends Memcached_DataObject
function getGroups($offset=0, $limit=null)
{
- $qry =
- 'SELECT user_group.* ' .
- 'FROM user_group JOIN group_member '.
- 'ON user_group.id = group_member.group_id ' .
- 'WHERE group_member.profile_id = %d ' .
- 'ORDER BY group_member.created DESC ';
-
- if ($offset>0 && !is_null($limit)) {
- if ($offset) {
- if (common_config('db','type') == 'pgsql') {
- $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
- } else {
- $qry .= ' LIMIT ' . $offset . ', ' . $limit;
- }
- }
- }
-
- $groups = new User_group();
-
- $cnt = $groups->query(sprintf($qry, $this->id));
-
- return $groups;
+ $profile = $this->getProfile();
+ return $profile->getGroups($offset, $limit);
}
function getSubscriptions($offset=0, $limit=null)
@@ -802,7 +770,7 @@ class User extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function _repeatedByMeDirect($offset, $limit, $since_id, $max_id, $since)
+ function _repeatedByMeDirect($offset, $limit, $since_id, $max_id)
{
$notice = new Notice();
@@ -826,10 +794,6 @@ class User extends Memcached_DataObject
$notice->whereAdd('id <= ' . $max_id);
}
- if (!is_null($since)) {
- $notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$ids = array();
if ($notice->find()) {
@@ -849,12 +813,12 @@ class User extends Memcached_DataObject
$ids = Notice::stream(array($this, '_repeatsOfMeDirect'),
array(),
'user:repeats_of_me:'.$this->id,
- $offset, $limit, $since_id, $max_id, null);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- function _repeatsOfMeDirect($offset, $limit, $since_id, $max_id, $since)
+ function _repeatsOfMeDirect($offset, $limit, $since_id, $max_id)
{
$qry =
'SELECT DISTINCT original.id AS id ' .
@@ -869,10 +833,6 @@ class User extends Memcached_DataObject
$qry .= 'AND original.id <= ' . $max_id . ' ';
}
- if (!is_null($since)) {
- $qry .= 'AND original.modified > \'' . date('Y-m-d H:i:s', $since) . '\' ';
- }
-
// NOTE: we sort by fave time, not by notice time!
$qry .= 'ORDER BY original.id DESC ';
diff --git a/classes/User_group.php b/classes/User_group.php
index 379e6b721..7be55163a 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -10,21 +10,23 @@ class User_group extends Memcached_DataObject
public $__table = 'user_group'; // table name
public $id; // int(4) primary_key not_null
- public $nickname; // varchar(64) unique_key
+ public $nickname; // varchar(64)
public $fullname; // varchar(255)
public $homepage; // varchar(255)
- public $description; // text()
+ public $description; // text
public $location; // varchar(255)
public $original_logo; // varchar(255)
public $homepage_logo; // varchar(255)
public $stream_logo; // varchar(255)
public $mini_logo; // varchar(255)
public $design_id; // int(4)
- public $created; // datetime() not_null
- public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
+ public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00
+ public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
+ public $uri; // varchar(255) unique_key
+ public $mainpage; // varchar(255)
/* Static get */
- function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User_group',$k,$v); }
+ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('User_group',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
@@ -39,14 +41,44 @@ class User_group extends Memcached_DataObject
function homeUrl()
{
- return common_local_url('showgroup',
- array('nickname' => $this->nickname));
+ $url = null;
+ if (Event::handle('StartUserGroupHomeUrl', array($this, &$url))) {
+ // normally stored in mainpage, but older ones may be null
+ if (!empty($this->mainpage)) {
+ $url = $this->mainpage;
+ } else {
+ $url = common_local_url('showgroup',
+ array('nickname' => $this->nickname));
+ }
+ }
+ Event::handle('EndUserGroupHomeUrl', array($this, &$url));
+ return $url;
+ }
+
+ function getUri()
+ {
+ $uri = null;
+ if (Event::handle('StartUserGroupGetUri', array($this, &$uri))) {
+ if (!empty($this->uri)) {
+ $uri = $this->uri;
+ } else {
+ $uri = common_local_url('groupbyid',
+ array('id' => $this->id));
+ }
+ }
+ Event::handle('EndUserGroupGetUri', array($this, &$uri));
+ return $uri;
}
function permalink()
{
- return common_local_url('groupbyid',
- array('id' => $this->id));
+ $url = null;
+ if (Event::handle('StartUserGroupPermalink', array($this, &$url))) {
+ $url = common_local_url('groupbyid',
+ array('id' => $this->id));
+ }
+ Event::handle('EndUserGroupPermalink', array($this, &$url));
+ return $url;
}
function getNotices($offset, $limit, $since_id=null, $max_id=null)
@@ -59,7 +91,7 @@ class User_group extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function _streamDirect($offset, $limit, $since_id, $max_id, $since)
+ function _streamDirect($offset, $limit, $since_id, $max_id)
{
$inbox = new Group_inbox();
@@ -76,10 +108,6 @@ class User_group extends Memcached_DataObject
$inbox->whereAdd('notice_id <= ' . $max_id);
}
- if (!is_null($since)) {
- $inbox->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
- }
-
$inbox->orderBy('notice_id DESC');
if (!is_null($offset)) {
@@ -251,12 +279,26 @@ class User_group extends Memcached_DataObject
return true;
}
- static function getForNickname($nickname)
+ static function getForNickname($nickname, $profile=null)
{
$nickname = common_canonical_nickname($nickname);
- $group = User_group::staticGet('nickname', $nickname);
+
+ // Are there any matching remote groups this profile's in?
+ if ($profile) {
+ $group = $profile->getGroups();
+ while ($group->fetch()) {
+ if ($group->nickname == $nickname) {
+ // @fixme is this the best way?
+ return clone($group);
+ }
+ }
+ }
+
+ // If not, check local groups.
+
+ $group = Local_group::staticGet('nickname', $nickname);
if (!empty($group)) {
- return $group;
+ return User_group::staticGet('id', $group->group_id);
}
$alias = Group_alias::staticGet('alias', $nickname);
if (!empty($alias)) {
@@ -367,25 +409,41 @@ class User_group extends Memcached_DataObject
return $xs->getString();
}
+ /**
+ * Returns an XML string fragment with group information as an
+ * Activity Streams <activity:subject> element.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @return string
+ */
function asActivitySubject()
{
- $xs = new XMLStringer(true);
+ return $this->asActivityNoun('subject');
+ }
- $xs->elementStart('activity:subject');
- $xs->element('activity:object', null, 'http://activitystrea.ms/schema/1.0/group');
- $xs->element('id', null, $this->permalink());
- $xs->element('title', null, $this->getBestName());
- $xs->element(
- 'link', array(
- 'rel' => 'avatar',
- 'href' => empty($this->homepage_logo)
- ? User_group::defaultLogo(AVATAR_PROFILE_SIZE)
- : $this->homepage_logo
- )
- );
- $xs->elementEnd('activity:subject');
+ /**
+ * Returns an XML string fragment with group information as an
+ * Activity Streams noun object with the given element type.
+ *
+ * Assumes that 'activity', 'georss', and 'poco' namespace has been
+ * previously defined.
+ *
+ * @param string $element one of 'actor', 'subject', 'object', 'target'
+ *
+ * @return string
+ */
+ function asActivityNoun($element)
+ {
+ $noun = ActivityObject::fromGroup($this);
+ return $noun->asString('activity:' . $element);
+ }
- return $xs->getString();
+ function getAvatar()
+ {
+ return empty($this->homepage_logo)
+ ? User_group::defaultLogo(AVATAR_PROFILE_SIZE)
+ : $this->homepage_logo;
}
static function register($fields) {
@@ -397,34 +455,42 @@ class User_group extends Memcached_DataObject
$group = new User_group();
$group->query('BEGIN');
+
+ if (empty($uri)) {
+ // fill in later...
+ $uri = null;
+ }
$group->nickname = $nickname;
$group->fullname = $fullname;
$group->homepage = $homepage;
$group->description = $description;
$group->location = $location;
+ $group->uri = $uri;
+ $group->mainpage = $mainpage;
$group->created = common_sql_now();
$result = $group->insert();
if (!$result) {
common_log_db_error($group, 'INSERT', __FILE__);
- $this->serverError(
- _('Could not create group.'),
- 500,
- $this->format
- );
- return;
+ throw new ServerException(_('Could not create group.'));
+ }
+
+ if (!isset($uri) || empty($uri)) {
+ $orig = clone($group);
+ $group->uri = common_local_url('groupbyid', array('id' => $group->id));
+ $result = $group->update($orig);
+ if (!$result) {
+ common_log_db_error($group, 'UPDATE', __FILE__);
+ throw new ServerException(_('Could not set group URI.'));
+ }
}
+
$result = $group->setAliases($aliases);
if (!$result) {
- $this->serverError(
- _('Could not create aliases.'),
- 500,
- $this->format
- );
- return;
+ throw new ServerException(_('Could not create aliases.'));
}
$member = new Group_member();
@@ -438,12 +504,22 @@ class User_group extends Memcached_DataObject
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
- $this->serverError(
- _('Could not set group membership.'),
- 500,
- $this->format
- );
- return;
+ throw new ServerException(_('Could not set group membership.'));
+ }
+
+ if ($local) {
+ $local_group = new Local_group();
+
+ $local_group->group_id = $group->id;
+ $local_group->nickname = $nickname;
+ $local_group->created = common_sql_now();
+
+ $result = $local_group->insert();
+
+ if (!$result) {
+ common_log_db_error($local_group, 'INSERT', __FILE__);
+ throw new ServerException(_('Could not save local group info.'));
+ }
}
$group->query('COMMIT');
diff --git a/classes/statusnet.ini b/classes/statusnet.ini
index 81c1b68b2..3fb8ee208 100644
--- a/classes/statusnet.ini
+++ b/classes/statusnet.ini
@@ -245,13 +245,6 @@ modified = 384
group_id = K
profile_id = K
-[invitation]
-code = 130
-user_id = 129
-address = 130
-address_type = 130
-created = 142
-
[inbox]
user_id = 129
notice_ids = 66
@@ -259,9 +252,26 @@ notice_ids = 66
[inbox__keys]
user_id = K
+[invitation]
+code = 130
+user_id = 129
+address = 130
+address_type = 130
+created = 142
+
[invitation__keys]
code = K
+[local_group]
+group_id = 129
+nickname = 2
+created = 142
+modified = 384
+
+[local_group__keys]
+group_id = K
+nickname = U
+
[location_namespace]
id = 129
description = 2
@@ -369,7 +379,7 @@ icon = 130
source_url = 2
organization = 2
homepage = 2
-callback_url = 130
+callback_url = 2
type = 17
access_type = 17
created = 142
@@ -440,13 +450,13 @@ tag = K
[queue_item]
id = 129
-frame = 66
+frame = 194
transport = 130
created = 142
claimed = 14
[queue_item__keys]
-id = K
+id = N
[related_group]
group_id = 129
@@ -593,10 +603,11 @@ mini_logo = 2
design_id = 1
created = 142
modified = 384
+uri = 2
+mainpage = 2
[user_group__keys]
id = N
-nickname = U
[user_openid]
canonical = 130
@@ -627,4 +638,3 @@ modified = 384
[user_location_prefs__keys]
user_id = K
-
diff --git a/config.php.sample b/config.php.sample
index b8852dc67..5c5fb5b53 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -275,6 +275,8 @@ $config['sphinx']['port'] = 3312;
// Support for file uploads (attachments),
// select supported mimetypes and quotas (in bytes)
// $config['attachments']['supported'] = array('image/png', 'application/ogg');
+// $config['attachments']['supported'] = true; //allow all file types to be uploaded
+
// $config['attachments']['file_quota'] = 5000000;
// $config['attachments']['user_quota'] = 50000000;
// $config['attachments']['monthly_quota'] = 15000000;
diff --git a/db/08to09.sql b/db/08to09.sql
index d5f30a26b..ba6f38200 100644
--- a/db/08to09.sql
+++ b/db/08to09.sql
@@ -111,7 +111,11 @@ alter table queue_item rename to queue_item_old;
alter table queue_item_new rename to queue_item;
alter table consumer
- add column consumer_secret varchar(255) not null comment 'secret value';
+ add consumer_secret varchar(255) not null comment 'secret value';
+
+alter table token
+ add verifier varchar(255) comment 'verifier string for OAuth 1.0a',
+ add verified_callback varchar(255) comment 'verified callback URL for OAuth 1.0a';
create table oauth_application (
id integer auto_increment primary key comment 'unique identifier',
@@ -140,4 +144,47 @@ create table oauth_application_user (
constraint primary key (profile_id, application_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+create table inbox (
+
+ user_id integer not null comment 'user receiving the notice' references user (id),
+ notice_ids blob comment 'packed list of notice ids',
+
+ constraint primary key (user_id)
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table conversation (
+ id integer auto_increment primary key comment 'unique identifier',
+ uri varchar(225) unique comment 'URI of the conversation',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified'
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+-- stub entry to push the autoincrement past existing notice ids
+insert into conversation (id,created)
+ select max(id)+1, now() from notice;
+
+alter table user_group
+ add uri varchar(255) unique key comment 'universal identifier',
+ add mainpage varchar(255) comment 'page for group info to link to',
+ drop index nickname;
+
+create table local_group (
+
+ group_id integer primary key comment 'group represented' references user_group (id),
+ nickname varchar(64) unique key comment 'group represented',
+
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified'
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+insert into local_group (group_id, nickname, created)
+ select id, nickname, created from user_group;
+
+alter table file_to_post
+ add index post_id_idx (post_id);
+
+alter table group_inbox
+ add index group_inbox_notice_id_idx (notice_id);
diff --git a/db/beta5tobeta6.sql b/db/beta5tobeta6.sql
new file mode 100644
index 000000000..e9dff17ef
--- /dev/null
+++ b/db/beta5tobeta6.sql
@@ -0,0 +1,28 @@
+alter table oauth_application
+ modify column name varchar(255) not null unique key comment 'name of the application',
+ modify column access_type tinyint default 0 comment 'access type, bit 1 = read, bit 2 = write';
+
+alter table user_group
+add column uri varchar(255) unique key comment 'universal identifier',
+add column mainpage varchar(255) comment 'page for group info to link to',
+drop index nickname;
+
+create table conversation (
+ id integer auto_increment primary key comment 'unique identifier',
+ uri varchar(225) unique comment 'URI of the conversation',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified'
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table local_group (
+ group_id integer primary key comment 'group represented' references user_group (id),
+ nickname varchar(64) unique key comment 'group represented',
+
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified'
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+insert into local_group (group_id, nickname, created)
+select id, nickname, created from user_group;
+
diff --git a/db/statusnet.sql b/db/statusnet.sql
index 97117c80a..3f95948e1 100644
--- a/db/statusnet.sql
+++ b/db/statusnet.sql
@@ -406,7 +406,7 @@ create table profile_block (
create table user_group (
id integer auto_increment primary key comment 'unique identifier',
- nickname varchar(64) unique key comment 'nickname for addressing',
+ nickname varchar(64) comment 'nickname for addressing',
fullname varchar(255) comment 'display name',
homepage varchar(255) comment 'URL, cached so we dont regenerate',
description text comment 'group description',
@@ -421,6 +421,9 @@ create table user_group (
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified',
+ uri varchar(255) unique key comment 'universal identifier',
+ mainpage varchar(255) comment 'page for group info to link to',
+
index user_group_nickname_idx (nickname)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
@@ -455,7 +458,8 @@ create table group_inbox (
created datetime not null comment 'date the notice was created',
constraint primary key (group_id, notice_id),
- index group_inbox_created_idx (created)
+ index group_inbox_created_idx (created),
+ index group_inbox_notice_id_idx (notice_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
@@ -520,7 +524,8 @@ create table file_to_post (
post_id integer comment 'id of the notice it belongs to' references notice (id),
modified timestamp comment 'date this record was modified',
- constraint primary key (file_id, post_id)
+ constraint primary key (file_id, post_id),
+ index post_id_idx (post_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
@@ -641,3 +646,13 @@ create table conversation (
modified timestamp comment 'date this record was modified'
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+create table local_group (
+
+ group_id integer primary key comment 'group represented' references user_group (id),
+ nickname varchar(64) unique key comment 'group represented',
+
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified'
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
diff --git a/index.php b/index.php
index 06ff9900f..65f251bcc 100644
--- a/index.php
+++ b/index.php
@@ -37,8 +37,6 @@ define('INSTALLDIR', dirname(__FILE__));
define('STATUSNET', true);
define('LACONICA', true); // compatibility
-require_once INSTALLDIR . '/lib/common.php';
-
$user = null;
$action = null;
@@ -68,52 +66,69 @@ function getPath($req)
*/
function handleError($error)
{
- if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
- return;
- }
+ try {
- $logmsg = "PEAR error: " . $error->getMessage();
- if (common_config('site', 'logdebug')) {
- $logmsg .= " : ". $error->getDebugInfo();
- }
- // DB queries often end up with a lot of newlines; merge to a single line
- // for easier grepability...
- $logmsg = str_replace("\n", " ", $logmsg);
- common_log(LOG_ERR, $logmsg);
-
- // @fixme backtrace output should be consistent with exception handling
- if (common_config('site', 'logdebug')) {
- $bt = $error->getBacktrace();
- foreach ($bt as $n => $line) {
- common_log(LOG_ERR, formatBacktraceLine($n, $line));
+ if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
+ return;
}
- }
- if ($error instanceof DB_DataObject_Error
- || $error instanceof DB_Error
- ) {
- $msg = sprintf(
- _(
- 'The database for %s isn\'t responding correctly, '.
- 'so the site won\'t work properly. '.
- 'The site admins probably know about the problem, '.
- 'but you can contact them at %s to make sure. '.
- 'Otherwise, wait a few minutes and try again.'
- ),
- common_config('site', 'name'),
- common_config('site', 'email')
- );
- } else {
- $msg = _(
- 'An important error occured, probably related to email setup. '.
- 'Check logfiles for more info..'
- );
- }
- $dac = new DBErrorAction($msg, 500);
- $dac->showPage();
+ $logmsg = "PEAR error: " . $error->getMessage();
+ if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) {
+ $logmsg .= " : ". $error->toText();
+ }
+ // DB queries often end up with a lot of newlines; merge to a single line
+ // for easier grepability...
+ $logmsg = str_replace("\n", " ", $logmsg);
+ common_log(LOG_ERR, $logmsg);
+
+ // @fixme backtrace output should be consistent with exception handling
+ if (common_config('site', 'logdebug')) {
+ $bt = $error->getTrace();
+ foreach ($bt as $n => $line) {
+ common_log(LOG_ERR, formatBacktraceLine($n, $line));
+ }
+ }
+ if ($error instanceof DB_DataObject_Error
+ || $error instanceof DB_Error
+ || ($error instanceof PEAR_Exception && $error->getCode() == -24)
+ ) {
+ //If we run into a DB error, assume we can't connect to the DB at all
+ //so set the current user to null, so we don't try to access the DB
+ //while rendering the error page.
+ global $_cur;
+ $_cur = null;
+
+ $msg = sprintf(
+ _(
+ 'The database for %s isn\'t responding correctly, '.
+ 'so the site won\'t work properly. '.
+ 'The site admins probably know about the problem, '.
+ 'but you can contact them at %s to make sure. '.
+ 'Otherwise, wait a few minutes and try again.'
+ ),
+ common_config('site', 'name'),
+ common_config('site', 'email')
+ );
+ } else {
+ $msg = _(
+ 'An important error occured, probably related to email setup. '.
+ 'Check logfiles for more info..'
+ );
+ }
+
+ $dac = new DBErrorAction($msg, 500);
+ $dac->showPage();
+
+ } catch (Exception $e) {
+ echo _('An error occurred.');
+ }
exit(-1);
}
+set_exception_handler('handleError');
+
+require_once INSTALLDIR . '/lib/common.php';
+
/**
* Format a backtrace line for debug output roughly like debug_print_backtrace() does.
* Exceptions already have this built in, but PEAR error objects just give us the array.
@@ -185,7 +200,7 @@ function checkMirror($action_obj, $args)
function isLoginAction($action)
{
- static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds');
+ static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp');
$login = null;
@@ -238,10 +253,6 @@ function main()
return;
}
- // For database errors
-
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
-
// Make sure RW database is setup
setupRW();
diff --git a/install.php b/install.php
index 435f6d63b..8c9b6138b 100644
--- a/install.php
+++ b/install.php
@@ -31,6 +31,7 @@
* @author Robin Millette <millette@controlyourself.ca>
* @author Sarven Capadisli <csarven@status.net>
* @author Tom Adams <tom@holizz.com>
+ * @author Zach Copley <zach@status.net>
* @license GNU Affero General Public License http://www.gnu.org/licenses/
* @version 0.9.x
* @link http://status.net
@@ -434,72 +435,119 @@ E_O_T;
E_O_T;
}
+/**
+ * Helper class for building form
+ */
+class Posted {
+ function value($name)
+ {
+ if (isset($_POST[$name])) {
+ return htmlspecialchars(strval($_POST[$name]));
+ } else {
+ return '';
+ }
+ }
+}
+
function showForm()
{
global $dbModules;
+ $post = new Posted();
$dbRadios = '';
- $checked = 'checked="checked" '; // Check the first one which exists
+ if (isset($_POST['dbtype'])) {
+ $dbtype = $_POST['dbtype'];
+ } else {
+ $dbtype = null;
+ }
foreach ($dbModules as $type => $info) {
if (checkExtension($info['check_module'])) {
+ if ($dbtype == null || $dbtype == $type) {
+ $checked = 'checked="checked" ';
+ $dbtype = $type; // if we didn't have one checked, hit the first
+ } else {
+ $checked = '';
+ }
$dbRadios .= "<input type=\"radio\" name=\"dbtype\" id=\"dbtype-$type\" value=\"$type\" $checked/> $info[name]<br />\n";
- $checked = '';
}
}
echo<<<E_O_T
</ul>
</dd>
</dl>
-<dl id="page_notice" class="system_notice">
- <dt>Page notice</dt>
- <dd>
- <div class="instructions">
- <p>Enter your database connection information below to initialize the database.</p>
- </div>
- </dd>
-</dl>
<form method="post" action="install.php" class="form_settings" id="form_install">
<fieldset>
- <legend>Connection settings</legend>
- <ul class="form_data">
- <li>
- <label for="sitename">Site name</label>
- <input type="text" id="sitename" name="sitename" />
- <p class="form_guide">The name of your site</p>
- </li>
- <li>
- <label for="fancy-enable">Fancy URLs</label>
- <input type="radio" name="fancy" id="fancy-enable" value="enable" checked='checked' /> enable<br />
- <input type="radio" name="fancy" id="fancy-disable" value="" /> disable<br />
- <p class="form_guide" id='fancy-form_guide'>Enable fancy (pretty) URLs. Auto-detection failed, it depends on Javascript.</p>
- </li>
- <li>
- <label for="host">Hostname</label>
- <input type="text" id="host" name="host" />
- <p class="form_guide">Database hostname</p>
- </li>
- <li>
-
- <label for="dbtype">Type</label>
- $dbRadios
- <p class="form_guide">Database type</p>
- </li>
-
- <li>
- <label for="database">Name</label>
- <input type="text" id="database" name="database" />
- <p class="form_guide">Database name</p>
- </li>
- <li>
- <label for="username">Username</label>
- <input type="text" id="username" name="username" />
- <p class="form_guide">Database username</p>
- </li>
- <li>
- <label for="password">Password</label>
- <input type="password" id="password" name="password" />
- <p class="form_guide">Database password (optional)</p>
- </li>
- </ul>
+ <fieldset id="settings_site">
+ <legend>Site settings</legend>
+ <ul class="form_data">
+ <li>
+ <label for="sitename">Site name</label>
+ <input type="text" id="sitename" name="sitename" value="{$post->value('sitename')}" />
+ <p class="form_guide">The name of your site</p>
+ </li>
+ <li>
+ <label for="fancy-enable">Fancy URLs</label>
+ <input type="radio" name="fancy" id="fancy-enable" value="enable" checked='checked' /> enable<br />
+ <input type="radio" name="fancy" id="fancy-disable" value="" /> disable<br />
+ <p class="form_guide" id='fancy-form_guide'>Enable fancy (pretty) URLs. Auto-detection failed, it depends on Javascript.</p>
+ </li>
+ </ul>
+ </fieldset>
+
+ <fieldset id="settings_db">
+ <legend>Database settings</legend>
+ <ul class="form_data">
+ <li>
+ <label for="host">Hostname</label>
+ <input type="text" id="host" name="host" value="{$post->value('host')}" />
+ <p class="form_guide">Database hostname</p>
+ </li>
+ <li>
+ <label for="dbtype">Type</label>
+ $dbRadios
+ <p class="form_guide">Database type</p>
+ </li>
+ <li>
+ <label for="database">Name</label>
+ <input type="text" id="database" name="database" value="{$post->value('database')}" />
+ <p class="form_guide">Database name</p>
+ </li>
+ <li>
+ <label for="dbusername">DB username</label>
+ <input type="text" id="dbusername" name="dbusername" value="{$post->value('dbusername')}" />
+ <p class="form_guide">Database username</p>
+ </li>
+ <li>
+ <label for="dbpassword">DB password</label>
+ <input type="password" id="dbpassword" name="dbpassword" value="{$post->value('dbpassword')}" />
+ <p class="form_guide">Database password (optional)</p>
+ </li>
+ </ul>
+ </fieldset>
+
+ <fieldset id="settings_admin">
+ <legend>Administrator settings</legend>
+ <ul class="form_data">
+ <li>
+ <label for="admin_nickname">Administrator nickname</label>
+ <input type="text" id="admin_nickname" name="admin_nickname" value="{$post->value('admin_nickname')}" />
+ <p class="form_guide">Nickname for the initial StatusNet user (administrator)</p>
+ </li>
+ <li>
+ <label for="admin_password">Administrator password</label>
+ <input type="password" id="admin_password" name="admin_password" value="{$post->value('admin_password')}" />
+ <p class="form_guide">Password for the initial StatusNet user (administrator)</p>
+ </li>
+ <li>
+ <label for="admin_password2">Confirm password</label>
+ <input type="password" id="admin_password2" name="admin_password2" value="{$post->value('admin_password2')}" />
+ </li>
+ <li>
+ <label for="admin_email">Administrator e-mail</label>
+ <input id="admin_email" name="admin_email" value="{$post->value('admin_email')}" />
+ <p class="form_guide">Optional email address for the initial StatusNet user (administrator)</p>
+ </li>
+ </ul>
+ </fieldset>
<input type="submit" name="submit" class="submit" value="Submit" />
</fieldset>
</form>
@@ -517,10 +565,16 @@ function handlePost()
$host = $_POST['host'];
$dbtype = $_POST['dbtype'];
$database = $_POST['database'];
- $username = $_POST['username'];
- $password = $_POST['password'];
+ $username = $_POST['dbusername'];
+ $password = $_POST['dbpassword'];
$sitename = $_POST['sitename'];
$fancy = !empty($_POST['fancy']);
+
+ $adminNick = $_POST['admin_nickname'];
+ $adminPass = $_POST['admin_password'];
+ $adminPass2 = $_POST['admin_password2'];
+ $adminEmail = $_POST['admin_email'];
+
$server = $_SERVER['HTTP_HOST'];
$path = substr(dirname($_SERVER['PHP_SELF']), 1);
@@ -552,6 +606,21 @@ STR;
$fail = true;
}
+ if (empty($adminNick)) {
+ updateStatus("No initial StatusNet user nickname specified.", true);
+ $fail = true;
+ }
+
+ if (empty($adminPass)) {
+ updateStatus("No initial StatusNet user password specified.", true);
+ $fail = true;
+ }
+
+ if ($adminPass != $adminPass2) {
+ updateStatus("Administrator passwords do not match. Did you mistype?", true);
+ $fail = true;
+ }
+
if ($fail) {
showForm();
return;
@@ -574,13 +643,29 @@ STR;
return;
}
+ // Okay, cross fingers and try to register an initial user
+ if (registerInitialUser($adminNick, $adminPass, $adminEmail)) {
+ updateStatus(
+ "An initial user with the administrator role has been created."
+ );
+ } else {
+ updateStatus(
+ "Could not create initial StatusNet user (administrator).",
+ true
+ );
+ showForm();
+ return;
+ }
+
/*
TODO https needs to be considered
*/
$link = "http://".$server.'/'.$path;
updateStatus("StatusNet has been installed at $link");
- updateStatus("You can visit your <a href='$link'>new StatusNet site</a>.");
+ updateStatus(
+ "<strong>DONE!</strong> You can visit your <a href='$link'>new StatusNet site</a> (login as '$adminNick'). If this is your first StatusNet install, you may want to poke around our <a href='http://status.net/wiki/Getting_started'>Getting Started guide</a>."
+ );
}
function Pgsql_Db_installer($host, $database, $username, $password)
@@ -756,6 +841,47 @@ function runDbScript($filename, $conn, $type = 'mysqli')
return true;
}
+function registerInitialUser($nickname, $password, $email)
+{
+ define('STATUSNET', true);
+ define('LACONICA', true); // compatibility
+
+ require_once INSTALLDIR . '/lib/common.php';
+
+ $data = array('nickname' => $nickname,
+ 'password' => $password,
+ 'fullname' => $nickname);
+ if ($email) {
+ $data['email'] = $email;
+ }
+ $user = User::register($data);
+
+ if (empty($user)) {
+ return false;
+ }
+
+ // give initial user carte blanche
+
+ $user->grantRole('owner');
+ $user->grantRole('moderator');
+ $user->grantRole('administrator');
+
+ // Attempt to do a remote subscribe to update@status.net
+ // Will fail if instance is on a private network.
+
+ if (class_exists('Ostatus_profile')) {
+ try {
+ $oprofile = Ostatus_profile::ensureProfile('http://update.status.net/');
+ Subscription::start($user->getProfile(), $oprofile->localProfile());
+ updateStatus("Set up subscription to <a href='http://update.status.net/'>update@status.net</a>.");
+ } catch (Exception $e) {
+ updateStatus("Could not set up subscription to <a href='http://update.status.net/'>update@status.net</a>.");
+ }
+ }
+
+ return true;
+}
+
?>
<?php echo"<?"; ?> xml version="1.0" encoding="UTF-8" <?php echo "?>"; ?>
<!DOCTYPE html
@@ -765,10 +891,10 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
<head>
<title>Install StatusNet</title>
<link rel="shortcut icon" href="favicon.ico"/>
- <link rel="stylesheet" type="text/css" href="theme/default/css/display.css?version=0.8" media="screen, projection, tv"/>
- <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/base/css/ie.css?version=0.8" /><![endif]-->
- <!--[if lte IE 6]><link rel="stylesheet" type="text/css" theme/base/css/ie6.css?version=0.8" /><![endif]-->
- <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/default/css/ie.css?version=0.8" /><![endif]-->
+ <link rel="stylesheet" type="text/css" href="theme/default/css/display.css" media="screen, projection, tv"/>
+ <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/base/css/ie.css" /><![endif]-->
+ <!--[if lte IE 6]><link rel="stylesheet" type="text/css" theme/base/css/ie6.css" /><![endif]-->
+ <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/default/css/ie.css" /><![endif]-->
<script src="js/jquery.min.js"></script>
<script src="js/install.js"></script>
</head>
@@ -784,8 +910,10 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
</div>
<div id="core">
<div id="content">
- <h1>Install StatusNet</h1>
+ <div id="content_inner">
+ <h1>Install StatusNet</h1>
<?php main(); ?>
+ </div>
</div>
</div>
</div>
diff --git a/js/jquery.form.js b/js/jquery.form.js
index dde394270..936b847ab 100644
--- a/js/jquery.form.js
+++ b/js/jquery.form.js
@@ -1,660 +1,632 @@
-/*
- * jQuery Form Plugin
- * version: 2.36 (07-NOV-2009)
- * @requires jQuery v1.2.6 or later
- *
- * Examples and documentation at: http://malsup.com/jquery/form/
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-;(function($) {
-
-/*
- Usage Note:
- -----------
- Do not use both ajaxSubmit and ajaxForm on the same form. These
- functions are intended to be exclusive. Use ajaxSubmit if you want
- to bind your own submit handler to the form. For example,
-
- $(document).ready(function() {
- $('#myForm').bind('submit', function() {
- $(this).ajaxSubmit({
- target: '#output'
- });
- return false; // <-- important!
- });
- });
-
- Use ajaxForm when you want the plugin to manage all the event binding
- for you. For example,
-
- $(document).ready(function() {
- $('#myForm').ajaxForm({
- target: '#output'
- });
- });
-
- When using ajaxForm, the ajaxSubmit function will be invoked for you
- at the appropriate time.
-*/
-
-/**
- * ajaxSubmit() provides a mechanism for immediately submitting
- * an HTML form using AJAX.
- */
-$.fn.ajaxSubmit = function(options) {
- // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
- if (!this.length) {
- log('ajaxSubmit: skipping submit process - no element selected');
- return this;
- }
-
- if (typeof options == 'function')
- options = { success: options };
-
- var url = $.trim(this.attr('action'));
- if (url) {
- // clean url (don't include hash vaue)
- url = (url.match(/^([^#]+)/)||[])[1];
- }
- url = url || window.location.href || '';
-
- options = $.extend({
- url: url,
- type: this.attr('method') || 'GET',
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
- }, options || {});
-
- // hook for manipulating the form data before it is extracted;
- // convenient for use with rich editors like tinyMCE or FCKEditor
- var veto = {};
- this.trigger('form-pre-serialize', [this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
- return this;
- }
-
- // provide opportunity to alter form data before it is serialized
- if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSerialize callback');
- return this;
- }
-
- var a = this.formToArray(options.semantic);
- if (options.data) {
- options.extraData = options.data;
- for (var n in options.data) {
- if(options.data[n] instanceof Array) {
- for (var k in options.data[n])
- a.push( { name: n, value: options.data[n][k] } );
- }
- else
- a.push( { name: n, value: options.data[n] } );
- }
- }
-
- // give pre-submit callback an opportunity to abort the submit
- if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSubmit callback');
- return this;
- }
-
- // fire vetoable 'validate' event
- this.trigger('form-submit-validate', [a, this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
- return this;
- }
-
- var q = $.param(a);
-
- if (options.type.toUpperCase() == 'GET') {
- options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
- options.data = null; // data is null for 'get'
- }
- else
- options.data = q; // data is the query string for 'post'
-
- var $form = this, callbacks = [];
- if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
- if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
-
- // perform a load on the target only if dataType is not provided
- if (!options.dataType && options.target) {
- var oldSuccess = options.success || function(){};
- callbacks.push(function(data) {
- $(options.target).html(data).each(oldSuccess, arguments);
- });
- }
- else if (options.success)
- callbacks.push(options.success);
-
- options.success = function(data, status) {
- for (var i=0, max=callbacks.length; i < max; i++)
- callbacks[i].apply(options, [data, status, $form]);
- };
-
- // are there files to upload?
- var files = $('input:file', this).fieldValue();
- var found = false;
- for (var j=0; j < files.length; j++)
- if (files[j])
- found = true;
-
- var multipart = false;
-// var mp = 'multipart/form-data';
-// multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
- // options.iframe allows user to force iframe mode
- // 06-NOV-09: now defaulting to iframe mode if file input is detected
- if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {
- // hack to fix Safari hang (thanks to Tim Molendijk for this)
- // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
- if (options.closeKeepAlive)
- $.get(options.closeKeepAlive, fileUpload);
- else
- fileUpload();
- }
- else
- $.ajax(options);
-
- // fire 'notify' event
- this.trigger('form-submit-notify', [this, options]);
- return this;
-
-
- // private function for handling file uploads (hat tip to YAHOO!)
- function fileUpload() {
- var form = $form[0];
-
- if ($(':input[name=submit]', form).length) {
- alert('Error: Form elements must not be named "submit".');
- return;
- }
-
- var opts = $.extend({}, $.ajaxSettings, options);
- var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
-
- var id = 'jqFormIO' + (new Date().getTime());
- var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />');
- var io = $io[0];
-
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
-
- var xhr = { // mock object
- aborted: 0,
- responseText: null,
- responseXML: null,
- status: 0,
- statusText: 'n/a',
- getAllResponseHeaders: function() {},
- getResponseHeader: function() {},
- setRequestHeader: function() {},
- abort: function() {
- this.aborted = 1;
- $io.attr('src', opts.iframeSrc); // abort op in progress
- }
- };
-
- var g = opts.global;
- // trigger ajax global events so that activity/block indicators work like normal
- if (g && ! $.active++) $.event.trigger("ajaxStart");
- if (g) $.event.trigger("ajaxSend", [xhr, opts]);
-
- if (s.beforeSend && s.beforeSend(xhr, s) === false) {
- s.global && $.active--;
- return;
- }
- if (xhr.aborted)
- return;
-
- var cbInvoked = 0;
- var timedOut = 0;
-
- // add submitting element to data if we know it
- var sub = form.clk;
- if (sub) {
- var n = sub.name;
- if (n && !sub.disabled) {
- options.extraData = options.extraData || {};
- options.extraData[n] = sub.value;
- if (sub.type == "image") {
- options.extraData[name+'.x'] = form.clk_x;
- options.extraData[name+'.y'] = form.clk_y;
- }
- }
- }
-
- // take a breath so that pending repaints get some cpu time before the upload starts
- setTimeout(function() {
- // make sure form attrs are set
- var t = $form.attr('target'), a = $form.attr('action');
-
- // update form attrs in IE friendly way
- form.setAttribute('target',id);
- if (form.getAttribute('method') != 'POST')
- form.setAttribute('method', 'POST');
- if (form.getAttribute('action') != opts.url)
- form.setAttribute('action', opts.url);
-
- // ie borks in some cases when setting encoding
- if (! options.skipEncodingOverride) {
- $form.attr({
- encoding: 'multipart/form-data',
- enctype: 'multipart/form-data'
- });
- }
-
- // support timout
- if (opts.timeout)
- setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
-
- // add "extra" data to form if provided in options
- var extraInputs = [];
- try {
- if (options.extraData)
- for (var n in options.extraData)
- extraInputs.push(
- $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
- .appendTo(form)[0]);
-
- // add iframe to doc and submit the form
- $io.appendTo('body');
- io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
- form.submit();
- }
- finally {
- // reset attrs and remove "extra" input elements
- form.setAttribute('action',a);
- t ? form.setAttribute('target', t) : $form.removeAttr('target');
- $(extraInputs).remove();
- }
- }, 10);
-
- var domCheckCount = 50;
-
- function cb() {
- if (cbInvoked++) return;
-
- io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
-
- var ok = true;
- try {
- if (timedOut) throw 'timeout';
- // extract the server response from the iframe
- var data, doc;
-
- doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
-
- var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
- log('isXml='+isXml);
- if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {
- if (--domCheckCount) {
- // in some browsers (Opera) the iframe DOM is not always traversable when
- // the onload callback fires, so we loop a bit to accommodate
- cbInvoked = 0;
- setTimeout(cb, 100);
- return;
- }
- log('Could not access iframe DOM after 50 tries.');
- return;
- }
-
- xhr.responseText = doc.body ? doc.body.innerHTML : null;
- xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
- xhr.getResponseHeader = function(header){
- var headers = {'content-type': opts.dataType};
- return headers[header];
- };
-
- if (opts.dataType == 'json' || opts.dataType == 'script') {
- // see if user embedded response in textarea
- var ta = doc.getElementsByTagName('textarea')[0];
- if (ta)
- xhr.responseText = ta.value;
- else {
- // account for browsers injecting pre around json response
- var pre = doc.getElementsByTagName('pre')[0];
- if (pre)
- xhr.responseText = pre.innerHTML;
- }
- }
- else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
- xhr.responseXML = toXml(xhr.responseText);
- }
- data = $.httpData(xhr, opts.dataType);
- }
- catch(e){
- ok = false;
- $.handleError(opts, xhr, 'error', e);
- }
-
- // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
- if (ok) {
- opts.success(data, 'success');
- if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
- }
- if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
- if (g && ! --$.active) $.event.trigger("ajaxStop");
- if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
-
- // clean up
- setTimeout(function() {
- $io.remove();
- xhr.responseXML = null;
- }, 100);
- };
-
- function toXml(s, doc) {
- if (window.ActiveXObject) {
- doc = new ActiveXObject('Microsoft.XMLDOM');
- doc.async = 'false';
- doc.loadXML(s);
- }
- else
- doc = (new DOMParser()).parseFromString(s, 'text/xml');
- return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
- };
- };
-};
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for <input type="image" /> elements (if the element
- * is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- * used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.
- */
-$.fn.ajaxForm = function(options) {
- return this.ajaxFormUnbind().bind('submit.form-plugin', function() {
- $(this).ajaxSubmit(options);
- return false;
- }).bind('click.form-plugin', function(e) {
- var target = e.target;
- var $el = $(target);
- if (!($el.is(":submit,input:image"))) {
- // is this a child element of the submit el? (ex: a span within a button)
- var t = $el.closest(':submit');
- if (t.length == 0)
- return;
- target = t[0];
- }
- var form = this;
- form.clk = target;
- if (target.type == 'image') {
- if (e.offsetX != undefined) {
- form.clk_x = e.offsetX;
- form.clk_y = e.offsetY;
- } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
- var offset = $el.offset();
- form.clk_x = e.pageX - offset.left;
- form.clk_y = e.pageY - offset.top;
- } else {
- form.clk_x = e.pageX - target.offsetLeft;
- form.clk_y = e.pageY - target.offsetTop;
- }
- }
- // clear form vars
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
- });
-};
-
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
-$.fn.ajaxFormUnbind = function() {
- return this.unbind('submit.form-plugin click.form-plugin');
-};
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property. An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- */
-$.fn.formToArray = function(semantic) {
- var a = [];
- if (this.length == 0) return a;
-
- var form = this[0];
- var els = semantic ? form.getElementsByTagName('*') : form.elements;
- if (!els) return a;
- for(var i=0, max=els.length; i < max; i++) {
- var el = els[i];
- var n = el.name;
- if (!n) continue;
-
- if (semantic && form.clk && el.type == "image") {
- // handle image inputs on the fly when semantic == true
- if(!el.disabled && form.clk == el) {
- a.push({name: n, value: $(el).val()});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- continue;
- }
-
- var v = $.fieldValue(el, true);
- if (v && v.constructor == Array) {
- for(var j=0, jmax=v.length; j < jmax; j++)
- a.push({name: n, value: v[j]});
- }
- else if (v !== null && typeof v != 'undefined')
- a.push({name: n, value: v});
- }
-
- if (!semantic && form.clk) {
- // input type=='image' are not found in elements array! handle it here
- var $input = $(form.clk), input = $input[0], n = input.name;
- if (n && !input.disabled && input.type == 'image') {
- a.push({name: n, value: $input.val()});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- }
- return a;
-};
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;name2=value2
- */
-$.fn.formSerialize = function(semantic) {
- //hand off to jQuery.param for proper encoding
- return $.param(this.formToArray(semantic));
-};
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;name2=value2
- */
-$.fn.fieldSerialize = function(successful) {
- var a = [];
- this.each(function() {
- var n = this.name;
- if (!n) return;
- var v = $.fieldValue(this, successful);
- if (v && v.constructor == Array) {
- for (var i=0,max=v.length; i < max; i++)
- a.push({name: n, value: v[i]});
- }
- else if (v !== null && typeof v != 'undefined')
- a.push({name: this.name, value: v});
- });
- //hand off to jQuery.param for proper encoding
- return $.param(a);
-};
-
-/**
- * Returns the value(s) of the element in the matched set. For example, consider the following form:
- *
- * <form><fieldset>
- * <input name="A" type="text" />
- * <input name="A" type="text" />
- * <input name="B" type="checkbox" value="B1" />
- * <input name="B" type="checkbox" value="B2"/>
- * <input name="C" type="radio" value="C1" />
- * <input name="C" type="radio" value="C2" />
- * </fieldset></form>
- *
- * var v = $(':text').fieldValue();
- * // if no values are entered into the text inputs
- * v == ['','']
- * // if values entered into the text inputs are 'foo' and 'bar'
- * v == ['foo','bar']
- *
- * var v = $(':checkbox').fieldValue();
- * // if neither checkbox is checked
- * v === undefined
- * // if both checkboxes are checked
- * v == ['B1', 'B2']
- *
- * var v = $(':radio').fieldValue();
- * // if neither radio is checked
- * v === undefined
- * // if first radio is checked
- * v == ['C1']
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true. If this value is false the value(s)
- * for each element is returned.
- *
- * Note: This method *always* returns an array. If no valid value can be determined the
- * array will be empty, otherwise it will contain one or more values.
- */
-$.fn.fieldValue = function(successful) {
- for (var val=[], i=0, max=this.length; i < max; i++) {
- var el = this[i];
- var v = $.fieldValue(el, successful);
- if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
- continue;
- v.constructor == Array ? $.merge(val, v) : val.push(v);
- }
- return val;
-};
-
-/**
- * Returns the value of the field element.
- */
-$.fieldValue = function(el, successful) {
- var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
- if (typeof successful == 'undefined') successful = true;
-
- if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
- (t == 'checkbox' || t == 'radio') && !el.checked ||
- (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
- tag == 'select' && el.selectedIndex == -1))
- return null;
-
- if (tag == 'select') {
- var index = el.selectedIndex;
- if (index < 0) return null;
- var a = [], ops = el.options;
- var one = (t == 'select-one');
- var max = (one ? index+1 : ops.length);
- for(var i=(one ? index : 0); i < max; i++) {
- var op = ops[i];
- if (op.selected) {
- var v = op.value;
- if (!v) // extra pain for IE...
- v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
- if (one) return v;
- a.push(v);
- }
- }
- return a;
- }
- return el.value;
-};
-
-/**
- * Clears the form data. Takes the following actions on the form's input fields:
- * - input text fields will have their 'value' property set to the empty string
- * - select elements will have their 'selectedIndex' property set to -1
- * - checkbox and radio inputs will have their 'checked' property set to false
- * - inputs of type submit, button, reset, and hidden will *not* be effected
- * - button elements will *not* be effected
- */
-$.fn.clearForm = function() {
- return this.each(function() {
- $('input,select,textarea', this).clearFields();
- });
-};
-
-/**
- * Clears the selected form elements.
- */
-$.fn.clearFields = $.fn.clearInputs = function() {
- return this.each(function() {
- var t = this.type, tag = this.tagName.toLowerCase();
- if (t == 'text' || t == 'password' || tag == 'textarea')
- this.value = '';
- else if (t == 'checkbox' || t == 'radio')
- this.checked = false;
- else if (tag == 'select')
- this.selectedIndex = -1;
- });
-};
-
-/**
- * Resets the form data. Causes all form elements to be reset to their original value.
- */
-$.fn.resetForm = function() {
- return this.each(function() {
- // guard against an input with the name of 'reset'
- // note that IE reports the reset function as an 'object'
- if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
- this.reset();
- });
-};
-
-/**
- * Enables or disables any matching elements.
- */
-$.fn.enable = function(b) {
- if (b == undefined) b = true;
- return this.each(function() {
- this.disabled = !b;
- });
-};
-
-/**
- * Checks/unchecks any matching checkboxes or radio buttons and
- * selects/deselects and matching option elements.
- */
-$.fn.selected = function(select) {
- if (select == undefined) select = true;
- return this.each(function() {
- var t = this.type;
- if (t == 'checkbox' || t == 'radio')
- this.checked = select;
- else if (this.tagName.toLowerCase() == 'option') {
- var $sel = $(this).parent('select');
- if (select && $sel[0] && $sel[0].type == 'select-one') {
- // deselect all other options
- $sel.find('option').selected(false);
- }
- this.selected = select;
- }
- });
-};
-
-// helper fn for console logging
-// set $.fn.ajaxSubmit.debug to true to enable debug logging
-function log() {
- if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
- window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
-};
-
-})(jQuery);
+/*
+ * jQuery Form Plugin
+ * version: 2.17 (06-NOV-2008)
+ * @requires jQuery v1.2.2 or later
+ *
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ */
+;(function($) {
+
+/*
+ Usage Note:
+ -----------
+ Do not use both ajaxSubmit and ajaxForm on the same form. These
+ functions are intended to be exclusive. Use ajaxSubmit if you want
+ to bind your own submit handler to the form. For example,
+
+ $(document).ready(function() {
+ $('#myForm').bind('submit', function() {
+ $(this).ajaxSubmit({
+ target: '#output'
+ });
+ return false; // <-- important!
+ });
+ });
+
+ Use ajaxForm when you want the plugin to manage all the event binding
+ for you. For example,
+
+ $(document).ready(function() {
+ $('#myForm').ajaxForm({
+ target: '#output'
+ });
+ });
+
+ When using ajaxForm, the ajaxSubmit function will be invoked for you
+ at the appropriate time.
+*/
+
+/**
+ * ajaxSubmit() provides a mechanism for immediately submitting
+ * an HTML form using AJAX.
+ */
+$.fn.ajaxSubmit = function(options) {
+ // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
+ if (!this.length) {
+ log('ajaxSubmit: skipping submit process - no element selected');
+ return this;
+ }
+
+ if (typeof options == 'function')
+ options = { success: options };
+
+ options = $.extend({
+ url: this.attr('action') || window.location.toString(),
+ type: this.attr('method') || 'GET'
+ }, options || {});
+
+ // hook for manipulating the form data before it is extracted;
+ // convenient for use with rich editors like tinyMCE or FCKEditor
+ var veto = {};
+ this.trigger('form-pre-serialize', [this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+ return this;
+ }
+
+ // provide opportunity to alter form data before it is serialized
+ if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSerialize callback');
+ return this;
+ }
+
+ var a = this.formToArray(options.semantic);
+ if (options.data) {
+ options.extraData = options.data;
+ for (var n in options.data) {
+ if(options.data[n] instanceof Array) {
+ for (var k in options.data[n])
+ a.push( { name: n, value: options.data[n][k] } )
+ }
+ else
+ a.push( { name: n, value: options.data[n] } );
+ }
+ }
+
+ // give pre-submit callback an opportunity to abort the submit
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSubmit callback');
+ return this;
+ }
+
+ // fire vetoable 'validate' event
+ this.trigger('form-submit-validate', [a, this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+ return this;
+ }
+
+ var q = $.param(a);
+
+ if (options.type.toUpperCase() == 'GET') {
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+ options.data = null; // data is null for 'get'
+ }
+ else
+ options.data = q; // data is the query string for 'post'
+
+ var $form = this, callbacks = [];
+ if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
+ if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
+
+ // perform a load on the target only if dataType is not provided
+ if (!options.dataType && options.target) {
+ var oldSuccess = options.success || function(){};
+ callbacks.push(function(data) {
+ $(options.target).html(data).each(oldSuccess, arguments);
+ });
+ }
+ else if (options.success)
+ callbacks.push(options.success);
+
+ options.success = function(data, status) {
+ for (var i=0, max=callbacks.length; i < max; i++)
+ callbacks[i].apply(options, [data, status, $form]);
+ };
+
+ // are there files to upload?
+ var files = $('input:file', this).fieldValue();
+ var found = false;
+ for (var j=0; j < files.length; j++)
+ if (files[j])
+ found = true;
+
+ // options.iframe allows user to force iframe mode
+ if (options.iframe || found) {
+ // hack to fix Safari hang (thanks to Tim Molendijk for this)
+ // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
+ if ($.browser.safari && options.closeKeepAlive)
+ $.get(options.closeKeepAlive, fileUpload);
+ else
+ fileUpload();
+ }
+ else
+ $.ajax(options);
+
+ // fire 'notify' event
+ this.trigger('form-submit-notify', [this, options]);
+ return this;
+
+
+ // private function for handling file uploads (hat tip to YAHOO!)
+ function fileUpload() {
+ var form = $form[0];
+
+ if ($(':input[name=submit]', form).length) {
+ alert('Error: Form elements must not be named "submit".');
+ return;
+ }
+
+ var opts = $.extend({}, $.ajaxSettings, options);
+ var s = jQuery.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
+
+ var id = 'jqFormIO' + (new Date().getTime());
+ var $io = $('<iframe id="' + id + '" name="' + id + '" />');
+ var io = $io[0];
+
+ if ($.browser.msie || $.browser.opera)
+ io.src = 'javascript:false;document.write("");';
+ $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+
+ var xhr = { // mock object
+ aborted: 0,
+ responseText: null,
+ responseXML: null,
+ status: 0,
+ statusText: 'n/a',
+ getAllResponseHeaders: function() {},
+ getResponseHeader: function() {},
+ setRequestHeader: function() {},
+ abort: function() {
+ this.aborted = 1;
+ $io.attr('src','about:blank'); // abort op in progress
+ }
+ };
+
+ var g = opts.global;
+ // trigger ajax global events so that activity/block indicators work like normal
+ if (g && ! $.active++) $.event.trigger("ajaxStart");
+ if (g) $.event.trigger("ajaxSend", [xhr, opts]);
+
+ if (s.beforeSend && s.beforeSend(xhr, s) === false) {
+ s.global && jQuery.active--;
+ return;
+ }
+ if (xhr.aborted)
+ return;
+
+ var cbInvoked = 0;
+ var timedOut = 0;
+
+ // add submitting element to data if we know it
+ var sub = form.clk;
+ if (sub) {
+ var n = sub.name;
+ if (n && !sub.disabled) {
+ options.extraData = options.extraData || {};
+ options.extraData[n] = sub.value;
+ if (sub.type == "image") {
+ options.extraData[name+'.x'] = form.clk_x;
+ options.extraData[name+'.y'] = form.clk_y;
+ }
+ }
+ }
+
+ // take a breath so that pending repaints get some cpu time before the upload starts
+ setTimeout(function() {
+ // make sure form attrs are set
+ var t = $form.attr('target'), a = $form.attr('action');
+ $form.attr({
+ target: id,
+ method: 'POST',
+ action: opts.url
+ });
+
+ // ie borks in some cases when setting encoding
+ if (! options.skipEncodingOverride) {
+ $form.attr({
+ encoding: 'multipart/form-data',
+ enctype: 'multipart/form-data'
+ });
+ }
+
+ // support timout
+ if (opts.timeout)
+ setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
+
+ // add "extra" data to form if provided in options
+ var extraInputs = [];
+ try {
+ if (options.extraData)
+ for (var n in options.extraData)
+ extraInputs.push(
+ $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
+ .appendTo(form)[0]);
+
+ // add iframe to doc and submit the form
+ $io.appendTo('body');
+ io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
+ form.submit();
+ }
+ finally {
+ // reset attrs and remove "extra" input elements
+ $form.attr('action', a);
+ t ? $form.attr('target', t) : $form.removeAttr('target');
+ $(extraInputs).remove();
+ }
+ }, 10);
+
+ function cb() {
+ if (cbInvoked++) return;
+
+ io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
+
+ var operaHack = 0;
+ var ok = true;
+ try {
+ if (timedOut) throw 'timeout';
+ // extract the server response from the iframe
+ var data, doc;
+
+ doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
+
+ if (doc.body == null && !operaHack && $.browser.opera) {
+ // In Opera 9.2.x the iframe DOM is not always traversable when
+ // the onload callback fires so we give Opera 100ms to right itself
+ operaHack = 1;
+ cbInvoked--;
+ setTimeout(cb, 100);
+ return;
+ }
+
+ xhr.responseText = doc.body ? doc.body.innerHTML : null;
+ xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+ xhr.getResponseHeader = function(header){
+ var headers = {'content-type': opts.dataType};
+ return headers[header];
+ };
+
+ if (opts.dataType == 'json' || opts.dataType == 'script') {
+ var ta = doc.getElementsByTagName('textarea')[0];
+ xhr.responseText = ta ? ta.value : xhr.responseText;
+ }
+ else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
+ xhr.responseXML = toXml(xhr.responseText);
+ }
+ data = $.httpData(xhr, opts.dataType);
+ }
+ catch(e){
+ ok = false;
+ $.handleError(opts, xhr, 'error', e);
+ }
+
+ // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+ if (ok) {
+ opts.success(data, 'success');
+ if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
+ }
+ if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
+ if (g && ! --$.active) $.event.trigger("ajaxStop");
+ if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
+
+ // clean up
+ setTimeout(function() {
+ $io.remove();
+ xhr.responseXML = null;
+ }, 100);
+ };
+
+ function toXml(s, doc) {
+ if (window.ActiveXObject) {
+ doc = new ActiveXObject('Microsoft.XMLDOM');
+ doc.async = 'false';
+ doc.loadXML(s);
+ }
+ else
+ doc = (new DOMParser()).parseFromString(s, 'text/xml');
+ return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
+ };
+ };
+};
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for <input type="image" /> elements (if the element
+ * is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ * used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself.
+ */
+$.fn.ajaxForm = function(options) {
+ return this.ajaxFormUnbind().bind('submit.form-plugin',function() {
+ $(this).ajaxSubmit(options);
+ return false;
+ }).each(function() {
+ // store options in hash
+ $(":submit,input:image", this).bind('click.form-plugin',function(e) {
+ var form = this.form;
+ form.clk = this;
+ if (this.type == 'image') {
+ if (e.offsetX != undefined) {
+ form.clk_x = e.offsetX;
+ form.clk_y = e.offsetY;
+ } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
+ var offset = $(this).offset();
+ form.clk_x = e.pageX - offset.left;
+ form.clk_y = e.pageY - offset.top;
+ } else {
+ form.clk_x = e.pageX - this.offsetLeft;
+ form.clk_y = e.pageY - this.offsetTop;
+ }
+ }
+ // clear form vars
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 10);
+ });
+ });
+};
+
+// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
+$.fn.ajaxFormUnbind = function() {
+ this.unbind('submit.form-plugin');
+ return this.each(function() {
+ $(":submit,input:image", this).unbind('click.form-plugin');
+ });
+
+};
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property. An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ */
+$.fn.formToArray = function(semantic) {
+ var a = [];
+ if (this.length == 0) return a;
+
+ var form = this[0];
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
+ if (!els) return a;
+ for(var i=0, max=els.length; i < max; i++) {
+ var el = els[i];
+ var n = el.name;
+ if (!n) continue;
+
+ if (semantic && form.clk && el.type == "image") {
+ // handle image inputs on the fly when semantic == true
+ if(!el.disabled && form.clk == el)
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ continue;
+ }
+
+ var v = $.fieldValue(el, true);
+ if (v && v.constructor == Array) {
+ for(var j=0, jmax=v.length; j < jmax; j++)
+ a.push({name: n, value: v[j]});
+ }
+ else if (v !== null && typeof v != 'undefined')
+ a.push({name: n, value: v});
+ }
+
+ if (!semantic && form.clk) {
+ // input type=='image' are not found in elements array! handle them here
+ var inputs = form.getElementsByTagName("input");
+ for(var i=0, max=inputs.length; i < max; i++) {
+ var input = inputs[i];
+ var n = input.name;
+ if(n && !input.disabled && input.type == "image" && form.clk == input)
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ }
+ return a;
+};
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;name2=value2
+ */
+$.fn.formSerialize = function(semantic) {
+ //hand off to jQuery.param for proper encoding
+ return $.param(this.formToArray(semantic));
+};
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&amp;name2=value2
+ */
+$.fn.fieldSerialize = function(successful) {
+ var a = [];
+ this.each(function() {
+ var n = this.name;
+ if (!n) return;
+ var v = $.fieldValue(this, successful);
+ if (v && v.constructor == Array) {
+ for (var i=0,max=v.length; i < max; i++)
+ a.push({name: n, value: v[i]});
+ }
+ else if (v !== null && typeof v != 'undefined')
+ a.push({name: this.name, value: v});
+ });
+ //hand off to jQuery.param for proper encoding
+ return $.param(a);
+};
+
+/**
+ * Returns the value(s) of the element in the matched set. For example, consider the following form:
+ *
+ * <form><fieldset>
+ * <input name="A" type="text" />
+ * <input name="A" type="text" />
+ * <input name="B" type="checkbox" value="B1" />
+ * <input name="B" type="checkbox" value="B2"/>
+ * <input name="C" type="radio" value="C1" />
+ * <input name="C" type="radio" value="C2" />
+ * </fieldset></form>
+ *
+ * var v = $(':text').fieldValue();
+ * // if no values are entered into the text inputs
+ * v == ['','']
+ * // if values entered into the text inputs are 'foo' and 'bar'
+ * v == ['foo','bar']
+ *
+ * var v = $(':checkbox').fieldValue();
+ * // if neither checkbox is checked
+ * v === undefined
+ * // if both checkboxes are checked
+ * v == ['B1', 'B2']
+ *
+ * var v = $(':radio').fieldValue();
+ * // if neither radio is checked
+ * v === undefined
+ * // if first radio is checked
+ * v == ['C1']
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array. If no valid value can be determined the
+ * array will be empty, otherwise it will contain one or more values.
+ */
+$.fn.fieldValue = function(successful) {
+ for (var val=[], i=0, max=this.length; i < max; i++) {
+ var el = this[i];
+ var v = $.fieldValue(el, successful);
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
+ continue;
+ v.constructor == Array ? $.merge(val, v) : val.push(v);
+ }
+ return val;
+};
+
+/**
+ * Returns the value of the field element.
+ */
+$.fieldValue = function(el, successful) {
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+ if (typeof successful == 'undefined') successful = true;
+
+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+ tag == 'select' && el.selectedIndex == -1))
+ return null;
+
+ if (tag == 'select') {
+ var index = el.selectedIndex;
+ if (index < 0) return null;
+ var a = [], ops = el.options;
+ var one = (t == 'select-one');
+ var max = (one ? index+1 : ops.length);
+ for(var i=(one ? index : 0); i < max; i++) {
+ var op = ops[i];
+ if (op.selected) {
+ // extra pain for IE...
+ var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
+ if (one) return v;
+ a.push(v);
+ }
+ }
+ return a;
+ }
+ return el.value;
+};
+
+/**
+ * Clears the form data. Takes the following actions on the form's input fields:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ */
+$.fn.clearForm = function() {
+ return this.each(function() {
+ $('input,select,textarea', this).clearFields();
+ });
+};
+
+/**
+ * Clears the selected form elements.
+ */
+$.fn.clearFields = $.fn.clearInputs = function() {
+ return this.each(function() {
+ var t = this.type, tag = this.tagName.toLowerCase();
+ if (t == 'file' || t == 'text' || t == 'password' || tag == 'textarea')
+ this.value = '';
+ else if (t == 'checkbox' || t == 'radio')
+ this.checked = false;
+ else if (tag == 'select')
+ this.selectedIndex = -1;
+ });
+};
+
+/**
+ * Resets the form data. Causes all form elements to be reset to their original value.
+ */
+$.fn.resetForm = function() {
+ return this.each(function() {
+ // guard against an input with the name of 'reset'
+ // note that IE reports the reset function as an 'object'
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
+ this.reset();
+ });
+};
+
+/**
+ * Enables or disables any matching elements.
+ */
+$.fn.enable = function(b) {
+ if (b == undefined) b = true;
+ return this.each(function() {
+ this.disabled = !b
+ });
+};
+
+/**
+ * Checks/unchecks any matching checkboxes or radio buttons and
+ * selects/deselects and matching option elements.
+ */
+$.fn.selected = function(select) {
+ if (select == undefined) select = true;
+ return this.each(function() {
+ var t = this.type;
+ if (t == 'checkbox' || t == 'radio')
+ this.checked = select;
+ else if (this.tagName.toLowerCase() == 'option') {
+ var $sel = $(this).parent('select');
+ if (select && $sel[0] && $sel[0].type == 'select-one') {
+ // deselect all other options
+ $sel.find('option').selected(false);
+ }
+ this.selected = select;
+ }
+ });
+};
+
+// helper fn for console logging
+// set $.fn.ajaxSubmit.debug to true to enable debug logging
+function log() {
+ if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
+ window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
+};
+
+})(jQuery);
diff --git a/js/jquery.js b/js/jquery.js
index 237e1b908..b3b95307a 100644
--- a/js/jquery.js
+++ b/js/jquery.js
@@ -1,5 +1,5 @@
/*!
- * jQuery JavaScript Library v1.4.1
+ * jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
@@ -11,7 +11,7 @@
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
- * Date: Mon Jan 25 19:43:33 2010 -0500
+ * Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function( window, undefined ) {
@@ -86,6 +86,15 @@ jQuery.fn = jQuery.prototype = {
this.length = 1;
return this;
}
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = "body";
+ this.length = 1;
+ return this;
+ }
// Handle HTML strings
if ( typeof selector === "string" ) {
@@ -116,7 +125,9 @@ jQuery.fn = jQuery.prototype = {
ret = buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
-
+
+ return jQuery.merge( this, selector );
+
// HANDLE: $("#id")
} else {
elem = document.getElementById( match[2] );
@@ -143,6 +154,7 @@ jQuery.fn = jQuery.prototype = {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
+ return jQuery.merge( this, selector );
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
@@ -165,16 +177,14 @@ jQuery.fn = jQuery.prototype = {
this.context = selector.context;
}
- return jQuery.isArray( selector ) ?
- this.setArray( selector ) :
- jQuery.makeArray( selector, this );
+ return jQuery.makeArray( selector, this );
},
// Start with an empty selector
selector: "",
// The current version of jQuery being used
- jquery: "1.4.1",
+ jquery: "1.4.2",
// The default length of a jQuery object is 0
length: 0,
@@ -204,7 +214,14 @@ jQuery.fn = jQuery.prototype = {
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
- var ret = jQuery( elems || null );
+ var ret = jQuery();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
@@ -221,18 +238,6 @@ jQuery.fn = jQuery.prototype = {
return ret;
},
- // Force the current matched set of elements to become
- // the specified array of elements (destroying the stack in the process)
- // You should use pushStack() in order to do this, but maintain the stack
- setArray: function( elems ) {
- // Resetting the length to 0, then using the native Array push
- // is a super-fast way to populate an object with array-like properties
- this.length = 0;
- push.apply( this, elems );
-
- return this;
- },
-
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
@@ -492,6 +497,9 @@ jQuery.extend({
if ( typeof data !== "string" || !data ) {
return null;
}
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
@@ -619,6 +627,7 @@ jQuery.extend({
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
+
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
@@ -807,7 +816,7 @@ function access( elems, key, value, exec, fn, pass ) {
}
// Getting an attribute
- return length ? fn( elems[0], key ) : null;
+ return length ? fn( elems[0], key ) : undefined;
}
function now() {
@@ -871,7 +880,10 @@ function now() {
// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
+ parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
+
// Will be defined later
+ deleteExpando: true,
checkClone: false,
scriptEval: false,
noCloneEvent: true,
@@ -893,6 +905,15 @@ function now() {
delete window[ id ];
}
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete script.test;
+
+ } catch(e) {
+ jQuery.support.deleteExpando = false;
+ }
+
root.removeChild( script );
if ( div.attachEvent && div.fireEvent ) {
@@ -923,6 +944,7 @@ function now() {
document.body.appendChild( div );
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
document.body.removeChild( div ).style.display = 'none';
+
div = null;
});
@@ -962,7 +984,6 @@ jQuery.props = {
frameborder: "frameBorder"
};
var expando = "jQuery" + now(), uuid = 0, windowData = {};
-var emptyObject = {};
jQuery.extend({
cache: {},
@@ -988,8 +1009,7 @@ jQuery.extend({
var id = elem[ expando ], cache = jQuery.cache, thisCache;
- // Handle the case where there's no name immediately
- if ( !name && !id ) {
+ if ( !id && typeof name === "string" && data === undefined ) {
return null;
}
@@ -1003,17 +1023,16 @@ jQuery.extend({
if ( typeof name === "object" ) {
elem[ expando ] = id;
thisCache = cache[ id ] = jQuery.extend(true, {}, name);
- } else if ( cache[ id ] ) {
- thisCache = cache[ id ];
- } else if ( typeof data === "undefined" ) {
- thisCache = emptyObject;
- } else {
- thisCache = cache[ id ] = {};
+
+ } else if ( !cache[ id ] ) {
+ elem[ expando ] = id;
+ cache[ id ] = {};
}
+ thisCache = cache[ id ];
+
// Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
- elem[ expando ] = id;
thisCache[ name ] = data;
}
@@ -1045,15 +1064,11 @@ jQuery.extend({
// Otherwise, we want to remove all of the element's data
} else {
- // Clean up the element expando
- try {
- delete elem[ expando ];
- } catch( e ) {
- // IE has trouble directly removing the expando
- // but it's ok with using removeAttribute
- if ( elem.removeAttribute ) {
- elem.removeAttribute( expando );
- }
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
}
// Completely remove the data cache
@@ -1230,12 +1245,13 @@ jQuery.fn.extend({
elem.className = value;
} else {
- var className = " " + elem.className + " ";
+ var className = " " + elem.className + " ", setClass = elem.className;
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
- elem.className += " " + classNames[c];
+ setClass += " " + classNames[c];
}
}
+ elem.className = jQuery.trim( setClass );
}
}
}
@@ -1264,7 +1280,7 @@ jQuery.fn.extend({
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
- elem.className = className.substring(1, className.length - 1);
+ elem.className = jQuery.trim( className );
} else {
elem.className = "";
@@ -1520,15 +1536,16 @@ jQuery.extend({
}
// elem is actually elem.style ... set the style
- // Using attr for specific style information is now deprecated. Use style insead.
+ // Using attr for specific style information is now deprecated. Use style instead.
return jQuery.style( elem, name, value );
}
});
-var fcleanup = function( nm ) {
- return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
- return "\\" + ch;
- });
-};
+var rnamespaces = /\.(.*)$/,
+ fcleanup = function( nm ) {
+ return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
+ return "\\" + ch;
+ });
+ };
/*
* A number of helper functions used for managing events.
@@ -1550,107 +1567,104 @@ jQuery.event = {
elem = window;
}
+ var handleObjIn, handleObj;
+
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
// Make sure that the function being executed has a unique ID
if ( !handler.guid ) {
handler.guid = jQuery.guid++;
}
- // if data is passed, bind to handler
- if ( data !== undefined ) {
- // Create temporary function pointer to original handler
- var fn = handler;
-
- // Create unique handler function, wrapped around original handler
- handler = jQuery.proxy( fn );
+ // Init the element's event structure
+ var elemData = jQuery.data( elem );
- // Store data in unique handler
- handler.data = data;
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
}
- // Init the element's event structure
- var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),
- handle = jQuery.data( elem, "handle" ), eventHandle;
+ var events = elemData.events = elemData.events || {},
+ eventHandle = elemData.handle, eventHandle;
- if ( !handle ) {
- eventHandle = function() {
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
-
- handle = jQuery.data( elem, "handle", eventHandle );
- }
-
- // If no handle is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !handle ) {
- return;
}
// Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native
- // event in IE.
- handle.elem = elem;
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
// Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn);
- types = types.split( /\s+/ );
+ types = types.split(" ");
- var type, i = 0;
+ var type, i = 0, namespaces;
while ( (type = types[ i++ ]) ) {
- // Namespaced event handlers
- var namespaces = type.split(".");
- type = namespaces.shift();
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
- if ( i > 1 ) {
- handler = jQuery.proxy( handler );
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
- if ( data !== undefined ) {
- handler.data = data;
- }
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
}
- handler.type = namespaces.slice(0).sort().join(".");
+ handleObj.type = type;
+ handleObj.guid = handler.guid;
// Get the current list of functions bound to this event
var handlers = events[ type ],
- special = this.special[ type ] || {};
+ special = jQuery.event.special[ type ] || {};
// Init the event handler queue
if ( !handlers ) {
- handlers = events[ type ] = {};
+ handlers = events[ type ] = [];
// Check for a special event handler
// Only use addEventListener/attachEvent if the special
// events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) {
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
- elem.addEventListener( type, handle, false );
+ elem.addEventListener( type, eventHandle, false );
+
} else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, handle );
+ elem.attachEvent( "on" + type, eventHandle );
}
}
}
if ( special.add ) {
- var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers );
- if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) {
- modifiedHandler.guid = modifiedHandler.guid || handler.guid;
- modifiedHandler.data = modifiedHandler.data || handler.data;
- modifiedHandler.type = modifiedHandler.type || handler.type;
- handler = modifiedHandler;
- }
- }
-
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
// Add the function to the element's handler list
- handlers[ handler.guid ] = handler;
+ handlers.push( handleObj );
// Keep track of which events have been used, for global triggering
- this.global[ type ] = true;
+ jQuery.event.global[ type ] = true;
}
// Nullify elem to prevent memory leaks in IE
@@ -1660,90 +1674,121 @@ jQuery.event = {
global: {},
// Detach an event or set of events from an element
- remove: function( elem, types, handler ) {
+ remove: function( elem, types, handler, pos ) {
// don't do events on text and comment nodes
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
- var events = jQuery.data( elem, "events" ), ret, type, fn;
+ var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ elemData = jQuery.data( elem ),
+ events = elemData && elemData.events;
- if ( events ) {
- // Unbind all events for the element
- if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) {
- for ( type in events ) {
- this.remove( elem, type + (types || "") );
- }
- } else {
- // types is actually an event object here
- if ( types.type ) {
- handler = types.handler;
- types = types.type;
+ if ( !elemData || !events ) {
+ return;
+ }
+
+ // types is actually an event object here
+ if ( types && types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Unbind all events for the element
+ if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+ types = types || "";
+
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types );
+ }
+
+ return;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ while ( (type = types[ i++ ]) ) {
+ origType = type;
+ handleObj = null;
+ all = type.indexOf(".") < 0;
+ namespaces = [];
+
+ if ( !all ) {
+ // Namespaced event handlers
+ namespaces = type.split(".");
+ type = namespaces.shift();
+
+ namespace = new RegExp("(^|\\.)" +
+ jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
+ }
+
+ eventType = events[ type ];
+
+ if ( !eventType ) {
+ continue;
+ }
+
+ if ( !handler ) {
+ for ( var j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ jQuery.event.remove( elem, origType, handleObj.handler, j );
+ eventType.splice( j--, 1 );
+ }
}
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(/\s+/);
- var i = 0;
- while ( (type = types[ i++ ]) ) {
- // Namespaced event handlers
- var namespaces = type.split(".");
- type = namespaces.shift();
- var all = !namespaces.length,
- cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ),
- namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"),
- special = this.special[ type ] || {};
-
- if ( events[ type ] ) {
- // remove the given handler for the given type
- if ( handler ) {
- fn = events[ type ][ handler.guid ];
- delete events[ type ][ handler.guid ];
-
- // remove all handlers for the given type
- } else {
- for ( var handle in events[ type ] ) {
- // Handle the removal of namespaced events
- if ( all || namespace.test( events[ type ][ handle ].type ) ) {
- delete events[ type ][ handle ];
- }
- }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+
+ for ( var j = pos || 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( handler.guid === handleObj.guid ) {
+ // remove the given handler for the given type
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ if ( pos == null ) {
+ eventType.splice( j--, 1 );
}
if ( special.remove ) {
- special.remove.call( elem, namespaces, fn);
+ special.remove.call( elem, handleObj );
}
+ }
- // remove generic event handler if no more handlers exist
- for ( ret in events[ type ] ) {
- break;
- }
- if ( !ret ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );
- } else if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );
- }
- }
- ret = null;
- delete events[ type ];
- }
+ if ( pos != null ) {
+ break;
}
}
}
- // Remove the expando if it's no longer used
- for ( ret in events ) {
- break;
- }
- if ( !ret ) {
- var handle = jQuery.data( elem, "handle" );
- if ( handle ) {
- handle.elem = null;
+ // remove generic event handler if no more handlers exist
+ if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ removeEvent( elem, type, elemData.handle );
}
- jQuery.removeData( elem, "events" );
- jQuery.removeData( elem, "handle" );
+
+ ret = null;
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ var handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ delete elemData.events;
+ delete elemData.handle;
+
+ if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem );
}
}
},
@@ -1774,7 +1819,7 @@ jQuery.event = {
event.stopPropagation();
// Only trigger if we've ever bound an event for it
- if ( this.global[ type ] ) {
+ if ( jQuery.event.global[ type ] ) {
jQuery.each( jQuery.cache, function() {
if ( this.events && this.events[type] ) {
jQuery.event.trigger( event, data, this.handle.elem );
@@ -1825,9 +1870,12 @@ jQuery.event = {
} else if ( !event.isDefaultPrevented() ) {
var target = event.target, old,
- isClick = jQuery.nodeName(target, "a") && type === "click";
+ isClick = jQuery.nodeName(target, "a") && type === "click",
+ special = jQuery.event.special[ type ] || {};
+
+ if ( (!special._default || special._default.call( elem, event ) === false) &&
+ !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
- if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
try {
if ( target[ type ] ) {
// Make sure that we don't accidentally re-trigger the onFOO events
@@ -1837,7 +1885,7 @@ jQuery.event = {
target[ "on" + type ] = null;
}
- this.triggered = true;
+ jQuery.event.triggered = true;
target[ type ]();
}
@@ -1848,53 +1896,57 @@ jQuery.event = {
target[ "on" + type ] = old;
}
- this.triggered = false;
+ jQuery.event.triggered = false;
}
}
},
handle: function( event ) {
- // returned undefined or false
- var all, handlers;
+ var all, handlers, namespaces, namespace, events;
event = arguments[0] = jQuery.event.fix( event || window.event );
event.currentTarget = this;
// Namespaced event handlers
- var namespaces = event.type.split(".");
- event.type = namespaces.shift();
+ all = event.type.indexOf(".") < 0 && !event.exclusive;
- // Cache this now, all = true means, any handler
- all = !namespaces.length && !event.exclusive;
-
- var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
+ if ( !all ) {
+ namespaces = event.type.split(".");
+ event.type = namespaces.shift();
+ namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
- handlers = ( jQuery.data(this, "events") || {} )[ event.type ];
+ var events = jQuery.data(this, "events"), handlers = events[ event.type ];
- for ( var j in handlers ) {
- var handler = handlers[ j ];
+ if ( events && handlers ) {
+ // Clone the handlers to prevent manipulation
+ handlers = handlers.slice(0);
- // Filter the functions by class
- if ( all || namespace.test(handler.type) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handler;
- event.data = handler.data;
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
- var ret = handler.apply( this, arguments );
+ // Filter the functions by class
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, arguments );
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
}
- }
- if ( event.isImmediatePropagationStopped() ) {
- break;
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
}
-
}
}
@@ -1973,44 +2025,39 @@ jQuery.event = {
},
live: {
- add: function( proxy, data, namespaces, live ) {
- jQuery.extend( proxy, data || {} );
-
- proxy.guid += data.selector + data.live;
- data.liveProxy = proxy;
-
- jQuery.event.add( this, data.live, liveHandler, data );
-
+ add: function( handleObj ) {
+ jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) );
},
- remove: function( namespaces ) {
- if ( namespaces.length ) {
- var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
-
- jQuery.each( (jQuery.data(this, "events").live || {}), function() {
- if ( name.test(this.type) ) {
- remove++;
- }
- });
-
- if ( remove < 1 ) {
- jQuery.event.remove( this, namespaces[0], liveHandler );
+ remove: function( handleObj ) {
+ var remove = true,
+ type = handleObj.origType.replace(rnamespaces, "");
+
+ jQuery.each( jQuery.data(this, "events").live || [], function() {
+ if ( type === this.origType.replace(rnamespaces, "") ) {
+ remove = false;
+ return false;
}
+ });
+
+ if ( remove ) {
+ jQuery.event.remove( this, handleObj.origType, liveHandler );
}
- },
- special: {}
+ }
+
},
+
beforeunload: {
- setup: function( data, namespaces, fn ) {
+ setup: function( data, namespaces, eventHandle ) {
// We only want to do this special case on windows
if ( this.setInterval ) {
- this.onbeforeunload = fn;
+ this.onbeforeunload = eventHandle;
}
return false;
},
- teardown: function( namespaces, fn ) {
- if ( this.onbeforeunload === fn ) {
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
this.onbeforeunload = null;
}
}
@@ -2018,6 +2065,14 @@ jQuery.event = {
}
};
+var removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ elem.removeEventListener( type, handle, false );
+ } :
+ function( elem, type, handle ) {
+ elem.detachEvent( "on" + type, handle );
+ };
+
jQuery.Event = function( src ) {
// Allow instantiation without the 'new' keyword
if ( !this.preventDefault ) {
@@ -2095,27 +2150,24 @@ var withinElement = function( event ) {
// Check if mouse(over|out) are still within the same parent element
var parent = event.relatedTarget;
- // Traverse up the tree
- while ( parent && parent !== this ) {
- // Firefox sometimes assigns relatedTarget a XUL element
- // which we cannot access the parentNode property of
- try {
+ // Firefox sometimes assigns relatedTarget a XUL element
+ // which we cannot access the parentNode property of
+ try {
+ // Traverse up the tree
+ while ( parent && parent !== this ) {
parent = parent.parentNode;
-
- // assuming we've left the element since we most likely mousedover a xul element
- } catch(e) {
- break;
}
- }
- if ( parent !== this ) {
- // set the correct event type
- event.type = event.data;
+ if ( parent !== this ) {
+ // set the correct event type
+ event.type = event.data;
- // handle event if we actually just moused on to a non sub-element
- jQuery.event.handle.apply( this, arguments );
- }
+ // handle event if we actually just moused on to a non sub-element
+ jQuery.event.handle.apply( this, arguments );
+ }
+ // assuming we've left the element since we most likely mousedover a xul element
+ } catch(e) { }
},
// In case of event delegation, we only need to rename the event.type,
@@ -2143,64 +2195,65 @@ jQuery.each({
// submit delegation
if ( !jQuery.support.submitBubbles ) {
-jQuery.event.special.submit = {
- setup: function( data, namespaces, fn ) {
- if ( this.nodeName.toLowerCase() !== "form" ) {
- jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {
- var elem = e.target, type = elem.type;
+ jQuery.event.special.submit = {
+ setup: function( data, namespaces ) {
+ if ( this.nodeName.toLowerCase() !== "form" ) {
+ jQuery.event.add(this, "click.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- return trigger( "submit", this, arguments );
- }
- });
+ if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+ return trigger( "submit", this, arguments );
+ }
+ });
- jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) {
- var elem = e.target, type = elem.type;
+ jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- return trigger( "submit", this, arguments );
- }
- });
+ if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+ return trigger( "submit", this, arguments );
+ }
+ });
- } else {
- return false;
- }
- },
+ } else {
+ return false;
+ }
+ },
- remove: function( namespaces, fn ) {
- jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") );
- jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") );
- }
-};
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialSubmit" );
+ }
+ };
}
// change delegation, happens here so we have bind.
if ( !jQuery.support.changeBubbles ) {
-var formElems = /textarea|input|select/i;
+ var formElems = /textarea|input|select/i,
-function getVal( elem ) {
- var type = elem.type, val = elem.value;
+ changeFilters,
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
+ getVal = function( elem ) {
+ var type = elem.type, val = elem.value;
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
- } else if ( elem.nodeName.toLowerCase() === "select" ) {
- val = elem.selectedIndex;
- }
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
- return val;
-}
+ } else if ( elem.nodeName.toLowerCase() === "select" ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
-function testChange( e ) {
+ testChange = function testChange( e ) {
var elem = e.target, data, val;
if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
@@ -2223,61 +2276,61 @@ function testChange( e ) {
e.type = "change";
return jQuery.event.trigger( e, arguments[1], elem );
}
-}
+ };
-jQuery.event.special.change = {
- filters: {
- focusout: testChange,
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
- click: function( e ) {
- var elem = e.target, type = elem.type;
+ click: function( e ) {
+ var elem = e.target, type = elem.type;
- if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
- return testChange.call( this, e );
- }
- },
+ if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+ return testChange.call( this, e );
+ }
+ },
+
+ // Change has to be called before submit
+ // Keydown will be called before keypress, which is used in submit-event delegation
+ keydown: function( e ) {
+ var elem = e.target, type = elem.type;
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = elem.type;
+ if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+ (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+ type === "select-multiple" ) {
+ return testChange.call( this, e );
+ }
+ },
- if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- return testChange.call( this, e );
+ // Beforeactivate happens also before the previous element is blurred
+ // with this event you can't trigger a change event, but you can store
+ // information/focus[in] is not needed anymore
+ beforeactivate: function( e ) {
+ var elem = e.target;
+ jQuery.data( elem, "_change_data", getVal(elem) );
}
},
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information/focus[in] is not needed anymore
- beforeactivate: function( e ) {
- var elem = e.target;
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
- if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) {
- jQuery.data( elem, "_change_data", getVal(elem) );
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
}
- }
- },
- setup: function( data, namespaces, fn ) {
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );
- }
- return formElems.test( this.nodeName );
- },
- remove: function( namespaces, fn ) {
- for ( var type in changeFilters ) {
- jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );
- }
+ return formElems.test( this.nodeName );
+ },
- return formElems.test( this.nodeName );
- }
-};
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
-var changeFilters = jQuery.event.special.change.filters;
+ return formElems.test( this.nodeName );
+ }
+ };
+ changeFilters = jQuery.event.special.change.filters;
}
function trigger( type, elem, args ) {
@@ -2325,11 +2378,16 @@ jQuery.each(["bind", "one"], function( i, name ) {
return fn.apply( this, arguments );
}) : fn;
- return type === "unload" && name !== "one" ?
- this.one( type, data, fn ) :
- this.each(function() {
- jQuery.event.add( this, type, handler, data );
- });
+ if ( type === "unload" && name !== "one" ) {
+ this.one( type, data, fn );
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.add( this[i], type, handler, data );
+ }
+ }
+
+ return this;
};
});
@@ -2340,13 +2398,29 @@ jQuery.fn.extend({
for ( var key in type ) {
this.unbind(key, type[key]);
}
- return this;
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
}
- return this.each(function() {
- jQuery.event.remove( this, type, fn );
- });
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.live( types, data, fn, selector );
+ },
+
+ undelegate: function( selector, types, fn ) {
+ if ( arguments.length === 0 ) {
+ return this.unbind( "live" );
+
+ } else {
+ return this.die( types, null, fn, selector );
+ }
},
+
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
@@ -2390,32 +2464,60 @@ jQuery.fn.extend({
}
});
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn ) {
- var type, i = 0;
+ jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+ var type, i = 0, match, namespaces, preType,
+ selector = origSelector || this.selector,
+ context = origSelector ? this : jQuery( this.context );
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
- types = (types || "").split( /\s+/ );
+ types = (types || "").split(" ");
while ( (type = types[ i++ ]) != null ) {
- type = type === "focus" ? "focusin" : // focus --> focusin
- type === "blur" ? "focusout" : // blur --> focusout
- type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support
- type;
-
+ match = rnamespaces.exec( type );
+ namespaces = "";
+
+ if ( match ) {
+ namespaces = match[0];
+ type = type.replace( rnamespaces, "" );
+ }
+
+ if ( type === "hover" ) {
+ types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+ continue;
+ }
+
+ preType = type;
+
+ if ( type === "focus" || type === "blur" ) {
+ types.push( liveMap[ type ] + namespaces );
+ type = type + namespaces;
+
+ } else {
+ type = (liveMap[ type ] || type) + namespaces;
+ }
+
if ( name === "live" ) {
// bind live handler
- jQuery( this.context ).bind( liveConvert( type, this.selector ), {
- data: data, selector: this.selector, live: type
- }, fn );
+ context.each(function(){
+ jQuery.event.add( this, liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ });
} else {
// unbind live handler
- jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );
+ context.unbind( liveConvert( type, selector ), fn );
}
}
@@ -2425,45 +2527,46 @@ jQuery.each(["live", "die"], function( i, name ) {
function liveHandler( event ) {
var stop, elems = [], selectors = [], args = arguments,
- related, match, fn, elem, j, i, l, data,
- live = jQuery.extend({}, jQuery.data( this, "events" ).live);
+ related, match, handleObj, elem, j, i, l, data,
+ events = jQuery.data( this, "events" );
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
- if ( event.button && event.type === "click" ) {
+ if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
return;
}
- for ( j in live ) {
- fn = live[j];
- if ( fn.live === event.type ||
- fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) {
+ event.liveFired = this;
+
+ var live = events.live.slice(0);
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+ selectors.push( handleObj.selector );
- data = fn.data;
- if ( !(data.beforeFilter && data.beforeFilter[event.type] &&
- !data.beforeFilter[event.type](event)) ) {
- selectors.push( fn.selector );
- }
} else {
- delete live[j];
+ live.splice( j--, 1 );
}
}
match = jQuery( event.target ).closest( selectors, event.currentTarget );
for ( i = 0, l = match.length; i < l; i++ ) {
- for ( j in live ) {
- fn = live[j];
- elem = match[i].elem;
- related = null;
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( match[i].selector === handleObj.selector ) {
+ elem = match[i].elem;
+ related = null;
- if ( match[i].selector === fn.selector ) {
// Those two events require additional checking
- if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {
- related = jQuery( event.relatedTarget ).closest( fn.selector )[0];
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
}
if ( !related || related !== elem ) {
- elems.push({ elem: elem, fn: fn });
+ elems.push({ elem: elem, handleObj: handleObj });
}
}
}
@@ -2472,8 +2575,10 @@ function liveHandler( event ) {
for ( i = 0, l = elems.length; i < l; i++ ) {
match = elems[i];
event.currentTarget = match.elem;
- event.data = match.fn.data;
- if ( match.fn.apply( match.elem, args ) === false ) {
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
stop = false;
break;
}
@@ -2483,7 +2588,7 @@ function liveHandler( event ) {
}
function liveConvert( type, selector ) {
- return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
+ return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
}
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
@@ -3228,8 +3333,10 @@ var makeArray = function(array, results) {
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
// Provide a fallback method if it does not work
} catch(e){
@@ -3533,7 +3640,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
}
var contains = document.compareDocumentPosition ? function(a, b){
- return a.compareDocumentPosition(b) & 16;
+ return !!(a.compareDocumentPosition(b) & 16);
} : function(a, b){
return a !== b && (a.contains ? a.contains(b) : true);
};
@@ -3570,7 +3677,7 @@ jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
-jQuery.getText = getText;
+jQuery.text = getText;
jQuery.isXMLDoc = isXML;
jQuery.contains = contains;
@@ -3856,7 +3963,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
rtagName = /<([\w:]+)/,
rtbody = /<tbody/i,
- rhtml = /<|&\w+;/,
+ rhtml = /<|&#?\w+;/,
+ rnocache = /<script|<object|<embed|<option|<style/i,
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
fcloseTag = function( all, front, tag ) {
return rselfClosing.test( tag ) ?
@@ -3896,7 +4004,7 @@ jQuery.fn.extend({
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
- return jQuery.getText( this );
+ return jQuery.text( this );
},
wrapAll: function( html ) {
@@ -4000,6 +4108,40 @@ jQuery.fn.extend({
return set;
}
},
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
clone: function( events ) {
// Do the clone
@@ -4021,6 +4163,8 @@ jQuery.fn.extend({
}
return jQuery.clean([html.replace(rinlinejQuery, "")
+ // Handle the case in IE 8 where action=/test/> self-closes a tag
+ .replace(/=([^="'>\s]+\/)>/g, '="$1">')
.replace(rleadingWhitespace, "")], ownerDocument)[0];
} else {
return this.cloneNode(true);
@@ -4044,7 +4188,7 @@ jQuery.fn.extend({
null;
// See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !/<script/i.test( value ) &&
+ } else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
@@ -4083,16 +4227,17 @@ jQuery.fn.extend({
if ( this[0] && this[0].parentNode ) {
// Make sure that the elements are removed from the DOM before they are inserted
// this can help fix replacing a parent with child elements
- if ( !jQuery.isFunction( value ) ) {
- value = jQuery( value ).detach();
-
- } else {
+ if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this), old = self.html();
self.replaceWith( value.call( this, i, old ) );
});
}
+ if ( typeof value !== "string" ) {
+ value = jQuery(value).detach();
+ }
+
return this.each(function() {
var next = this.nextSibling, parent = this.parentNode;
@@ -4114,7 +4259,7 @@ jQuery.fn.extend({
},
domManip: function( args, table, callback ) {
- var results, first, value = args[0], scripts = [];
+ var results, first, value = args[0], scripts = [], fragment, parent;
// We can't cloneNode fragments that contain checked, in WebKit
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
@@ -4132,14 +4277,23 @@ jQuery.fn.extend({
}
if ( this[0] ) {
+ parent = value && value.parentNode;
+
// If we're in a fragment, just use that instead of building a new one
- if ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) {
- results = { fragment: args[0].parentNode };
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
+
} else {
results = buildFragment( args, this, scripts );
}
-
- first = results.fragment.firstChild;
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
@@ -4149,14 +4303,14 @@ jQuery.fn.extend({
table ?
root(this[i], first) :
this[i],
- results.cacheable || this.length > 1 || i > 0 ?
- results.fragment.cloneNode(true) :
- results.fragment
+ i > 0 || results.cacheable || this.length > 1 ?
+ fragment.cloneNode(true) :
+ fragment
);
}
}
- if ( scripts ) {
+ if ( scripts.length ) {
jQuery.each( scripts, evalScript );
}
}
@@ -4196,10 +4350,16 @@ function cloneCopyEvent(orig, ret) {
}
function buildFragment( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc;
+ var fragment, cacheable, cacheresults,
+ doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+ // Only cache "small" (1/2 KB) strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+ !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
- // webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked
- if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
if ( cacheresults ) {
@@ -4210,7 +4370,6 @@ function buildFragment( args, nodes, scripts ) {
}
if ( !fragment ) {
- doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
fragment = doc.createDocumentFragment();
jQuery.clean( args, doc, fragment, scripts );
}
@@ -4232,46 +4391,22 @@ jQuery.each({
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
- var ret = [], insert = jQuery( selector );
-
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = (i > 0 ? this.clone(true) : this).get();
- jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
- ret = ret.concat( elems );
- }
- return this.pushStack( ret, name, insert.selector );
- };
-});
-
-jQuery.each({
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
- if ( !keepData && this.nodeType === 1 ) {
- jQuery.cleanData( this.getElementsByTagName("*") );
- jQuery.cleanData( [ this ] );
- }
-
- if ( this.parentNode ) {
- this.parentNode.removeChild( this );
+ var ret = [], insert = jQuery( selector ),
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+
+ } else {
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = (i > 0 ? this.clone(true) : this).get();
+ jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
+ ret = ret.concat( elems );
}
+
+ return this.pushStack( ret, name, insert.selector );
}
- },
-
- empty: function() {
- // Remove element nodes and prevent memory leaks
- if ( this.nodeType === 1 ) {
- jQuery.cleanData( this.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( this.firstChild ) {
- this.removeChild( this.firstChild );
- }
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function() {
- return this.each( fn, arguments );
};
});
@@ -4286,13 +4421,13 @@ jQuery.extend({
var ret = [];
- jQuery.each(elems, function( i, elem ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === "number" ) {
elem += "";
}
if ( !elem ) {
- return;
+ continue;
}
// Convert html string into DOM nodes
@@ -4343,7 +4478,7 @@ jQuery.extend({
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
}
- elem = jQuery.makeArray( div.childNodes );
+ elem = div.childNodes;
}
if ( elem.nodeType ) {
@@ -4351,13 +4486,13 @@ jQuery.extend({
} else {
ret = jQuery.merge( ret, elem );
}
-
- });
+ }
if ( fragment ) {
for ( var i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
} else {
if ( ret[i].nodeType === 1 ) {
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
@@ -4371,9 +4506,36 @@ jQuery.extend({
},
cleanData: function( elems ) {
- for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) {
- jQuery.event.remove( elem );
- jQuery.removeData( elem );
+ var data, id, cache = jQuery.cache,
+ special = jQuery.event.special,
+ deleteExpando = jQuery.support.deleteExpando;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ id = elem[ jQuery.expando ];
+
+ if ( id ) {
+ data = cache[ id ];
+
+ if ( data.events ) {
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ } else {
+ removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ if ( deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ delete cache[ id ];
+ }
}
}
});
@@ -4614,15 +4776,15 @@ var jsc = now(),
rquery = /\?/,
rts = /(\?|&)_=.*?(&|$)/,
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
- r20 = /%20/g;
+ r20 = /%20/g,
-jQuery.fn.extend({
- // Keep a copy of the old load
- _load: jQuery.fn.load,
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load;
+jQuery.fn.extend({
load: function( url, params, callback ) {
if ( typeof url !== "string" ) {
- return this._load( url );
+ return _load.call( this, url );
// Don't do a request if no elements are being requested
} else if ( !this.length ) {
@@ -5243,7 +5405,7 @@ jQuery.extend({
if ( jQuery.isArray(obj) ) {
// Serialize array item.
jQuery.each( obj, function( i, v ) {
- if ( traditional ) {
+ if ( traditional || /\[\]$/.test( prefix ) ) {
// Treat each array item as a scalar.
add( prefix, v );
} else {
diff --git a/js/jquery.min.js b/js/jquery.min.js
index 950198f47..b170a78f8 100644
--- a/js/jquery.min.js
+++ b/js/jquery.min.js
@@ -1,5 +1,5 @@
/*!
- * jQuery JavaScript Library v1.4.1
+ * jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
@@ -11,143 +11,145 @@
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
- * Date: Mon Jan 25 19:43:33 2010 -0500
+ * Date: Sat Feb 13 22:33:48 2010 -0500
*/
-(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);return a}return j?
-e(a[0],b):null}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function ma(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function na(a){var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);if(!(a.button&&a.type==="click")){for(o in x){j=x[o];if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f,
-a.currentTarget);m=0;for(s=i.length;m<s;m++)for(o in x){j=x[o];n=i[m].elem;f=null;if(i[m].selector===j.selector){if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];if(!f||f!==n)d.push({elem:n,fn:j})}}m=0;for(s=d.length;m<s;m++){i=d[m];a.currentTarget=i.elem;a.data=i.fn.data;if(i.fn.apply(i.elem,e)===false){b=false;break}}return b}}function oa(a,b){return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")}function pa(a){return!a||!a.parentNode||a.parentNode.nodeType===
-11}function qa(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)}}})}function ra(a,b,d){var f,e,i;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){e=true;if(i=c.fragments[a[0]])if(i!==1)f=i}if(!f){b=b&&b[0]?b[0].ownerDocument||b[0]:r;f=b.createDocumentFragment();
-c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=i?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(ta.concat.apply([],ta.slice(0,b)),function(){d[this]=a});return d}function ua(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,
-va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]],
-[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,
-this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this,
-a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};
-c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){j=a[i];n=e[i];if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};a[i]=c.extend(f,j,n)}else if(n!==v)a[i]=n}return a};c.extend({noConflict:function(a){z.$=
-Oa;if(a)z.jQuery=Na;return c},isReady:false,ready:function(){if(!c.isReady){if(!r.body)return setTimeout(c.ready,13);c.isReady=true;if(P){for(var a,b=0;a=P[b++];)a.call(r,c);P=null}c.fn.triggerHandler&&c(r).triggerHandler("ready")}},bindReady:function(){if(!va){va=true;if(r.readyState==="complete")return c.ready();if(r.addEventListener){r.addEventListener("DOMContentLoaded",L,false);z.addEventListener("load",c.ready,false)}else if(r.attachEvent){r.attachEvent("onreadystatechange",L);z.attachEvent("onload",
-c.ready);var a=false;try{a=z.frameElement==null}catch(b){}r.documentElement.doScroll&&a&&la()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;var b;for(b in a);return b===v||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;
-return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Ra.test(a)){var b=r.getElementsByTagName("head")[0]||
-r.documentElement,d=r.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,i=a.length,j=i===v||c.isFunction(a);if(d)if(j)for(f in a){if(b.apply(a[f],d)===false)break}else for(;e<i;){if(b.apply(a[e++],d)===false)break}else if(j)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=
-a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Sa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==
-v;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,i=0,j=a.length;i<j;i++){e=b(a[i],i,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=v}else if(b&&!c.isFunction(b)){d=b;b=v}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},
-uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});O=c.uaMatch(O);if(O.browser){c.browser[O.browser]=true;c.browser.version=O.version}if(c.browser.webkit)c.browser.safari=true;if(wa)c.inArray=function(a,b){return wa.call(b,a)};S=c(r);if(r.addEventListener)L=function(){r.removeEventListener("DOMContentLoaded",
-L,false);c.ready()};else if(r.attachEvent)L=function(){if(r.readyState==="complete"){r.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support=
-{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};
-b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=r.createDocumentFragment();a.appendChild(d.firstChild);
-c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props=
-{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true,
-{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,
-a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);
-return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||
-a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=
-c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=c(this);m.removeClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),
-d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");e.className=i.substring(1,i.length-1)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var i=c(this);i.toggleClass(a.call(this,e,i.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,i=0,j=c(this),n=b,o=
-a.split(ca);e=o[i++];){n=f?n:!j.hasClass(e);j[n?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||
-{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i<d;i++){var j=e[i];if(j.selected){a=c(j).val();if(b)return a;f.push(a)}}return f}if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Wa,"")}return v}var n=c.isFunction(a);return this.each(function(o){var m=c(this),s=a;if(this.nodeType===1){if(n)s=a.call(this,o,m.val());
-if(typeof s==="number")s+="";if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d);
-f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=
-""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=
-function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a,
-d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+
-s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a,
-"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,
-b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b,
-d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b=
-0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};
-c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b=
-a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!==
-"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,
-"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"||
-d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a=
-a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,
-f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,
-b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+
-a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e){var i,j=0;if(c.isFunction(f)){e=f;f=v}for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;b==="live"?c(this.context).bind(oa(i,this.selector),{data:f,selector:this.selector,
-live:i},e):c(this.context).unbind(oa(i,this.selector),e?{guid:e.guid+this.selector+i}:null)}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
-(function(){function a(g){for(var h="",k,l=0;g[l];l++){k=g[l];if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;else if(k.nodeType!==8)h+=a(k.childNodes)}return h}function b(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===k){y=l[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=k;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}l[q]=y}}}function d(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===
-k){y=l[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=k;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(o.filter(h,[t]).length>0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||
-typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u=
-l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&
-y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};o.matches=function(g,h){return o(g,null,null,h)};o.find=function(g,h,k){var l,q;if(!g)return[];for(var p=0,u=m.order.length;p<u;p++){var t=m.order[p];if(q=m.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");l=m.find[t](q,
-h,k);if(l!=null){g=g.replace(m.match[t],"");break}}}}l||(l=h.getElementsByTagName("*"));return{set:l,expr:g}};o.filter=function(g,h,k,l){for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){var M=m.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(u===p)p=[];if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=u[U])!=null;U++)if(D){I=M(D,t,U,u);var Da=
-l^!!I;if(k&&I!=null)if(Da)y=true;else u[U]=false;else if(Da){p.push(D);y=true}}if(I!==v){k||(u=p);g=g.replace(m.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)o.error(g);else break;q=g}return u};o.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var m=o.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
-TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,h){var k=typeof h==="string",l=k&&!/\W/.test(h);k=k&&!l;if(l)h=h.toLowerCase();l=0;for(var q=g.length,
-p;l<q;l++)if(p=g[l]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h}k&&o.filter(h,g,true)},">":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l<q;l++){var p=g[l];if(p){k=p.parentNode;g[l]=k.nodeName.toLowerCase()===h?k:false}}}else{l=0;for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)}},"":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=
-h=h.toLowerCase();q=b}q("parentNode",h,l,g,p,k)},"~":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,l,g,p,k)}},find:{ID:function(g,h,k){if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var k=[];h=h.getElementsByName(g[1]);for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);return k.length===0?null:k}},
-TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,k,l,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&
-"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);
-return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===
-g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2===
-0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return h<k[3]-0},gt:function(g,h,k){return h>k[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k<l;k++)if(h[k]===g)return false;return true}else o.error("Syntax error, unrecognized expression: "+
-q)},CHILD:function(g,h){var k=h[1],l=g;switch(k){case "only":case "first":for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;l=g;case "last":for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;case "nth":k=h[2];var q=h[3];if(k===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var u=0;for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h}g=g.nodeIndex-q;return k===0?g===0:g%k===0&&g/k>=
-0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?
-k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};
-try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);return h}}var C;if(r.documentElement.compareDocumentPosition)C=function(g,h){if(!g.compareDocumentPosition||!h.compareDocumentPosition){if(g==h)j=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===
-h?0:1;if(g===0)j=true;return g};else if("sourceIndex"in r.documentElement)C=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)j=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)j=true;return g};else if(r.createRange)C=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)j=true;return g.ownerDocument?-1:1}var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();k.setStart(g,0);k.setEnd(g,0);l.setStart(h,0);l.setEnd(h,0);g=k.compareBoundaryPoints(Range.START_TO_END,
-l);if(g===0)j=true;return g};(function(){var g=r.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");
-return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href",
-2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
-0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[],
-l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)o(g,h[q],k);return o.filter(l,k)};c.find=o;c.expr=o.selectors;c.expr[":"]=c.expr.filters;c.unique=o.uniqueSort;c.getText=a;c.isXMLDoc=w;c.contains=E})();var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;Q=Array.prototype.slice;var Ea=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,i){return!!b.call(e,i,e)===d});else if(b.nodeType)return c.grep(a,
-function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;c.find(a,this[f],b);if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){b.splice(i--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=
-0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ea(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ea(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e<n;e++){j=a[e];i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)}for(;f&&f.ownerDocument&&f!==b;){for(j in i){e=i[j];if(e.jquery?e.index(f)>
--1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),
-a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},
-nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):
-e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==
-b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){return eb.test(d)?a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],
-col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)},
-wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?
-d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,
-false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&
-!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||
-["",""])[1].toLowerCase()]){a=a.replace(Ga,Ia);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var i=c(this),j=i.html();i.empty().append(function(){return a.call(this,e,j)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,
-b,f))});else a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(s){return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s}var e,i,j=a[0],n=[];if(!c.support.checkClone&&arguments.length===3&&typeof j===
-"string"&&sa.test(j))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(j))return this.each(function(s){var x=c(this);a[0]=j.call(this,s,b?x.html():v);x.domManip(a,b,d)});if(this[0]){e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{fragment:a[0].parentNode}:ra(a,this,n);if(i=e.fragment.firstChild){b=b&&c.nodeName(i,"tr");for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)}n&&c.each(n,
-Ma)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);for(var e=0,i=d.length;e<i;e++){var j=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),j);f=f.concat(j)}return this.pushStack(f,a,d.selector)}});c.each({remove:function(a,b){if(!a||c.filter(a,[this]).length){if(!b&&this.nodeType===1){c.cleanData(this.getElementsByTagName("*"));c.cleanData([this])}this.parentNode&&
-this.parentNode.removeChild(this)}},empty:function(){for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)}},function(a,b){c.fn[a]=function(){return this.each(b,arguments)}});c.extend({clean:function(a,b,d,f){b=b||r;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;var e=[];c.each(a,function(i,j){if(typeof j==="number")j+="";if(j){if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);else if(typeof j===
-"string"){j=j.replace(Ga,Ia);var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];i=b.createElement("div");for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;if(!c.support.tbody){m=fb.test(j);n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);
-j=c.makeArray(i.childNodes)}if(j.nodeType)e.push(j);else e=c.merge(e,j)}});if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);else{e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));d.appendChild(e[a])}return e},cleanData:function(a){for(var b=0,d;(d=a[b])!=null;b++){c.event.remove(d);c.removeData(d)}}});var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,
-Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={position:"absolute",visibility:"hidden",display:"block"},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===v)return c.curCSS(d,f);if(typeof e==="number"&&!hb.test(f))e+="px";c.style(d,f,e)})};
-c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return v;if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;var f=a.style||a,e=d!==v;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=Ja.test(a)?a.replace(Ja,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""}if(ga.test(b))b=La;b=b.replace(ha,ia);if(e)f[b]=d;return f[b]},css:function(a,
-b,d,f){if(b==="width"||b==="height"){var e,i=b==="width"?mb:nb;function j(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(i,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0})}a.offsetWidth!==0?j():c.swap(a,lb,j);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&
-a.currentStyle){f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ga.test(b))b=La;if(!d&&e&&e[b])f=e[b];else if(ob){if(ga.test(b))b="float";b=b.replace(ib,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ha,ia);f=a.currentStyle[b]||a.currentStyle[d];if(!jb.test(f)&&kb.test(f)){b=e.left;var i=a.runtimeStyle.left;a.runtimeStyle.left=
-a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=i}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var pb=
-J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;c.fn.extend({_load:c.fn.load,load:function(a,b,d){if(typeof a!=="string")return this._load(a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=
-c.param(b,c.ajaxSettings.traditional);f="POST"}var i=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(j,n){if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);d&&i.each(d,[j.responseText,n,j])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&
-(this.checked||rb.test(this.nodeName)||sb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,
-b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){return new z.XMLHttpRequest}:
-function(){try{return new z.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&e.success.call(o,n,j,w);e.global&&f("ajaxSuccess",[w,e])}function d(){e.complete&&e.complete.call(o,w,j);e.global&&f("ajaxComplete",[w,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}
-function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||
-N.test(e.url))){i=e.jsonpCallback||"jsonp"+pb++;if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");e.url=e.url.replace(N,"="+i+"$1");e.dataType="script";z[i]=z[i]||function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===false&&m==="GET"){var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")}if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&
-c.event.trigger("ajaxStart");s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);if(e.dataType==="script"&&m==="GET"&&s){var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");B.src=e.url;if(e.scriptCharset)B.charset=e.scriptCharset;if(!i){var C=false;B.onload=B.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;b();d();B.onload=B.onreadystatechange=null;A&&B.parentNode&&
-A.removeChild(B)}}}A.insertBefore(B,A.firstChild);return v}var E=false,w=e.xhr();if(w){e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);try{if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])}s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",
-e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(fa){}if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");w.abort();return false}e.global&&f("ajaxSend",[w,e]);var g=w.onreadystatechange=function(q){if(!w||w.readyState===0||q==="abort"){E||d();E=true;if(w)w.onreadystatechange=c.noop}else if(!E&&w&&(w.readyState===4||q==="timeout")){E=true;w.onreadystatechange=c.noop;j=q==="timeout"?"timeout":!c.httpSuccess(w)?
-"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";var p;if(j==="success")try{n=c.httpData(w,e.dataType,e)}catch(u){j="parsererror";p=u}if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);d();q==="timeout"&&w.abort();if(e.async)w=null}};try{var h=w.abort;w.abort=function(){w&&h.call(w);g("abort")}}catch(k){}e.async&&e.timeout>0&&setTimeout(function(){w&&!E&&g("timeout")},e.timeout);try{w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)}catch(l){c.handleError(e,
-w,null,l);d()}e.async||g();return w}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=
-f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(j,n){if(c.isArray(n))c.each(n,
-function(o,m){b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){d(j+"["+o+"]",m)}):f(j,n)}function f(j,n){n=c.isFunction(n)?n():n;e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)}var e=[];if(b===v)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")}});var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,
-W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(ka[d])f=ka[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();
-ka[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&
-c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),
-o=this;for(j in a){var m=j.replace(ha,ia);if(j!==m){a[m]=a[j];delete a[j];j=m}if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);if((j==="height"||j==="width")&&this.style){i.display=c.css(this,"display");i.overflow=this.style.overflow}if(c.isArray(a[j])){(i.specialEasing=i.specialEasing||{})[j]=a[j][1];a[j]=a[j][0]}}if(i.overflow!=null)this.style.overflow="hidden";i.curAnim=c.extend({},a);c.each(a,function(s,x){var A=new c.fx(o,i,s);if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);
-else{var B=xb.exec(x),C=A.cur(true)||0;if(B){x=parseFloat(B[2]);var E=B[3]||"px";if(E!=="px"){o.style[s]=(x||1)+E;C=(x||1)/A.cur(true)*C;o.style[s]=C+E}if(B[1])x=(B[1]==="-="?-1:1)*x+C;A.custom(C,x,E)}else A.custom(C,x,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",
-1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,
-b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==
-null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(i){return e.step(i)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop===
-"width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=
-this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=
-c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=
-null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),
-f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=
-b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;i=e?e.getComputedStyle(b,null):b.currentStyle;o-=b.scrollTop;m-=b.scrollLeft;if(b===d){o+=b.offsetTop;m+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){o+=parseFloat(i.borderTopWidth)||
-0;m+=parseFloat(i.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){o+=parseFloat(i.borderTopWidth)||0;m+=parseFloat(i.borderLeftWidth)||0}f=i}if(f.position==="relative"||f.position==="static"){o+=n.offsetTop;m+=n.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){o+=Math.max(j.scrollTop,n.scrollTop);m+=Math.max(j.scrollLeft,n.scrollLeft)}return{top:o,left:m}};c.offset={initialize:function(){var a=r.body,b=r.createElement("div"),
-d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);
-d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;a.removeChild(b);c.offset.initialize=c.noop},
-bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,d,e);d={top:b.top-e.top+i,left:b.left-
-e.left+j};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=
-this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],i;if(!e)return null;if(f!==v)return this.each(function(){if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]}});
-c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(i){var j=c(this);j[d](f.call(this,i,j[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||
-e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});z.jQuery=z.$=c})(window);
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/js/util.js b/js/util.js
index 3623337b9..3efda0d7b 100644
--- a/js/util.js
+++ b/js/util.js
@@ -53,8 +53,9 @@ var SN = { // StatusNet
NoticeLocationNs: 'notice_data-location_ns',
NoticeGeoName: 'notice_data-geo_name',
NoticeDataGeo: 'notice_data-geo',
- NoticeDataGeoCookie: 'notice_data-geo_cookie',
- NoticeDataGeoSelected: 'notice_data-geo_selected'
+ NoticeDataGeoCookie: 'NoticeDataGeo',
+ NoticeDataGeoSelected: 'notice_data-geo_selected',
+ StatusNetInstance:'StatusNetInstance'
}
},
@@ -319,18 +320,12 @@ var SN = { // StatusNet
}
},
- NoticeReplyTo: function(notice_item) {
- var notice = notice_item[0];
- var notice_reply = $('.notice_reply', notice)[0];
-
- if (jQuery.data(notice_reply, "ElementData") === undefined) {
- jQuery.data(notice_reply, "ElementData", {Bind:'submit'});
- $(notice_reply).bind('click', function() {
- var nickname = ($('.author .nickname', notice).length > 0) ? $($('.author .nickname', notice)[0]) : $('.author .nickname.uid');
- SN.U.NoticeReplySet(nickname.text(), $($('.notice_id', notice)[0]).text());
- return false;
- });
- }
+ NoticeReplyTo: function(notice) {
+ notice.find('.notice_reply').live('click', function() {
+ var nickname = ($('.author .nickname', notice).length > 0) ? $($('.author .nickname', notice)[0]) : $('.author .nickname.uid');
+ SN.U.NoticeReplySet(nickname.text(), $($('.notice_id', notice)[0]).text());
+ return false;
+ });
},
NoticeReplySet: function(nick,id) {
@@ -428,8 +423,11 @@ var SN = { // StatusNet
};
notice.find('a.attachment').click(function() {
- $().jOverlay({url: $('address .url')[0].href+'attachment/' + ($(this).attr('id').substring('attachment'.length + 1)) + '/ajax'});
- return false;
+ var attachId = ($(this).attr('id').substring('attachment'.length + 1));
+ if (attachId) {
+ $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'});
+ return false;
+ }
});
if ($('#shownotice').length == 0) {
@@ -499,7 +497,7 @@ var SN = { // StatusNet
$('#'+SN.C.S.NoticeLocationId).val('');
$('#'+SN.C.S.NoticeDataGeo).attr('checked', false);
- $.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled', { path: '/', expires: SN.U.GetFullYear(2029, 0, 1) });
+ $.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled', { path: '/' });
}
function getJSONgeocodeURL(geocodeURL, data) {
@@ -542,7 +540,7 @@ var SN = { // StatusNet
NDG: true
};
- $.cookie(SN.C.S.NoticeDataGeoCookie, JSON.stringify(cookieValue), { path: '/', expires: SN.U.GetFullYear(2029, 0, 1) });
+ $.cookie(SN.C.S.NoticeDataGeoCookie, JSON.stringify(cookieValue), { path: '/' });
});
}
@@ -670,6 +668,35 @@ var SN = { // StatusNet
date.setFullYear(year, month, day);
return date;
+ },
+
+ StatusNetInstance: {
+ Set: function(value) {
+ var SNI = SN.U.StatusNetInstance.Get();
+ if (SNI !== null) {
+ value = $.extend(SNI, value);
+ }
+
+ $.cookie(
+ SN.C.S.StatusNetInstance,
+ JSON.stringify(value),
+ {
+ path: '/',
+ expires: SN.U.GetFullYear(2029, 0, 1)
+ });
+ },
+
+ Get: function() {
+ var cookieValue = $.cookie(SN.C.S.StatusNetInstance);
+ if (cookieValue !== null) {
+ return JSON.parse(cookieValue);
+ }
+ return null;
+ },
+
+ Delete: function() {
+ $.cookie(SN.C.S.StatusNetInstance, null);
+ }
}
},
@@ -707,6 +734,20 @@ var SN = { // StatusNet
SN.U.NewDirectMessage();
}
+ },
+
+ Login: function() {
+ if (SN.U.StatusNetInstance.Get() !== null) {
+ var nickname = SN.U.StatusNetInstance.Get().Nickname;
+ if (nickname !== null) {
+ $('#form_login #nickname').val(nickname);
+ }
+ }
+
+ $('#form_login').bind('submit', function() {
+ SN.U.StatusNetInstance.Set({Nickname: $('#form_login #nickname').val()});
+ return true;
+ });
}
}
};
@@ -721,5 +762,8 @@ $(document).ready(function(){
if ($('#content .entity_actions').length > 0) {
SN.Init.EntityActions();
}
+ if ($('#form_login').length > 0) {
+ SN.Init.Login();
+ }
});
diff --git a/lib/action.php b/lib/action.php
index b85f353a3..10394c789 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -249,7 +249,7 @@ class Action extends HTMLOutputter // lawsuit
$this->script('jquery.min.js');
$this->script('jquery.form.js');
$this->script('jquery.cookie.js');
- $this->script('json2.js');
+ $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.js').'"); }');
$this->script('jquery.joverlay.min.js');
Event::handle('EndShowJQueryScripts', array($this));
}
@@ -259,8 +259,7 @@ class Action extends HTMLOutputter // lawsuit
$this->script('util.js');
$this->script('geometa.js');
// Frame-busting code to avoid clickjacking attacks.
- $this->element('script', array('type' => 'text/javascript'),
- 'if (window.top !== window.self) { window.top.location.href = window.self.location.href; }');
+ $this->inlineScript('if (window.top !== window.self) { window.top.location.href = window.self.location.href; }');
Event::handle('EndShowStatusNetScripts', array($this));
Event::handle('EndShowLaconicaScripts', array($this));
}
@@ -421,56 +420,75 @@ class Action extends HTMLOutputter // lawsuit
function showPrimaryNav()
{
$user = common_current_user();
- $connect = '';
- if (common_config('xmpp', 'enabled')) {
- $connect = 'imsettings';
- } else if (common_config('sms', 'enabled')) {
- $connect = 'smssettings';
- } else if (common_config('twitter', 'enabled')) {
- $connect = 'twittersettings';
- }
-
$this->elementStart('dl', array('id' => 'site_nav_global_primary'));
$this->element('dt', null, _('Primary site navigation'));
$this->elementStart('dd');
$this->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartPrimaryNav', array($this))) {
if ($user) {
+ // TRANS: Tooltip for main menu option "Personal"
+ $tooltip = _m('TOOLTIP', 'Personal profile and friends timeline');
+ // TRANS: Main menu option when logged in for access to personal profile and friends timeline
$this->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
- _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
+ _m('MENU', 'Personal'), $tooltip, false, 'nav_home');
+ // TRANS: Tooltip for main menu option "Account"
+ $tooltip = _m('TOOLTIP', 'Change your email, avatar, password, profile');
+ // TRANS: Main menu option when logged in for access to user settings
$this->menuItem(common_local_url('profilesettings'),
- _('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
- if ($connect) {
- $this->menuItem(common_local_url($connect),
- _('Connect'), _('Connect to services'), false, 'nav_connect');
- }
+ _('Account'), $tooltip, false, 'nav_account');
+ // TRANS: Tooltip for main menu option "Services"
+ $tooltip = _m('TOOLTIP', 'Connect to services');
+ // TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
+ $this->menuItem(common_local_url('oauthconnectionssettings'),
+ _('Connect'), $tooltip, false, 'nav_connect');
if ($user->hasRight(Right::CONFIGURESITE)) {
+ // TRANS: Tooltip for menu option "Admin"
+ $tooltip = _m('TOOLTIP', 'Change site configuration');
+ // TRANS: Main menu option when logged in and site admin for access to site configuration
$this->menuItem(common_local_url('siteadminpanel'),
- _('Admin'), _('Change site configuration'), false, 'nav_admin');
+ _m('MENU', 'Admin'), $tooltip, false, 'nav_admin');
}
if (common_config('invite', 'enabled')) {
+ // TRANS: Tooltip for main menu option "Invite"
+ $tooltip = _m('TOOLTIP', 'Invite friends and colleagues to join you on %s');
+ // TRANS: Main menu option when logged in and invitations are allowed for inviting new users
$this->menuItem(common_local_url('invite'),
- _('Invite'),
- sprintf(_('Invite friends and colleagues to join you on %s'),
+ _m('MENU', 'Invite'),
+ sprintf($tooltip,
common_config('site', 'name')),
false, 'nav_invitecontact');
}
+ // TRANS: Tooltip for main menu option "Logout"
+ $tooltip = _m('TOOLTIP', 'Logout from the site');
+ // TRANS: Main menu option when logged in to log out the current user
$this->menuItem(common_local_url('logout'),
- _('Logout'), _('Logout from the site'), false, 'nav_logout');
+ _m('MENU', 'Logout'), $tooltip, false, 'nav_logout');
}
else {
if (!common_config('site', 'closed')) {
+ // TRANS: Tooltip for main menu option "Register"
+ $tooltip = _m('TOOLTIP', 'Create an account');
+ // TRANS: Main menu option when not logged in to register a new account
$this->menuItem(common_local_url('register'),
- _('Register'), _('Create an account'), false, 'nav_register');
+ _m('MENU', 'Register'), $tooltip, false, 'nav_register');
}
+ // TRANS: Tooltip for main menu option "Login"
+ $tooltip = _m('TOOLTIP', 'Login to the site');
+ // TRANS: Main menu option when not logged in to log in
$this->menuItem(common_local_url('login'),
- _('Login'), _('Login to the site'), false, 'nav_login');
+ _m('MENU', 'Login'), $tooltip, false, 'nav_login');
}
+ // TRANS: Tooltip for main menu option "Help"
+ $tooltip = _m('TOOLTIP', 'Help me!');
+ // TRANS: Main menu option for help on the StatusNet site
$this->menuItem(common_local_url('doc', array('title' => 'help')),
- _('Help'), _('Help me!'), false, 'nav_help');
+ _m('MENU', 'Help'), $tooltip, false, 'nav_help');
if ($user || !common_config('site', 'private')) {
+ // TRANS: Tooltip for main menu option "Search"
+ $tooltip = _m('TOOLTIP', 'Search for people or text');
+ // TRANS: Main menu option when logged in or when the StatusNet instance is not private
$this->menuItem(common_local_url('peoplesearch'),
- _('Search'), _('Search for people or text'), false, 'nav_search');
+ _m('MENU', 'Search'), $tooltip, false, 'nav_search');
}
Event::handle('EndPrimaryNav', array($this));
}
@@ -491,6 +509,7 @@ class Action extends HTMLOutputter // lawsuit
if ($text) {
$this->elementStart('dl', array('id' => 'site_notice',
'class' => 'system_notice'));
+ // TRANS: DT element for site notice. String is hidden in default CSS.
$this->element('dt', null, _('Site notice'));
$this->elementStart('dd', null);
$this->raw($text);
@@ -977,7 +996,7 @@ class Action extends HTMLOutputter // lawsuit
if (is_null($arg)) {
return $def;
- } else if (in_array($arg, array('true', 'yes', '1'))) {
+ } else if (in_array($arg, array('true', 'yes', '1', 'on'))) {
return true;
} else if (in_array($arg, array('false', 'no', '0'))) {
return false;
diff --git a/lib/activity.php b/lib/activity.php
new file mode 100644
index 000000000..2cb80f9e1
--- /dev/null
+++ b/lib/activity.php
@@ -0,0 +1,1288 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class PoCoURL
+{
+ const URLS = 'urls';
+ const TYPE = 'type';
+ const VALUE = 'value';
+ const PRIMARY = 'primary';
+
+ public $type;
+ public $value;
+ public $primary;
+
+ function __construct($type, $value, $primary = false)
+ {
+ $this->type = $type;
+ $this->value = $value;
+ $this->primary = $primary;
+ }
+
+ function asString()
+ {
+ $xs = new XMLStringer(true);
+ $xs->elementStart('poco:urls');
+ $xs->element('poco:type', null, $this->type);
+ $xs->element('poco:value', null, $this->value);
+ if (!empty($this->primary)) {
+ $xs->element('poco:primary', null, 'true');
+ }
+ $xs->elementEnd('poco:urls');
+ return $xs->getString();
+ }
+}
+
+class PoCoAddress
+{
+ const ADDRESS = 'address';
+ const FORMATTED = 'formatted';
+
+ public $formatted;
+
+ // @todo Other address fields
+
+ function asString()
+ {
+ if (!empty($this->formatted)) {
+ $xs = new XMLStringer(true);
+ $xs->elementStart('poco:address');
+ $xs->element('poco:formatted', null, $this->formatted);
+ $xs->elementEnd('poco:address');
+ return $xs->getString();
+ }
+
+ return null;
+ }
+}
+
+class PoCo
+{
+ const NS = 'http://portablecontacts.net/spec/1.0';
+
+ const USERNAME = 'preferredUsername';
+ const DISPLAYNAME = 'displayName';
+ const NOTE = 'note';
+
+ public $preferredUsername;
+ public $displayName;
+ public $note;
+ public $address;
+ public $urls = array();
+
+ function __construct($element = null)
+ {
+ if (empty($element)) {
+ return;
+ }
+
+ $this->preferredUsername = ActivityUtils::childContent(
+ $element,
+ self::USERNAME,
+ self::NS
+ );
+
+ $this->displayName = ActivityUtils::childContent(
+ $element,
+ self::DISPLAYNAME,
+ self::NS
+ );
+
+ $this->note = ActivityUtils::childContent(
+ $element,
+ self::NOTE,
+ self::NS
+ );
+
+ $this->address = $this->_getAddress($element);
+ $this->urls = $this->_getURLs($element);
+ }
+
+ private function _getURLs($element)
+ {
+ $urlEls = $element->getElementsByTagnameNS(self::NS, PoCoURL::URLS);
+ $urls = array();
+
+ foreach ($urlEls as $urlEl) {
+
+ $type = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::TYPE,
+ PoCo::NS
+ );
+
+ $value = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::VALUE,
+ PoCo::NS
+ );
+
+ $primary = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::PRIMARY,
+ PoCo::NS
+ );
+
+ $isPrimary = false;
+
+ if (isset($primary) && $primary == 'true') {
+ $isPrimary = true;
+ }
+
+ // @todo check to make sure a primary hasn't already been added
+
+ array_push($urls, new PoCoURL($type, $value, $isPrimary));
+ }
+ return $urls;
+ }
+
+ private function _getAddress($element)
+ {
+ $addressEl = ActivityUtils::child(
+ $element,
+ PoCoAddress::ADDRESS,
+ PoCo::NS
+ );
+
+ if (!empty($addressEl)) {
+ $formatted = ActivityUtils::childContent(
+ $addressEl,
+ PoCoAddress::FORMATTED,
+ self::NS
+ );
+
+ if (!empty($formatted)) {
+ $address = new PoCoAddress();
+ $address->formatted = $formatted;
+ return $address;
+ }
+ }
+
+ return null;
+ }
+
+ function fromProfile($profile)
+ {
+ if (empty($profile)) {
+ return null;
+ }
+
+ $poco = new PoCo();
+
+ $poco->preferredUsername = $profile->nickname;
+ $poco->displayName = $profile->getBestName();
+
+ $poco->note = $profile->bio;
+
+ $paddy = new PoCoAddress();
+ $paddy->formatted = $profile->location;
+ $poco->address = $paddy;
+
+ if (!empty($profile->homepage)) {
+ array_push(
+ $poco->urls,
+ new PoCoURL(
+ 'homepage',
+ $profile->homepage,
+ true
+ )
+ );
+ }
+
+ return $poco;
+ }
+
+ function fromGroup($group)
+ {
+ if (empty($group)) {
+ return null;
+ }
+
+ $poco = new PoCo();
+
+ $poco->preferredUsername = $group->nickname;
+ $poco->displayName = $group->getBestName();
+
+ $poco->note = $group->description;
+
+ $paddy = new PoCoAddress();
+ $paddy->formatted = $group->location;
+ $poco->address = $paddy;
+
+ if (!empty($group->homepage)) {
+ array_push(
+ $poco->urls,
+ new PoCoURL(
+ 'homepage',
+ $group->homepage,
+ true
+ )
+ );
+ }
+
+ return $poco;
+ }
+
+ function getPrimaryURL()
+ {
+ foreach ($this->urls as $url) {
+ if ($url->primary) {
+ return $url;
+ }
+ }
+ }
+
+ function asString()
+ {
+ $xs = new XMLStringer(true);
+ $xs->element(
+ 'poco:preferredUsername',
+ null,
+ $this->preferredUsername
+ );
+
+ $xs->element(
+ 'poco:displayName',
+ null,
+ $this->displayName
+ );
+
+ if (!empty($this->note)) {
+ $xs->element('poco:note', null, $this->note);
+ }
+
+ if (!empty($this->address)) {
+ $xs->raw($this->address->asString());
+ }
+
+ foreach ($this->urls as $url) {
+ $xs->raw($url->asString());
+ }
+
+ return $xs->getString();
+ }
+}
+
+/**
+ * Utilities for turning DOMish things into Activityish things
+ *
+ * Some common functions that I didn't have the bandwidth to try to factor
+ * into some kind of reasonable superclass, so just dumped here. Might
+ * be useful to have an ActivityObject parent class or something.
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityUtils
+{
+ const ATOM = 'http://www.w3.org/2005/Atom';
+
+ const LINK = 'link';
+ const REL = 'rel';
+ const TYPE = 'type';
+ const HREF = 'href';
+
+ const CONTENT = 'content';
+ const SRC = 'src';
+
+ /**
+ * Get the permalink for an Activity object
+ *
+ * @param DOMElement $element A DOM element
+ *
+ * @return string related link, if any
+ */
+
+ static function getPermalink($element)
+ {
+ return self::getLink($element, 'alternate', 'text/html');
+ }
+
+ /**
+ * Get the permalink for an Activity object
+ *
+ * @param DOMElement $element A DOM element
+ *
+ * @return string related link, if any
+ */
+
+ static function getLink(DOMNode $element, $rel, $type=null)
+ {
+ $els = $element->childNodes;
+
+ foreach ($els as $link) {
+ if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
+
+ $linkRel = $link->getAttribute(self::REL);
+ $linkType = $link->getAttribute(self::TYPE);
+
+ if ($linkRel == $rel &&
+ (is_null($type) || $linkType == $type)) {
+ return $link->getAttribute(self::HREF);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ static function getLinks(DOMNode $element, $rel, $type=null)
+ {
+ $els = $element->childNodes;
+ $out = array();
+
+ foreach ($els as $link) {
+ if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
+
+ $linkRel = $link->getAttribute(self::REL);
+ $linkType = $link->getAttribute(self::TYPE);
+
+ if ($linkRel == $rel &&
+ (is_null($type) || $linkType == $type)) {
+ $out[] = $link;
+ }
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * Gets the first child element with the given tag
+ *
+ * @param DOMElement $element element to pick at
+ * @param string $tag tag to look for
+ * @param string $namespace Namespace to look under
+ *
+ * @return DOMElement found element or null
+ */
+
+ static function child(DOMNode $element, $tag, $namespace=self::ATOM)
+ {
+ $els = $element->childNodes;
+ if (empty($els) || $els->length == 0) {
+ return null;
+ } else {
+ for ($i = 0; $i < $els->length; $i++) {
+ $el = $els->item($i);
+ if ($el->localName == $tag && $el->namespaceURI == $namespace) {
+ return $el;
+ }
+ }
+ }
+ }
+
+ /**
+ * Grab the text content of a DOM element child of the current element
+ *
+ * @param DOMElement $element Element whose children we examine
+ * @param string $tag Tag to look up
+ * @param string $namespace Namespace to use, defaults to Atom
+ *
+ * @return string content of the child
+ */
+
+ static function childContent(DOMNode $element, $tag, $namespace=self::ATOM)
+ {
+ $el = self::child($element, $tag, $namespace);
+
+ if (empty($el)) {
+ return null;
+ } else {
+ return $el->textContent;
+ }
+ }
+
+ /**
+ * Get the content of an atom:entry-like object
+ *
+ * @param DOMElement $element The element to examine.
+ *
+ * @return string unencoded HTML content of the element, like "This -&lt; is <b>HTML</b>."
+ *
+ * @todo handle remote content
+ * @todo handle embedded XML mime types
+ * @todo handle base64-encoded non-XML and non-text mime types
+ */
+
+ static function getContent($element)
+ {
+ $contentEl = ActivityUtils::child($element, self::CONTENT);
+
+ if (!empty($contentEl)) {
+
+ $src = $contentEl->getAttribute(self::SRC);
+
+ if (!empty($src)) {
+ throw new ClientException(_("Can't handle remote content yet."));
+ }
+
+ $type = $contentEl->getAttribute(self::TYPE);
+
+ // slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3
+
+ if ($type == 'text') {
+ return $contentEl->textContent;
+ } else if ($type == 'html') {
+ $text = $contentEl->textContent;
+ return htmlspecialchars_decode($text, ENT_QUOTES);
+ } else if ($type == 'xhtml') {
+ $divEl = ActivityUtils::child($contentEl, 'div');
+ if (empty($divEl)) {
+ return null;
+ }
+ $doc = $divEl->ownerDocument;
+ $text = '';
+ $children = $divEl->childNodes;
+
+ for ($i = 0; $i < $children->length; $i++) {
+ $child = $children->item($i);
+ $text .= $doc->saveXML($child);
+ }
+ return trim($text);
+ } else if (in_array(array('text/xml', 'application/xml'), $type) ||
+ preg_match('#(+|/)xml$#', $type)) {
+ throw new ClientException(_("Can't handle embedded XML content yet."));
+ } else if (strncasecmp($type, 'text/', 5)) {
+ return $contentEl->textContent;
+ } else {
+ throw new ClientException(_("Can't handle embedded Base64 content yet."));
+ }
+ }
+ }
+}
+
+// XXX: Arg! This wouldn't be necessary if we used Avatars conistently
+class AvatarLink
+{
+ public $url;
+ public $type;
+ public $size;
+ public $width;
+ public $height;
+
+ function __construct($element=null)
+ {
+ if ($element) {
+ // @fixme use correct namespaces
+ $this->url = $element->getAttribute('href');
+ $this->type = $element->getAttribute('type');
+ $width = $element->getAttribute('media:width');
+ if ($width != null) {
+ $this->width = intval($width);
+ }
+ $height = $element->getAttribute('media:height');
+ if ($height != null) {
+ $this->height = intval($height);
+ }
+ }
+ }
+
+ static function fromAvatar($avatar)
+ {
+ if (empty($avatar)) {
+ return null;
+ }
+ $alink = new AvatarLink();
+ $alink->type = $avatar->mediatype;
+ $alink->height = $avatar->height;
+ $alink->width = $avatar->width;
+ $alink->url = $avatar->displayUrl();
+ return $alink;
+ }
+
+ static function fromFilename($filename, $size)
+ {
+ $alink = new AvatarLink();
+ $alink->url = $filename;
+ $alink->height = $size;
+ if (!empty($filename)) {
+ $alink->width = $size;
+ $alink->type = self::mediatype($filename);
+ } else {
+ $alink->url = User_group::defaultLogo($size);
+ $alink->type = 'image/png';
+ }
+ return $alink;
+ }
+
+ // yuck!
+ static function mediatype($filename) {
+ $ext = strtolower(end(explode('.', $filename)));
+ if ($ext == 'jpeg') {
+ $ext = 'jpg';
+ }
+ // hope we don't support any others
+ $types = array('png', 'gif', 'jpg', 'jpeg');
+ if (in_array($ext, $types)) {
+ return 'image/' . $ext;
+ }
+ return null;
+ }
+}
+
+/**
+ * A noun-ish thing in the activity universe
+ *
+ * The activity streams spec talks about activity objects, while also having
+ * a tag activity:object, which is in fact an activity object. Aaaaaah!
+ *
+ * This is just a thing in the activity universe. Can be the subject, object,
+ * or indirect object (target!) of an activity verb. Rotten name, and I'm
+ * propagating it. *sigh*
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityObject
+{
+ const ARTICLE = 'http://activitystrea.ms/schema/1.0/article';
+ const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry';
+ const NOTE = 'http://activitystrea.ms/schema/1.0/note';
+ const STATUS = 'http://activitystrea.ms/schema/1.0/status';
+ const FILE = 'http://activitystrea.ms/schema/1.0/file';
+ const PHOTO = 'http://activitystrea.ms/schema/1.0/photo';
+ const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album';
+ const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist';
+ const VIDEO = 'http://activitystrea.ms/schema/1.0/video';
+ const AUDIO = 'http://activitystrea.ms/schema/1.0/audio';
+ const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark';
+ const PERSON = 'http://activitystrea.ms/schema/1.0/person';
+ const GROUP = 'http://activitystrea.ms/schema/1.0/group';
+ const PLACE = 'http://activitystrea.ms/schema/1.0/place';
+ const COMMENT = 'http://activitystrea.ms/schema/1.0/comment';
+ // ^^^^^^^^^^ tea!
+
+ // Atom elements we snarf
+
+ const TITLE = 'title';
+ const SUMMARY = 'summary';
+ const ID = 'id';
+ const SOURCE = 'source';
+
+ const NAME = 'name';
+ const URI = 'uri';
+ const EMAIL = 'email';
+
+ public $element;
+ public $type;
+ public $id;
+ public $title;
+ public $summary;
+ public $content;
+ public $link;
+ public $source;
+ public $avatarLinks = array();
+ public $geopoint;
+ public $poco;
+ public $displayName;
+
+ /**
+ * Constructor
+ *
+ * This probably needs to be refactored
+ * to generate a local class (ActivityPerson, ActivityFile, ...)
+ * based on the object type.
+ *
+ * @param DOMElement $element DOM thing to turn into an Activity thing
+ */
+
+ function __construct($element = null)
+ {
+ if (empty($element)) {
+ return;
+ }
+
+ $this->element = $element;
+
+ $this->geopoint = $this->_childContent(
+ $element,
+ ActivityContext::POINT,
+ ActivityContext::GEORSS
+ );
+
+ if ($element->tagName == 'author') {
+
+ $this->type = self::PERSON; // XXX: is this fair?
+ $this->title = $this->_childContent($element, self::NAME);
+ $this->id = $this->_childContent($element, self::URI);
+
+ if (empty($this->id)) {
+ $email = $this->_childContent($element, self::EMAIL);
+ if (!empty($email)) {
+ // XXX: acct: ?
+ $this->id = 'mailto:'.$email;
+ }
+ }
+
+ } else {
+
+ $this->type = $this->_childContent($element, Activity::OBJECTTYPE,
+ Activity::SPEC);
+
+ if (empty($this->type)) {
+ $this->type = ActivityObject::NOTE;
+ }
+
+ $this->id = $this->_childContent($element, self::ID);
+ $this->title = $this->_childContent($element, self::TITLE);
+ $this->summary = $this->_childContent($element, self::SUMMARY);
+
+ $this->source = $this->_getSource($element);
+
+ $this->content = ActivityUtils::getContent($element);
+
+ $this->link = ActivityUtils::getPermalink($element);
+
+ }
+
+ // Some per-type attributes...
+ if ($this->type == self::PERSON || $this->type == self::GROUP) {
+ $this->displayName = $this->title;
+
+ $avatars = ActivityUtils::getLinks($element, 'avatar');
+ foreach ($avatars as $link) {
+ $this->avatarLinks[] = new AvatarLink($link);
+ }
+
+ $this->poco = new PoCo($element);
+ }
+ }
+
+ private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM)
+ {
+ return ActivityUtils::childContent($element, $tag, $namespace);
+ }
+
+ // Try to get a unique id for the source feed
+
+ private function _getSource($element)
+ {
+ $sourceEl = ActivityUtils::child($element, 'source');
+
+ if (empty($sourceEl)) {
+ return null;
+ } else {
+ $href = ActivityUtils::getLink($sourceEl, 'self');
+ if (!empty($href)) {
+ return $href;
+ } else {
+ return ActivityUtils::childContent($sourceEl, 'id');
+ }
+ }
+ }
+
+ static function fromNotice($notice)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::NOTE;
+
+ $object->id = $notice->uri;
+ $object->title = $notice->content;
+ $object->content = $notice->rendered;
+ $object->link = $notice->bestUrl();
+
+ return $object;
+ }
+
+ static function fromProfile($profile)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::PERSON;
+ $object->id = $profile->getUri();
+ $object->title = $profile->getBestName();
+ $object->link = $profile->profileurl;
+
+ $orig = $profile->getOriginalAvatar();
+
+ if (!empty($orig)) {
+ $object->avatarLinks[] = AvatarLink::fromAvatar($orig);
+ }
+
+ $sizes = array(
+ AVATAR_PROFILE_SIZE,
+ AVATAR_STREAM_SIZE,
+ AVATAR_MINI_SIZE
+ );
+
+ foreach ($sizes as $size) {
+
+ $alink = null;
+ $avatar = $profile->getAvatar($size);
+
+ if (!empty($avatar)) {
+ $alink = AvatarLink::fromAvatar($avatar);
+ } else {
+ $alink = new AvatarLink();
+ $alink->type = 'image/png';
+ $alink->height = $size;
+ $alink->width = $size;
+ $alink->url = Avatar::defaultImage($size);
+ }
+
+ $object->avatarLinks[] = $alink;
+ }
+
+ if (isset($profile->lat) && isset($profile->lon)) {
+ $object->geopoint = (float)$profile->lat
+ . ' ' . (float)$profile->lon;
+ }
+
+ $object->poco = PoCo::fromProfile($profile);
+
+ return $object;
+ }
+
+ static function fromGroup($group)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::GROUP;
+ $object->id = $group->getUri();
+ $object->title = $group->getBestName();
+ $object->link = $group->getUri();
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->homepage_logo,
+ AVATAR_PROFILE_SIZE
+ );
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->stream_logo,
+ AVATAR_STREAM_SIZE
+ );
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->mini_logo,
+ AVATAR_MINI_SIZE
+ );
+
+ $object->poco = PoCo::fromGroup($group);
+
+ return $object;
+ }
+
+
+ function asString($tag='activity:object')
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart($tag);
+
+ $xs->element('activity:object-type', null, $this->type);
+
+ $xs->element(self::ID, null, $this->id);
+
+ if (!empty($this->title)) {
+ $xs->element(self::TITLE, null, $this->title);
+ }
+
+ if (!empty($this->summary)) {
+ $xs->element(self::SUMMARY, null, $this->summary);
+ }
+
+ if (!empty($this->content)) {
+ // XXX: assuming HTML content here
+ $xs->element(ActivityUtils::CONTENT, array('type' => 'html'), $this->content);
+ }
+
+ if (!empty($this->link)) {
+ $xs->element(
+ 'link',
+ array(
+ 'rel' => 'alternate',
+ 'type' => 'text/html',
+ 'href' => $this->link
+ ),
+ null
+ );
+ }
+
+ if ($this->type == ActivityObject::PERSON
+ || $this->type == ActivityObject::GROUP) {
+
+ foreach ($this->avatarLinks as $avatar) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'avatar',
+ 'type' => $avatar->type,
+ 'media:width' => $avatar->width,
+ 'media:height' => $avatar->height,
+ 'href' => $avatar->url
+ ),
+ null
+ );
+ }
+ }
+
+ if (!empty($this->geopoint)) {
+ $xs->element(
+ 'georss:point',
+ null,
+ $this->geopoint
+ );
+ }
+
+ if (!empty($this->poco)) {
+ $xs->raw($this->poco->asString());
+ }
+
+ $xs->elementEnd($tag);
+
+ return $xs->getString();
+ }
+}
+
+/**
+ * Utility class to hold a bunch of constant defining default verb types
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityVerb
+{
+ const POST = 'http://activitystrea.ms/schema/1.0/post';
+ const SHARE = 'http://activitystrea.ms/schema/1.0/share';
+ const SAVE = 'http://activitystrea.ms/schema/1.0/save';
+ const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite';
+ const PLAY = 'http://activitystrea.ms/schema/1.0/play';
+ const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow';
+ const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend';
+ const JOIN = 'http://activitystrea.ms/schema/1.0/join';
+ const TAG = 'http://activitystrea.ms/schema/1.0/tag';
+
+ // Custom OStatus verbs for the flipside until they're standardized
+ const DELETE = 'http://ostatus.org/schema/1.0/unfollow';
+ const UNFAVORITE = 'http://ostatus.org/schema/1.0/unfavorite';
+ const UNFOLLOW = 'http://ostatus.org/schema/1.0/unfollow';
+ const LEAVE = 'http://ostatus.org/schema/1.0/leave';
+
+ // For simple profile-update pings; no content to share.
+ const UPDATE_PROFILE = 'http://ostatus.org/schema/1.0/update-profile';
+}
+
+class ActivityContext
+{
+ public $replyToID;
+ public $replyToUrl;
+ public $location;
+ public $attention = array();
+ public $conversation;
+
+ const THR = 'http://purl.org/syndication/thread/1.0';
+ const GEORSS = 'http://www.georss.org/georss';
+ const OSTATUS = 'http://ostatus.org/schema/1.0';
+
+ const INREPLYTO = 'in-reply-to';
+ const REF = 'ref';
+ const HREF = 'href';
+
+ const POINT = 'point';
+
+ const ATTENTION = 'ostatus:attention';
+ const CONVERSATION = 'ostatus:conversation';
+
+ function __construct($element)
+ {
+ $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR);
+
+ if (!empty($replyToEl)) {
+ $this->replyToID = $replyToEl->getAttribute(self::REF);
+ $this->replyToUrl = $replyToEl->getAttribute(self::HREF);
+ }
+
+ $this->location = $this->getLocation($element);
+
+ $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
+
+ // Multiple attention links allowed
+
+ $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK);
+
+ for ($i = 0; $i < $links->length; $i++) {
+
+ $link = $links->item($i);
+
+ $linkRel = $link->getAttribute(ActivityUtils::REL);
+
+ if ($linkRel == self::ATTENTION) {
+ $this->attention[] = $link->getAttribute(self::HREF);
+ }
+ }
+ }
+
+ /**
+ * Parse location given as a GeoRSS-simple point, if provided.
+ * http://www.georss.org/simple
+ *
+ * @param feed item $entry
+ * @return mixed Location or false
+ */
+ function getLocation($dom)
+ {
+ $points = $dom->getElementsByTagNameNS(self::GEORSS, self::POINT);
+
+ for ($i = 0; $i < $points->length; $i++) {
+ $point = $points->item($i)->textContent;
+ return self::locationFromPoint($point);
+ }
+
+ return null;
+ }
+
+ // XXX: Move to ActivityUtils or Location?
+ static function locationFromPoint($point)
+ {
+ $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
+ $point = preg_replace('/\s+/', ' ', $point);
+ $point = trim($point);
+ $coords = explode(' ', $point);
+ if (count($coords) == 2) {
+ list($lat, $lon) = $coords;
+ if (is_numeric($lat) && is_numeric($lon)) {
+ common_log(LOG_INFO, "Looking up location for $lat $lon from georss point");
+ return Location::fromLatLon($lat, $lon);
+ }
+ }
+ common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
+ return null;
+ }
+}
+
+/**
+ * An activity in the ActivityStrea.ms world
+ *
+ * An activity is kind of like a sentence: someone did something
+ * to something else.
+ *
+ * 'someone' is the 'actor'; 'did something' is the verb;
+ * 'something else' is the object.
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class Activity
+{
+ const SPEC = 'http://activitystrea.ms/spec/1.0/';
+ const SCHEMA = 'http://activitystrea.ms/schema/1.0/';
+
+ const VERB = 'verb';
+ const OBJECT = 'object';
+ const ACTOR = 'actor';
+ const SUBJECT = 'subject';
+ const OBJECTTYPE = 'object-type';
+ const CONTEXT = 'context';
+ const TARGET = 'target';
+
+ const ATOM = 'http://www.w3.org/2005/Atom';
+
+ const AUTHOR = 'author';
+ const PUBLISHED = 'published';
+ const UPDATED = 'updated';
+
+ public $actor; // an ActivityObject
+ public $verb; // a string (the URL)
+ public $object; // an ActivityObject
+ public $target; // an ActivityObject
+ public $context; // an ActivityObject
+ public $time; // Time of the activity
+ public $link; // an ActivityObject
+ public $entry; // the source entry
+ public $feed; // the source feed
+
+ public $summary; // summary of activity
+ public $content; // HTML content of activity
+ public $id; // ID of the activity
+ public $title; // title of the activity
+ public $categories = array(); // list of AtomCategory objects
+ public $enclosures = array(); // list of enclosure URL references
+
+ /**
+ * Turns a regular old Atom <entry> into a magical activity
+ *
+ * @param DOMElement $entry Atom entry to poke at
+ * @param DOMElement $feed Atom feed, for context
+ */
+
+ function __construct($entry = null, $feed = null)
+ {
+ if (is_null($entry)) {
+ return;
+ }
+
+ $this->entry = $entry;
+
+ // @fixme Don't send in a DOMDocument
+ if ($feed instanceof DOMDocument) {
+ common_log(
+ LOG_WARNING,
+ 'Activity::__construct() - '
+ . 'DOMDocument passed in for feed by mistake. '
+ . "Expecting a 'feed' DOMElement."
+ );
+ $feed = $feed->getElementsByTagName('feed')->item(0);
+ }
+
+ $this->feed = $feed;
+
+ $pubEl = $this->_child($entry, self::PUBLISHED, self::ATOM);
+
+ if (!empty($pubEl)) {
+ $this->time = strtotime($pubEl->textContent);
+ } else {
+ // XXX technically an error; being liberal. Good idea...?
+ $updateEl = $this->_child($entry, self::UPDATED, self::ATOM);
+ if (!empty($updateEl)) {
+ $this->time = strtotime($updateEl->textContent);
+ } else {
+ $this->time = null;
+ }
+ }
+
+ $this->link = ActivityUtils::getPermalink($entry);
+
+ $verbEl = $this->_child($entry, self::VERB);
+
+ if (!empty($verbEl)) {
+ $this->verb = trim($verbEl->textContent);
+ } else {
+ $this->verb = ActivityVerb::POST;
+ // XXX: do other implied stuff here
+ }
+
+ $objectEl = $this->_child($entry, self::OBJECT);
+
+ if (!empty($objectEl)) {
+ $this->object = new ActivityObject($objectEl);
+ } else {
+ $this->object = new ActivityObject($entry);
+ }
+
+ $actorEl = $this->_child($entry, self::ACTOR);
+
+ if (!empty($actorEl)) {
+
+ $this->actor = new ActivityObject($actorEl);
+
+ } else if (!empty($feed) &&
+ $subjectEl = $this->_child($feed, self::SUBJECT)) {
+
+ $this->actor = new ActivityObject($subjectEl);
+
+ } else if ($authorEl = $this->_child($entry, self::AUTHOR, self::ATOM)) {
+
+ $this->actor = new ActivityObject($authorEl);
+
+ } else if (!empty($feed) && $authorEl = $this->_child($feed, self::AUTHOR,
+ self::ATOM)) {
+
+ $this->actor = new ActivityObject($authorEl);
+ }
+
+ $contextEl = $this->_child($entry, self::CONTEXT);
+
+ if (!empty($contextEl)) {
+ $this->context = new ActivityContext($contextEl);
+ } else {
+ $this->context = new ActivityContext($entry);
+ }
+
+ $targetEl = $this->_child($entry, self::TARGET);
+
+ if (!empty($targetEl)) {
+ $this->target = new ActivityObject($targetEl);
+ }
+
+ $this->summary = ActivityUtils::childContent($entry, 'summary');
+ $this->id = ActivityUtils::childContent($entry, 'id');
+ $this->content = ActivityUtils::getContent($entry);
+
+ $catEls = $entry->getElementsByTagNameNS(self::ATOM, 'category');
+ if ($catEls) {
+ for ($i = 0; $i < $catEls->length; $i++) {
+ $catEl = $catEls->item($i);
+ $this->categories[] = new AtomCategory($catEl);
+ }
+ }
+
+ foreach (ActivityUtils::getLinks($entry, 'enclosure') as $link) {
+ $this->enclosures[] = $link->getAttribute('href');
+ }
+ }
+
+ /**
+ * Returns an Atom <entry> based on this activity
+ *
+ * @return DOMElement Atom entry
+ */
+
+ function toAtomEntry()
+ {
+ return null;
+ }
+
+ function asString($namespace=false)
+ {
+ $xs = new XMLStringer(true);
+
+ if ($namespace) {
+ $attrs = array('xmlns' => 'http://www.w3.org/2005/Atom',
+ 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
+ 'xmlns:georss' => 'http://www.georss.org/georss',
+ 'xmlns:ostatus' => 'http://ostatus.org/schema/1.0',
+ 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
+ 'xmlns:media' => 'http://purl.org/syndication/atommedia');
+ } else {
+ $attrs = array();
+ }
+
+ $xs->elementStart('entry', $attrs);
+
+ $xs->element('id', null, $this->id);
+ $xs->element('title', null, $this->title);
+ $xs->element('published', null, common_date_iso8601($this->time));
+ $xs->element('content', array('type' => 'html'), $this->content);
+
+ if (!empty($this->summary)) {
+ $xs->element('summary', null, $this->summary);
+ }
+
+ if (!empty($this->link)) {
+ $xs->element('link', array('rel' => 'alternate',
+ 'type' => 'text/html'),
+ $this->link);
+ }
+
+ // XXX: add context
+
+ $xs->elementStart('author');
+ $xs->element('uri', array(), $this->actor->id);
+ if ($this->actor->title) {
+ $xs->element('name', array(), $this->actor->title);
+ }
+ $xs->elementEnd('author');
+ $xs->raw($this->actor->asString('activity:actor'));
+
+ $xs->element('activity:verb', null, $this->verb);
+
+ if ($this->object) {
+ $xs->raw($this->object->asString());
+ }
+
+ if ($this->target) {
+ $xs->raw($this->target->asString('activity:target'));
+ }
+
+ foreach ($this->categories as $cat) {
+ $xs->raw($cat->asString());
+ }
+
+ $xs->elementEnd('entry');
+
+ return $xs->getString();
+ }
+
+ private function _child($element, $tag, $namespace=self::SPEC)
+ {
+ return ActivityUtils::child($element, $tag, $namespace);
+ }
+}
+
+class AtomCategory
+{
+ public $term;
+ public $scheme;
+ public $label;
+
+ function __construct($element=null)
+ {
+ if ($element && $element->attributes) {
+ $this->term = $this->extract($element, 'term');
+ $this->scheme = $this->extract($element, 'scheme');
+ $this->label = $this->extract($element, 'label');
+ }
+ }
+
+ protected function extract($element, $attrib)
+ {
+ $node = $element->attributes->getNamedItemNS(Activity::ATOM, $attrib);
+ if ($node) {
+ return trim($node->textContent);
+ }
+ $node = $element->attributes->getNamedItem($attrib);
+ if ($node) {
+ return trim($node->textContent);
+ }
+ return null;
+ }
+
+ function asString()
+ {
+ $attribs = array();
+ if ($this->term !== null) {
+ $attribs['term'] = $this->term;
+ }
+ if ($this->scheme !== null) {
+ $attribs['scheme'] = $this->scheme;
+ }
+ if ($this->label !== null) {
+ $attribs['label'] = $this->label;
+ }
+ $xs = new XMLStringer();
+ $xs->element('category', $attribs);
+ return $xs->asString();
+ }
+}
diff --git a/lib/adminpanelaction.php b/lib/adminpanelaction.php
index f05627b31..a927e2333 100644
--- a/lib/adminpanelaction.php
+++ b/lib/adminpanelaction.php
@@ -69,6 +69,7 @@ class AdminPanelAction extends Action
// User must be logged in.
if (!common_logged_in()) {
+ // TRANS: Client error message
$this->clientError(_('Not logged in.'));
return false;
}
@@ -93,6 +94,7 @@ class AdminPanelAction extends Action
// User must have the right to change admin settings
if (!$user->hasRight(Right::CONFIGURESITE)) {
+ // TRANS: Client error message
$this->clientError(_('You cannot make changes to this site.'));
return false;
}
@@ -103,7 +105,8 @@ class AdminPanelAction extends Action
$name = mb_substr($name, 0, -10);
- if (!in_array($name, common_config('admin', 'panels'))) {
+ if (!self::canAdmin($name)) {
+ // TRANS: Client error message
$this->clientError(_('Changes to that panel are not allowed.'), 403);
return false;
}
@@ -134,6 +137,7 @@ class AdminPanelAction extends Action
Config::loadSettings();
$this->success = true;
+ // TRANS: Message after successful saving of administrative settings.
$this->msg = _('Settings saved.');
} catch (Exception $e) {
$this->success = false;
@@ -172,6 +176,24 @@ class AdminPanelAction extends Action
}
/**
+ * Show content block. Overrided just to add a special class
+ * to the content div to allow styling.
+ *
+ * @return nothing
+ */
+ function showContentBlock()
+ {
+ $this->elementStart('div', array('id' => 'content', 'class' => 'admin'));
+ $this->showPageTitle();
+ $this->showPageNoticeBlock();
+ $this->elementStart('div', array('id' => 'content_inner'));
+ // show the actual content (forms, lists, whatever)
+ $this->showContent();
+ $this->elementEnd('div');
+ $this->elementEnd('div');
+ }
+
+ /**
* show human-readable instructions for the page, or
* a success/failure on save.
*
@@ -203,6 +225,7 @@ class AdminPanelAction extends Action
function showForm()
{
+ // TRANS: Client error message
$this->clientError(_('showForm() not implemented.'));
return;
}
@@ -232,6 +255,7 @@ class AdminPanelAction extends Action
function saveSettings()
{
+ // TRANS: Client error message
$this->clientError(_('saveSettings() not implemented.'));
return;
}
@@ -255,6 +279,7 @@ class AdminPanelAction extends Action
$result = $config->delete();
if (!$result) {
common_log_db_error($config, 'DELETE', __FILE__);
+ // TRANS: Client error message
$this->clientError(_("Unable to delete design setting."));
return null;
}
@@ -262,6 +287,17 @@ class AdminPanelAction extends Action
return $result;
}
+
+ function canAdmin($name)
+ {
+ $isOK = false;
+
+ if (Event::handle('AdminPanelCheck', array($name, &$isOK))) {
+ $isOK = in_array($name, common_config('admin', 'panels'));
+ }
+
+ return $isOK;
+ }
}
/**
@@ -307,34 +343,68 @@ class AdminPanelNav extends Widget
if (Event::handle('StartAdminPanelNav', array($this))) {
- if ($this->canAdmin('site')) {
- $this->out->menuItem(common_local_url('siteadminpanel'), _('Site'),
- _('Basic site configuration'), $action_name == 'siteadminpanel', 'nav_site_admin_panel');
+ if (AdminPanelAction::canAdmin('site')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Basic site configuration');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('siteadminpanel'), _m('MENU', 'Site'),
+ $menu_title, $action_name == 'siteadminpanel', 'nav_site_admin_panel');
}
- if ($this->canAdmin('design')) {
- $this->out->menuItem(common_local_url('designadminpanel'), _('Design'),
- _('Design configuration'), $action_name == 'designadminpanel', 'nav_design_admin_panel');
+ if (AdminPanelAction::canAdmin('design')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Design configuration');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('designadminpanel'), _m('MENU', 'Design'),
+ $menu_title, $action_name == 'designadminpanel', 'nav_design_admin_panel');
}
- if ($this->canAdmin('user')) {
+ if (AdminPanelAction::canAdmin('user')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('User configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('useradminpanel'), _('User'),
- _('User configuration'), $action_name == 'useradminpanel', 'nav_design_admin_panel');
+ $menu_title, $action_name == 'useradminpanel', 'nav_user_admin_panel');
}
- if ($this->canAdmin('access')) {
+ if (AdminPanelAction::canAdmin('access')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Access configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('accessadminpanel'), _('Access'),
- _('Access configuration'), $action_name == 'accessadminpanel', 'nav_design_admin_panel');
+ $menu_title, $action_name == 'accessadminpanel', 'nav_access_admin_panel');
}
- if ($this->canAdmin('paths')) {
+ if (AdminPanelAction::canAdmin('paths')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Paths configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('pathsadminpanel'), _('Paths'),
- _('Paths configuration'), $action_name == 'pathsadminpanel', 'nav_design_admin_panel');
+ $menu_title, $action_name == 'pathsadminpanel', 'nav_paths_admin_panel');
}
- if ($this->canAdmin('sessions')) {
+ if (AdminPanelAction::canAdmin('sessions')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Sessions configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('sessionsadminpanel'), _('Sessions'),
- _('Sessions configuration'), $action_name == 'sessionsadminpanel', 'nav_design_admin_panel');
+ $menu_title, $action_name == 'sessionsadminpanel', 'nav_sessions_admin_panel');
+ }
+
+ if (AdminPanelAction::canAdmin('sitenotice')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Edit site notice');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('sitenoticeadminpanel'), _('Site notice'),
+ $menu_title, $action_name == 'sitenoticeadminpanel', 'nav_sitenotice_admin_panel');
+ }
+
+ if (AdminPanelAction::canAdmin('snapshot')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Snapshots configuration');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('snapshotadminpanel'), _('Snapshots'),
+ $menu_title, $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
}
Event::handle('EndAdminPanelNav', array($this));
@@ -342,8 +412,4 @@ class AdminPanelNav extends Widget
$this->action->elementEnd('ul');
}
- function canAdmin($name)
- {
- return in_array($name, common_config('admin', 'panels'));
- }
}
diff --git a/lib/api.php b/lib/apiaction.php
index 9000fb4ba..e4a1df3d1 100644
--- a/lib/api.php
+++ b/lib/apiaction.php
@@ -63,7 +63,6 @@ class ApiAction extends Action
var $count = null;
var $max_id = null;
var $since_id = null;
- var $since = null;
var $access = self::READ_ONLY; // read (default) or read-write
@@ -85,7 +84,10 @@ class ApiAction extends Action
$this->count = (int)$this->arg('count', 20);
$this->max_id = (int)$this->arg('max_id', 0);
$this->since_id = (int)$this->arg('since_id', 0);
- $this->since = $this->arg('since');
+
+ if ($this->arg('since')) {
+ header('X-StatusNet-Warning: since parameter is disabled; use since_id');
+ }
return true;
}
@@ -359,7 +361,7 @@ class ApiAction extends Action
$entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
$entry['published'] = common_date_iso8601($notice->created);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$entry['id'] = "tag:$taguribase:$entry[link]";
$entry['updated'] = $entry['published'];
@@ -803,7 +805,7 @@ class ApiAction extends Action
$entry['link'] = common_local_url('showmessage', array('message' => $message->id));
$entry['published'] = common_date_iso8601($message->created);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$entry['id'] = "tag:$taguribase:$entry[link]";
$entry['updated'] = $entry['published'];
@@ -1219,7 +1221,12 @@ class ApiAction extends Action
return User_group::staticGet($this->arg('id'));
} else if ($this->arg('id')) {
$nickname = common_canonical_nickname($this->arg('id'));
- return User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if (empty($local)) {
+ return null;
+ } else {
+ return User_group::staticGet('id', $local->id);
+ }
} else if ($this->arg('group_id')) {
// This is to ensure that a non-numeric user_id still
// overrides screen_name even if it doesn't get used
@@ -1228,14 +1235,24 @@ class ApiAction extends Action
}
} else if ($this->arg('group_name')) {
$nickname = common_canonical_nickname($this->arg('group_name'));
- return User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if (empty($local)) {
+ return null;
+ } else {
+ return User_group::staticGet('id', $local->id);
+ }
}
} else if (is_numeric($id)) {
return User_group::staticGet($id);
} else {
$nickname = common_canonical_nickname($id);
- return User_group::staticGet('nickname', $nickname);
+ $local = Local_group::staticGet('nickname', $nickname);
+ if (empty($local)) {
+ return null;
+ } else {
+ return User_group::staticGet('id', $local->group_id);
+ }
}
}
@@ -1311,8 +1328,6 @@ class ApiAction extends Action
case 'max_id':
$max_id = (int)$this->args['max_id'];
return ($max_id < 1) ? 0 : $max_id;
- case 'since':
- return strtotime($this->args['since']);
default:
return parent::arg($key, $def);
}
diff --git a/lib/apiauth.php b/lib/apiauth.php
index 25e2196cf..5090871cf 100644
--- a/lib/apiauth.php
+++ b/lib/apiauth.php
@@ -38,7 +38,6 @@ if (!defined('STATUSNET')) {
exit(1);
}
-require_once INSTALLDIR . '/lib/api.php';
require_once INSTALLDIR . '/lib/apioauth.php';
/**
diff --git a/lib/atom10entry.php b/lib/atom10entry.php
deleted file mode 100644
index 5710c80fc..000000000
--- a/lib/atom10entry.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Class for building / manipulating an Atom entry in memory
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category Feed
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET')
-{
- exit(1);
-}
-
-class Atom10EntryException extends Exception
-{
-}
-
-/**
- * Class for manipulating an Atom entry in memory. Get the entry as an XML
- * string with Atom10Entry::getString().
- *
- * @category Feed
- * @package StatusNet
- * @author Zach Copley <zach@status.net>
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-class Atom10Entry extends XMLStringer
-{
- private $namespaces;
- private $categories;
- private $content;
- private $contributors;
- private $id;
- private $links;
- private $published;
- private $rights;
- private $source;
- private $summary;
- private $title;
-
- function __construct($indent = true) {
- parent::__construct($indent);
- $this->namespaces = array();
- }
-
- function addNamespace($namespace, $uri)
- {
- $ns = array($namespace => $uri);
- $this->namespaces = array_merge($this->namespaces, $ns);
- }
-
- function initEntry()
- {
-
- }
-
- function endEntry()
- {
-
- }
-
- /**
- * Check that all required elements have been set, etc.
- * Throws an Atom10EntryException if something's missing.
- *
- * @return void
- */
- function validate
- {
-
- }
-
- function getString()
- {
- $this->validate();
-
- $this->initEntry();
- $this->renderEntries();
- $this->endEntry();
-
- return $this->xw->outputMemory();
- }
-
-} \ No newline at end of file
diff --git a/lib/atom10feed.php b/lib/atom10feed.php
index 14a3beb83..2d342e785 100644
--- a/lib/atom10feed.php
+++ b/lib/atom10feed.php
@@ -49,6 +49,8 @@ class Atom10FeedException extends Exception
class Atom10Feed extends XMLStringer
{
public $xw;
+
+ // @fixme most of these should probably be read-only properties
private $namespaces;
private $authors;
private $subject;
@@ -57,10 +59,12 @@ class Atom10Feed extends XMLStringer
private $generator;
private $icon;
private $links;
- private $logo;
+ private $selfLink;
+ private $selfLinkType;
+ public $logo;
private $rights;
- private $subtitle;
- private $title;
+ public $subtitle;
+ public $title;
private $published;
private $updated;
private $entries;
@@ -78,7 +82,7 @@ class Atom10Feed extends XMLStringer
$this->authors = array();
$this->links = array();
$this->entries = array();
- $this->addNamespace('xmlns', 'http://www.w3.org/2005/Atom');
+ $this->addNamespace('', 'http://www.w3.org/2005/Atom');
}
/**
@@ -109,11 +113,11 @@ class Atom10Feed extends XMLStringer
);
}
- if (!is_null($uri)) {
+ if (isset($uri)) {
$xs->element('uri', null, $uri);
}
- if (!is_null(email)) {
+ if (isset($email)) {
$xs->element('email', null, $email);
}
@@ -162,9 +166,24 @@ class Atom10Feed extends XMLStringer
{
$this->xw->startDocument('1.0', 'UTF-8');
$commonAttrs = array('xml:lang' => 'en-US');
- $commonAttrs = array_merge($commonAttrs, $this->namespaces);
+ foreach ($this->namespaces as $prefix => $uri) {
+ if ($prefix == '') {
+ $attr = 'xmlns';
+ } else {
+ $attr = 'xmlns:' . $prefix;
+ }
+ $commonAttrs[$attr] = $uri;
+ }
$this->elementStart('feed', $commonAttrs);
+ $this->element(
+ 'generator', array(
+ 'url' => 'http://status.net',
+ 'version' => STATUSNET_VERSION
+ ),
+ 'StatusNet'
+ );
+
$this->element('id', null, $this->id);
$this->element('title', null, $this->title);
$this->element('subtitle', null, $this->subtitle);
@@ -177,6 +196,10 @@ class Atom10Feed extends XMLStringer
$this->renderAuthors();
+ if ($this->selfLink) {
+ $this->addLink($this->selfLink, array('rel' => 'self',
+ 'type' => $this->selfLinkType));
+ }
$this->renderLinks();
}
@@ -246,6 +269,12 @@ class Atom10Feed extends XMLStringer
$this->id = $id;
}
+ function setSelfLink($url, $type='application/atom+xml')
+ {
+ $this->selfLink = $url;
+ $this->selfLinkType = $type;
+ }
+
function setTitle($title)
{
$this->title = $title;
diff --git a/lib/atomgroupnoticefeed.php b/lib/atomgroupnoticefeed.php
index 52ee4c7d6..08c1c707c 100644
--- a/lib/atomgroupnoticefeed.php
+++ b/lib/atomgroupnoticefeed.php
@@ -49,14 +49,42 @@ class AtomGroupNoticeFeed extends AtomNoticeFeed
/**
* Constructor
*
- * @param Group $group the group for the feed (optional)
+ * @param Group $group the group for the feed
* @param boolean $indent flag to turn indenting on or off
*
* @return void
*/
- function __construct($group = null, $indent = true) {
+ function __construct($group, $indent = true) {
parent::__construct($indent);
$this->group = $group;
+
+ $title = sprintf(_("%s timeline"), $group->nickname);
+ $this->setTitle($title);
+
+ $sitename = common_config('site', 'name');
+ $subtitle = sprintf(
+ _('Updates from %1$s on %2$s!'),
+ $group->nickname,
+ $sitename
+ );
+ $this->setSubtitle($subtitle);
+
+ $avatar = $group->homepage_logo;
+ $logo = ($avatar) ? $avatar : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
+ $this->setLogo($logo);
+
+ $this->setUpdated('now');
+
+ $self = common_local_url('ApiTimelineGroup',
+ array('id' => $group->id,
+ 'format' => 'atom'));
+ $this->setId($self);
+ $this->setSelfLink($self);
+
+ $this->addAuthorRaw($group->asAtomAuthor());
+ $this->setActivitySubject($group->asActivitySubject());
+
+ $this->addLink($group->homeUrl());
}
function getGroup()
diff --git a/lib/atomnoticefeed.php b/lib/atomnoticefeed.php
index b7a60bde6..e4df731fe 100644
--- a/lib/atomnoticefeed.php
+++ b/lib/atomnoticefeed.php
@@ -50,23 +50,33 @@ class AtomNoticeFeed extends Atom10Feed
// Feeds containing notice info use these namespaces
$this->addNamespace(
- 'xmlns:thr',
+ 'thr',
'http://purl.org/syndication/thread/1.0'
);
$this->addNamespace(
- 'xmlns:georss',
+ 'georss',
'http://www.georss.org/georss'
);
$this->addNamespace(
- 'xmlns:activity',
+ 'activity',
'http://activitystrea.ms/spec/1.0/'
);
+ $this->addNamespace(
+ 'media',
+ 'http://purl.org/syndication/atommedia'
+ );
+
+ $this->addNamespace(
+ 'poco',
+ 'http://portablecontacts.net/spec/1.0'
+ );
+
// XXX: What should the uri be?
$this->addNamespace(
- 'xmlns:ostatus',
+ 'ostatus',
'http://ostatus.org/schema/1.0'
);
}
@@ -97,9 +107,19 @@ class AtomNoticeFeed extends Atom10Feed
*/
function addEntryFromNotice($notice)
{
- $this->addEntryRaw($notice->asAtomEntry());
- }
+ $source = $this->showSource();
+ $author = $this->showAuthor();
-}
+ $this->addEntryRaw($notice->asAtomEntry(false, $source, $author));
+ }
+ function showSource()
+ {
+ return true;
+ }
+ function showAuthor()
+ {
+ return true;
+ }
+}
diff --git a/lib/atomusernoticefeed.php b/lib/atomusernoticefeed.php
index 9f224325c..428cc2de2 100644
--- a/lib/atomusernoticefeed.php
+++ b/lib/atomusernoticefeed.php
@@ -49,18 +49,71 @@ class AtomUserNoticeFeed extends AtomNoticeFeed
/**
* Constructor
*
- * @param User $user the user for the feed (optional)
+ * @param User $user the user for the feed
* @param boolean $indent flag to turn indenting on or off
*
* @return void
*/
- function __construct($user = null, $indent = true) {
+
+ function __construct($user, $indent = true) {
parent::__construct($indent);
$this->user = $user;
+ if (!empty($user)) {
+ $profile = $user->getProfile();
+ $this->addAuthor($profile->nickname, $user->uri);
+ $this->setActivitySubject($profile->asActivityNoun('subject'));
+ }
+
+ $title = sprintf(_("%s timeline"), $user->nickname);
+ $this->setTitle($title);
+
+ $sitename = common_config('site', 'name');
+ $subtitle = sprintf(
+ _('Updates from %1$s on %2$s!'),
+ $user->nickname, $sitename
+ );
+ $this->setSubtitle($subtitle);
+
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
+ $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $this->setLogo($logo);
+
+ $this->setUpdated('now');
+
+ $this->addLink(
+ common_local_url(
+ 'showstream',
+ array('nickname' => $user->nickname)
+ )
+ );
+
+ $self = common_local_url('ApiTimelineUser',
+ array('id' => $user->id,
+ 'format' => 'atom'));
+ $this->setId($self);
+ $this->setSelfLink($self);
+
+ $this->addLink(
+ common_local_url('sup', null, null, $user->id),
+ array(
+ 'rel' => 'http://api.friendfeed.com/2008/03#sup',
+ 'type' => 'application/json'
+ )
+ );
}
function getUser()
{
return $this->user;
}
+
+ function showSource()
+ {
+ return false;
+ }
+
+ function showAuthor()
+ {
+ return false;
+ }
}
diff --git a/lib/authenticationplugin.php b/lib/authenticationplugin.php
index 5be3ea5b9..0a3763e2e 100644
--- a/lib/authenticationplugin.php
+++ b/lib/authenticationplugin.php
@@ -79,7 +79,7 @@ abstract class AuthenticationPlugin extends Plugin
$nickname = $username;
}
$registration_data = array();
- $registration_data['nickname'] = $nickname ;
+ $registration_data['nickname'] = $nickname;
return User::register($registration_data);
}
@@ -101,12 +101,14 @@ abstract class AuthenticationPlugin extends Plugin
* Used during autoregistration
* Useful if your usernames are ugly, and you want to suggest
* nice looking nicknames when users initially sign on
+ * All nicknames returned by this function should be valid
+ * implementations may want to use common_nicknamize() to ensure validity
* @param username
* @return string nickname
*/
function suggestNicknameForUsername($username)
{
- return $username;
+ return common_nicknamize($username);
}
//------------Below are the methods that connect StatusNet to the implementing Auth plugin------------\\
@@ -129,7 +131,7 @@ abstract class AuthenticationPlugin extends Plugin
$test_user = User::staticGet('nickname', $suggested_nickname);
if($test_user) {
//someone already exists with the suggested nickname, so used the passed nickname
- $suggested_nickname = $nickname;
+ $suggested_nickname = common_nicknamize($nickname);
}
$test_user = User::staticGet('nickname', $suggested_nickname);
if($test_user) {
diff --git a/lib/authorizationplugin.php b/lib/authorizationplugin.php
index 733b0c065..07da9b2d1 100644
--- a/lib/authorizationplugin.php
+++ b/lib/authorizationplugin.php
@@ -85,7 +85,7 @@ abstract class AuthorizationPlugin extends Plugin
}
function onStartSetApiUser(&$user) {
- return $this->onStartSetUser(&$user);
+ return $this->onStartSetUser($user);
}
function onStartHasRole($profile, $name, &$has_role) {
diff --git a/lib/command.php b/lib/command.php
index 2a51fd687..db8e80030 100644
--- a/lib/command.php
+++ b/lib/command.php
@@ -548,12 +548,19 @@ class SubCommand extends Command
return;
}
- $result = subs_subscribe_user($this->user, $this->other);
+ $otherUser = User::staticGet('nickname', $this->other);
- if ($result == 'true') {
+ if (empty($otherUser)) {
+ $channel->error($this->user, _('No such user'));
+ return;
+ }
+
+ try {
+ Subscription::start($this->user->getProfile(),
+ $otherUser->getProfile());
$channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other));
- } else {
- $channel->error($this->user, $result);
+ } catch (Exception $e) {
+ $channel->error($this->user, $e->getMessage());
}
}
}
@@ -576,12 +583,18 @@ class UnsubCommand extends Command
return;
}
- $result=subs_unsubscribe_user($this->user, $this->other);
+ $otherUser = User::staticGet('nickname', $this->other);
- if ($result) {
+ if (empty($otherUser)) {
+ $channel->error($this->user, _('No such user'));
+ }
+
+ try {
+ Subscription::cancel($this->user->getProfile(),
+ $otherUser->getProfile());
$channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other));
- } else {
- $channel->error($this->user, $result);
+ } catch (Exception $e) {
+ $channel->error($this->user, $e->getMessage());
}
}
}
@@ -655,6 +668,34 @@ class LoginCommand extends Command
}
}
+class LoseCommand extends Command
+{
+
+ var $other = null;
+
+ function __construct($user, $other)
+ {
+ parent::__construct($user);
+ $this->other = $other;
+ }
+
+ function execute($channel)
+ {
+ if(!$this->other) {
+ $channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
+ return;
+ }
+
+ $result=subs_unsubscribe_from($this->user, $this->other);
+
+ if ($result) {
+ $channel->output($this->user, sprintf(_('Unsubscribed %s'), $this->other));
+ } else {
+ $channel->error($this->user, $result);
+ }
+ }
+}
+
class SubscriptionsCommand extends Command
{
function execute($channel)
@@ -737,6 +778,7 @@ class HelpCommand extends Command
"d <nickname> <text> - direct message to user\n".
"get <nickname> - get last notice from user\n".
"whois <nickname> - get profile info on user\n".
+ "lose <nickname> - force user to stop following you\n".
"fav <nickname> - add user's last notice as a 'fave'\n".
"fav #<notice_id> - add notice with the given id as a 'fave'\n".
"repeat #<notice_id> - repeat a notice with a given id\n".
diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php
index c2add7299..fbc6174bb 100644
--- a/lib/commandinterpreter.php
+++ b/lib/commandinterpreter.php
@@ -47,6 +47,17 @@ class CommandInterpreter
} else {
return new LoginCommand($user);
}
+ case 'lose':
+ if ($arg) {
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ return null;
+ } else {
+ return new LoseCommand($user, $other);
+ }
+ } else {
+ return null;
+ }
case 'subscribers':
if ($arg) {
return null;
diff --git a/lib/common.php b/lib/common.php
index b95cd1175..047dc5a7b 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -22,7 +22,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
//exit with 200 response, if this is checking fancy from the installer
if (isset($_REQUEST['p']) && $_REQUEST['p'] == 'check-fancy') { exit; }
-define('STATUSNET_VERSION', '0.9.0beta5');
+define('STATUSNET_VERSION', '0.9.0');
define('LACONICA_VERSION', STATUSNET_VERSION); // compatibility
define('STATUSNET_CODENAME', 'Stand');
@@ -71,6 +71,7 @@ if (!function_exists('dl')) {
# global configuration object
require_once('PEAR.php');
+require_once('PEAR/Exception.php');
require_once('DB/DataObject.php');
require_once('DB/DataObject/Cast.php'); # for dates
@@ -123,10 +124,22 @@ require_once INSTALLDIR.'/lib/util.php';
require_once INSTALLDIR.'/lib/action.php';
require_once INSTALLDIR.'/lib/mail.php';
require_once INSTALLDIR.'/lib/subs.php';
+require_once INSTALLDIR.'/lib/activity.php';
require_once INSTALLDIR.'/lib/clientexception.php';
require_once INSTALLDIR.'/lib/serverexception.php';
+
+//set PEAR error handling to use regular PHP exceptions
+function PEAR_ErrorToPEAR_Exception($err)
+{
+ if ($err->getCode()) {
+ throw new PEAR_Exception($err->getMessage(), $err->getCode());
+ }
+ throw new PEAR_Exception($err->getMessage());
+}
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
+
try {
StatusNet::init(@$server, @$path, @$conffile);
} catch (NoConfigException $e) {
diff --git a/lib/default.php b/lib/default.php
index a9be3438b..f22d8b24a 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -40,7 +40,8 @@ $default =
'logdebug' => false,
'fancy' => false,
'locale_path' => INSTALLDIR.'/locale',
- 'language' => 'en_US',
+ 'language' => 'en',
+ 'langdetect' => true,
'languages' => get_all_languages(),
'email' =>
array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : null,
@@ -53,10 +54,11 @@ $default =
'ssl' => 'never',
'sslserver' => null,
'shorturllength' => 30,
- 'dupelimit' => 60, # default for same person saying the same thing
+ 'dupelimit' => 60, // default for same person saying the same thing
'textlimit' => 140,
'indent' => true,
- 'use_x_sendfile' => false
+ 'use_x_sendfile' => false,
+ 'notice' => null // site wide notice text
),
'db' =>
array('database' => 'YOU HAVE TO SET THIS IN config.php',
@@ -91,10 +93,13 @@ $default =
'spawndelay' => 1, // Wait at least N seconds between (re)spawns of child processes to avoid slamming the queue server with subscription startup
'debug_memory' => false, // true to spit memory usage to log
'inboxes' => true, // true to do inbox distribution & output queueing from in background via 'distrib' queue
- 'breakout' => array('*' => 'shared'), // set global or per-handler queue breakout
- // 'shared': use a shared queue for all sites
- // 'handler': share each/this handler over multiple sites
- // 'site': break out for each/this handler on this site
+ 'breakout' => array(), // List queue specifiers to break out when using Stomp queue.
+ // Default will share all queues for all sites within each group.
+ // Specify as <group>/<queue> or <group>/<queue>/<site>,
+ // using nickname identifier as site.
+ //
+ // 'main/distrib' separate "distrib" queue covering all sites
+ // 'xmpp/xmppout/mysite' separate "xmppout" queue covering just 'mysite'
'max_retries' => 10, // drop messages after N failed attempts to process (Stomp)
'dead_letter_dir' => false, // set to directory to save dropped messages into (Stomp)
),
@@ -172,10 +177,10 @@ $default =
array('enabled' => false),
'integration' =>
array('source' => 'StatusNet', # source attribute for Twitter
- 'taguri' => $_server.',2009'), # base for tag URIs
+ 'taguri' => null), # base for tag URIs
'twitter' =>
- array('enabled' => true,
- 'consumer_key' => null,
+ array('signin' => true,
+ 'consumer_key' => null,
'consumer_secret' => null),
'cache' =>
array('base' => null),
@@ -275,14 +280,13 @@ $default =
'TightUrl' => array('shortenerName' => '2tu.us', 'freeService' => true,'serviceUrl'=>'http://2tu.us/?save=y&url=%1$s'),
'Geonames' => null,
'Mapstraction' => null,
- 'Linkback' => null,
+ 'OStatus' => null,
'WikiHashtags' => null,
- 'PubSubHubBub' => null,
'RSSCloud' => null,
'OpenID' => null),
),
'admin' =>
- array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions')),
+ array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice')),
'singleuser' =>
array('enabled' => false,
'nickname' => null),
diff --git a/lib/distribqueuehandler.php b/lib/distribqueuehandler.php
index 4477468d0..d2be7a92c 100644
--- a/lib/distribqueuehandler.php
+++ b/lib/distribqueuehandler.php
@@ -63,31 +63,7 @@ class DistribQueueHandler
// XXX: do we need to change this for remote users?
try {
- $notice->saveTags();
- } catch (Exception $e) {
- $this->logit($notice, $e);
- }
-
- try {
- $groups = $notice->saveGroups();
- } catch (Exception $e) {
- $this->logit($notice, $e);
- }
-
- try {
- $recipients = $notice->saveReplies();
- } catch (Exception $e) {
- $this->logit($notice, $e);
- }
-
- try {
- $notice->addToInboxes($groups, $recipients);
- } catch (Exception $e) {
- $this->logit($notice, $e);
- }
-
- try {
- $notice->saveUrls();
+ $notice->addToInboxes();
} catch (Exception $e) {
$this->logit($notice, $e);
}
@@ -107,7 +83,7 @@ class DistribQueueHandler
return true;
}
-
+
protected function logit($notice, $e)
{
common_log(LOG_ERR, "Distrib queue exception saving notice $notice->id: " .
diff --git a/lib/grantroleform.php b/lib/grantroleform.php
new file mode 100644
index 000000000..b5f952746
--- /dev/null
+++ b/lib/grantroleform.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Form for granting a role
+ *
+ * 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 Form
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>, Brion Vibber <brion@status.net>
+ * @copyright 2009-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);
+}
+
+/**
+ * Form for sandboxing a user
+ *
+ * @category Form
+ * @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 UnSandboxForm
+ */
+
+class GrantRoleForm extends ProfileActionForm
+{
+ function __construct($role, $label, $writer, $profile, $r2args)
+ {
+ parent::__construct($writer, $profile, $r2args);
+ $this->role = $role;
+ $this->label = $label;
+ }
+
+ /**
+ * Action this form provides
+ *
+ * @return string Name of the action, lowercased.
+ */
+
+ function target()
+ {
+ return 'grantrole';
+ }
+
+ /**
+ * Title of the form
+ *
+ * @return string Title of the form, internationalized
+ */
+
+ function title()
+ {
+ return $this->label;
+ }
+
+ function formData()
+ {
+ parent::formData();
+ $this->out->hidden('role', $this->role);
+ }
+
+ /**
+ * Description of the form
+ *
+ * @return string description of the form, internationalized
+ */
+
+ function description()
+ {
+ return sprintf(_('Grant this user the "%s" role'), $this->label);
+ }
+}
diff --git a/lib/imagefile.php b/lib/imagefile.php
index 6bc8e599b..7b0479455 100644
--- a/lib/imagefile.php
+++ b/lib/imagefile.php
@@ -99,6 +99,10 @@ class ImageFile
if ($info[2] !== IMAGETYPE_GIF &&
$info[2] !== IMAGETYPE_JPEG &&
+ $info[2] !== IMAGETYPE_BMP &&
+ $info[2] !== IMAGETYPE_WBMP &&
+ $info[2] !== IMAGETYPE_XBM &&
+ $info[2] !== IMAGETYPE_XPM &&
$info[2] !== IMAGETYPE_PNG) {
@unlink($_FILES[$param]['tmp_name']);
@@ -146,6 +150,18 @@ class ImageFile
case IMAGETYPE_PNG:
$image_src = imagecreatefrompng($this->filepath);
break;
+ case IMAGETYPE_BMP:
+ $image_src = imagecreatefrombmp($this->filepath);
+ break;
+ case IMAGETYPE_WBMP:
+ $image_src = imagecreatefromwbmp($this->filepath);
+ break;
+ case IMAGETYPE_XBM:
+ $image_src = imagecreatefromxbm($this->filepath);
+ break;
+ case IMAGETYPE_XPM:
+ $image_src = imagecreatefromxpm($this->filepath);
+ break;
default:
throw new Exception(_('Unknown file type'));
return;
@@ -153,7 +169,7 @@ class ImageFile
$image_dest = imagecreatetruecolor($size, $size);
- if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG) {
+ if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG || $this->type == IMAGETYPE_BMP) {
$transparent_idx = imagecolortransparent($image_src);
@@ -176,6 +192,24 @@ class ImageFile
imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h);
+ if($this->type == IMAGETYPE_BMP) {
+ //we don't want to save BMP... it's an inefficient, rare, antiquated format
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_WBMP) {
+ //we don't want to save WBMP... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_XBM) {
+ //we don't want to save XBM... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_XPM) {
+ //we don't want to save XPM... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ }
+
$outname = Avatar::filename($this->id,
image_type_to_extension($this->type),
$size,
@@ -245,4 +279,101 @@ class ImageFile
return $num;
}
-} \ No newline at end of file
+}
+
+//PHP doesn't (as of 2/24/2010) have an imagecreatefrombmp so conditionally define one
+if(!function_exists('imagecreatefrombmp')){
+ //taken shamelessly from http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214
+ function imagecreatefrombmp($p_sFile)
+ {
+ // Load the image into a string
+ $file = fopen($p_sFile,"rb");
+ $read = fread($file,10);
+ while(!feof($file)&&($read<>""))
+ $read .= fread($file,1024);
+
+ $temp = unpack("H*",$read);
+ $hex = $temp[1];
+ $header = substr($hex,0,108);
+
+ // Process the header
+ // Structure: http://www.fastgraph.com/help/bmp_header_format.html
+ if (substr($header,0,4)=="424d")
+ {
+ // Cut it in parts of 2 bytes
+ $header_parts = str_split($header,2);
+
+ // Get the width 4 bytes
+ $width = hexdec($header_parts[19].$header_parts[18]);
+
+ // Get the height 4 bytes
+ $height = hexdec($header_parts[23].$header_parts[22]);
+
+ // Unset the header params
+ unset($header_parts);
+ }
+
+ // Define starting X and Y
+ $x = 0;
+ $y = 1;
+
+ // Create newimage
+ $image = imagecreatetruecolor($width,$height);
+
+ // Grab the body from the image
+ $body = substr($hex,108);
+
+ // Calculate if padding at the end-line is needed
+ // Divided by two to keep overview.
+ // 1 byte = 2 HEX-chars
+ $body_size = (strlen($body)/2);
+ $header_size = ($width*$height);
+
+ // Use end-line padding? Only when needed
+ $usePadding = ($body_size>($header_size*3)+4);
+
+ // Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
+ // Calculate the next DWORD-position in the body
+ for ($i=0;$i<$body_size;$i+=3)
+ {
+ // Calculate line-ending and padding
+ if ($x>=$width)
+ {
+ // If padding needed, ignore image-padding
+ // Shift i to the ending of the current 32-bit-block
+ if ($usePadding)
+ $i += $width%4;
+
+ // Reset horizontal position
+ $x = 0;
+
+ // Raise the height-position (bottom-up)
+ $y++;
+
+ // Reached the image-height? Break the for-loop
+ if ($y>$height)
+ break;
+ }
+
+ // Calculation of the RGB-pixel (defined as BGR in image-data)
+ // Define $i_pos as absolute position in the body
+ $i_pos = $i*2;
+ $r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
+ $g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
+ $b = hexdec($body[$i_pos].$body[$i_pos+1]);
+
+ // Calculate and draw the pixel
+ $color = imagecolorallocate($image,$r,$g,$b);
+ imagesetpixel($image,$x,$height-$y,$color);
+
+ // Raise the horizontal position
+ $x++;
+ }
+
+ // Unset the body / free the memory
+ unset($body);
+
+ // Return image-object
+ return $image;
+ }
+}
diff --git a/lib/iomaster.php b/lib/iomaster.php
index 3745a5c7a..7cfb2c9a0 100644
--- a/lib/iomaster.php
+++ b/lib/iomaster.php
@@ -55,27 +55,18 @@ abstract class IoMaster
if ($multiSite !== null) {
$this->multiSite = $multiSite;
}
- if ($this->multiSite) {
- $this->sites = StatusNet::findAllSites();
- } else {
- $this->sites = array(StatusNet::currentSite());
- }
-
- if (empty($this->sites)) {
- throw new Exception("Empty status_network table, cannot init");
- }
- foreach ($this->sites as $site) {
- StatusNet::switchSite($site);
- $this->initManagers();
- }
+ $this->initManagers();
}
/**
- * Initialize IoManagers for the currently configured site
- * which are appropriate to this instance.
+ * Initialize IoManagers which are appropriate to this instance;
+ * pass class names or instances into $this->instantiate().
+ *
+ * If setup and configuration may vary between sites in multi-site
+ * mode, it's the subclass's responsibility to set them up here.
*
- * Pass class names into $this->instantiate()
+ * Switching site configurations is an acceptable side effect.
*/
abstract function initManagers();
diff --git a/lib/joinform.php b/lib/joinform.php
index aefb553aa..aa8bc20e2 100644
--- a/lib/joinform.php
+++ b/lib/joinform.php
@@ -100,7 +100,7 @@ class JoinForm extends Form
function action()
{
return common_local_url('joingroup',
- array('nickname' => $this->group->nickname));
+ array('id' => $this->group->id));
}
/**
diff --git a/lib/language.php b/lib/language.php
index f5ee7fac5..64b59e739 100644
--- a/lib/language.php
+++ b/lib/language.php
@@ -289,6 +289,7 @@ function get_all_languages() {
'ar' => array('q' => 0.8, 'lang' => 'ar', 'name' => 'Arabic', 'direction' => 'rtl'),
'arz' => array('q' => 0.8, 'lang' => 'arz', 'name' => 'Egyptian Spoken Arabic', 'direction' => 'rtl'),
'bg' => array('q' => 0.8, 'lang' => 'bg', 'name' => 'Bulgarian', 'direction' => 'ltr'),
+ 'br' => array('q' => 0.8, 'lang' => 'br', 'name' => 'Breton', 'direction' => 'ltr'),
'ca' => array('q' => 0.5, 'lang' => 'ca', 'name' => 'Catalan', 'direction' => 'ltr'),
'cs' => array('q' => 0.5, 'lang' => 'cs', 'name' => 'Czech', 'direction' => 'ltr'),
'de' => array('q' => 0.8, 'lang' => 'de', 'name' => 'German', 'direction' => 'ltr'),
diff --git a/lib/leaveform.php b/lib/leaveform.php
index e63d96ee8..5469b5704 100644
--- a/lib/leaveform.php
+++ b/lib/leaveform.php
@@ -100,7 +100,7 @@ class LeaveForm extends Form
function action()
{
return common_local_url('leavegroup',
- array('nickname' => $this->group->nickname));
+ array('id' => $this->group->id));
}
/**
diff --git a/lib/mediafile.php b/lib/mediafile.php
index e3d5b1dbc..10d90d008 100644
--- a/lib/mediafile.php
+++ b/lib/mediafile.php
@@ -262,7 +262,7 @@ class MediaFile
$filetype = MIME_Type::autoDetect($stream['uri']);
}
- if (in_array($filetype, common_config('attachments', 'supported'))) {
+ if (common_config('attachments', 'supported') === true || in_array($filetype, common_config('attachments', 'supported'))) {
return $filetype;
}
$media = MIME_Type::getMedia($filetype);
diff --git a/lib/messageform.php b/lib/messageform.php
index 0c568e1bd..b116964da 100644
--- a/lib/messageform.php
+++ b/lib/messageform.php
@@ -175,6 +175,6 @@ class MessageForm extends Form
'class' => 'submit',
'name' => 'message_send',
'type' => 'submit',
- 'value' => _('Send')));
+ 'value' => _m('Send button for sending notice', 'Send')));
}
}
diff --git a/lib/noticeform.php b/lib/noticeform.php
index 62df5c941..7278c41a9 100644
--- a/lib/noticeform.php
+++ b/lib/noticeform.php
@@ -233,6 +233,6 @@ class NoticeForm extends Form
'class' => 'submit',
'name' => 'status_submit',
'type' => 'submit',
- 'value' => _('Send')));
+ 'value' => _m('Send button for sending notice', 'Send')));
}
}
diff --git a/lib/noticelist.php b/lib/noticelist.php
index 837cb90fa..88a925241 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -380,12 +380,12 @@ class NoticeListItem extends Widget
function showNoticeLink()
{
- if($this->notice->is_local == Notice::LOCAL_PUBLIC || $this->notice->is_local == Notice::LOCAL_NONPUBLIC){
- $noticeurl = common_local_url('shownotice',
- array('notice' => $this->notice->id));
- }else{
- $noticeurl = $this->notice->uri;
- }
+ $noticeurl = $this->notice->bestUrl();
+
+ // above should always return an URL
+
+ assert(!empty($noticeurl));
+
$this->out->elementStart('a', array('rel' => 'bookmark',
'class' => 'timestamp',
'href' => $noticeurl));
@@ -438,14 +438,15 @@ class NoticeListItem extends Widget
$this->out->text(_('at'));
$this->out->text(' ');
if (empty($url)) {
- $this->out->element('span', array('class' => 'geo',
+ $this->out->element('abbr', array('class' => 'geo',
'title' => $latlon),
$name);
} else {
- $this->out->element('a', array('class' => 'geo',
- 'title' => $latlon,
- 'href' => $url),
+ $this->out->elementStart('a', array('href' => $url));
+ $this->out->element('abbr', array('class' => 'geo',
+ 'title' => $latlon),
$name);
+ $this->out->elementEnd('a');
}
$this->out->elementEnd('span');
}
@@ -539,22 +540,40 @@ class NoticeListItem extends Widget
function showContext()
{
$hasConversation = false;
- if( !empty($this->notice->conversation)
- && $this->notice->conversation != $this->notice->id){
- $hasConversation = true;
- }else{
- $conversation = Notice::conversationStream($this->notice->id, 1, 1);
- if($conversation->N > 0){
+ if (!empty($this->notice->conversation)) {
+ $conversation = Notice::conversationStream(
+ $this->notice->conversation,
+ 1,
+ 1
+ );
+ if ($conversation->N > 0) {
$hasConversation = true;
}
}
- if ($hasConversation){
- $this->out->text(' ');
- $convurl = common_local_url('conversation',
- array('id' => $this->notice->conversation));
- $this->out->element('a', array('href' => $convurl.'#notice-'.$this->notice->id,
- 'class' => 'response'),
- _('in context'));
+ if ($hasConversation) {
+ $conv = Conversation::staticGet(
+ 'id',
+ $this->notice->conversation
+ );
+ $convurl = $conv->uri;
+ if (!empty($convurl)) {
+ $this->out->text(' ');
+ $this->out->element(
+ 'a',
+ array(
+ 'href' => $convurl.'#notice-'.$this->notice->id,
+ 'class' => 'response'),
+ _('in context')
+ );
+ } else {
+ $msg = sprintf(
+ "Couldn't find Conversation ID %d to make 'in context'"
+ . "link for Notice ID %d",
+ $this->notice->conversation,
+ $this->notice->id
+ );
+ common_log(LOG_WARNING, $msg);
+ }
}
}
diff --git a/lib/oauthstore.php b/lib/oauthstore.php
index eabe37f9f..a6a6de750 100644
--- a/lib/oauthstore.php
+++ b/lib/oauthstore.php
@@ -390,7 +390,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
$sub->subscribed = $user->id;
if (!$sub->find(true)) {
- return 0;
+ return array();
}
/* Since we do not use OMB_Service_Provider’s action methods, there
diff --git a/lib/omb.php b/lib/omb.php
index 17132a594..db60fa0ef 100644
--- a/lib/omb.php
+++ b/lib/omb.php
@@ -77,7 +77,7 @@ function omb_broadcast_notice($notice)
/* Get remote users subscribed to this profile. */
$rp = new Remote_profile();
- $rp->query('SELECT postnoticeurl, token, secret ' .
+ $rp->query('SELECT remote_profile.*, secret, token ' .
'FROM subscription JOIN remote_profile ' .
'ON subscription.subscriber = remote_profile.id ' .
'WHERE subscription.subscribed = ' . $notice->profile_id . ' ');
@@ -93,7 +93,8 @@ function omb_broadcast_notice($notice)
/* Post notice. */
$service = new StatusNet_OMB_Service_Consumer(
- array(OMB_ENDPOINT_POSTNOTICE => $rp->postnoticeurl));
+ array(OMB_ENDPOINT_POSTNOTICE => $rp->postnoticeurl),
+ $rp->uri);
try {
$service->setToken($rp->token, $rp->secret);
$service->postNotice($omb_notice);
@@ -125,7 +126,7 @@ function omb_broadcast_profile($profile)
/* Get remote users subscribed to this profile. */
$rp = new Remote_profile();
- $rp->query('SELECT updateprofileurl, token, secret ' .
+ $rp->query('SELECT remote_profile.*, secret, token ' .
'FROM subscription JOIN remote_profile ' .
'ON subscription.subscriber = remote_profile.id ' .
'WHERE subscription.subscribed = ' . $profile->id . ' ');
@@ -141,7 +142,8 @@ function omb_broadcast_profile($profile)
/* Update profile. */
$service = new StatusNet_OMB_Service_Consumer(
- array(OMB_ENDPOINT_UPDATEPROFILE => $rp->updateprofileurl));
+ array(OMB_ENDPOINT_UPDATEPROFILE => $rp->updateprofileurl),
+ $rp->uri);
try {
$service->setToken($rp->token, $rp->secret);
$service->updateProfile($omb_profile);
@@ -159,13 +161,14 @@ function omb_broadcast_profile($profile)
}
class StatusNet_OMB_Service_Consumer extends OMB_Service_Consumer {
- public function __construct($urls)
+ public function __construct($urls, $listener_uri=null)
{
$this->services = $urls;
$this->datastore = omb_oauth_datastore();
$this->oauth_consumer = omb_oauth_consumer();
$this->fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
$this->fetcher->timeout = intval(common_config('omb', 'timeout'));
+ $this->listener_uri = $listener_uri;
}
}
diff --git a/lib/profileaction.php b/lib/profileaction.php
index 2d4d23265..029c21845 100644
--- a/lib/profileaction.php
+++ b/lib/profileaction.php
@@ -105,28 +105,30 @@ class ProfileAction extends OwnerDesignAction
$this->elementStart('div', array('id' => 'entity_subscriptions',
'class' => 'section'));
+ if (Event::handle('StartShowSubscriptionsMiniList', array($this))) {
+ $this->element('h2', null, _('Subscriptions'));
- $this->element('h2', null, _('Subscriptions'));
+ $cnt = 0;
- $cnt = 0;
+ if (!empty($profile)) {
+ $pml = new ProfileMiniList($profile, $this);
+ $cnt = $pml->show();
+ if ($cnt == 0) {
+ $this->element('p', null, _('(None)'));
+ }
+ }
- if (!empty($profile)) {
- $pml = new ProfileMiniList($profile, $this);
- $cnt = $pml->show();
- if ($cnt == 0) {
- $this->element('p', null, _('(None)'));
+ if ($cnt > PROFILES_PER_MINILIST) {
+ $this->elementStart('p');
+ $this->element('a', array('href' => common_local_url('subscriptions',
+ array('nickname' => $this->profile->nickname)),
+ 'class' => 'more'),
+ _('All subscriptions'));
+ $this->elementEnd('p');
}
- }
- if ($cnt > PROFILES_PER_MINILIST) {
- $this->elementStart('p');
- $this->element('a', array('href' => common_local_url('subscriptions',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All subscriptions'));
- $this->elementEnd('p');
+ Event::handle('EndShowSubscriptionsMiniList', array($this));
}
-
$this->elementEnd('div');
}
@@ -226,27 +228,29 @@ class ProfileAction extends OwnerDesignAction
$this->elementStart('div', array('id' => 'entity_groups',
'class' => 'section'));
+ if (Event::handle('StartShowGroupsMiniList', array($this))) {
+ $this->element('h2', null, _('Groups'));
+
+ if ($groups) {
+ $gml = new GroupMiniList($groups, $this->user, $this);
+ $cnt = $gml->show();
+ if ($cnt == 0) {
+ $this->element('p', null, _('(None)'));
+ }
+ }
- $this->element('h2', null, _('Groups'));
-
- if ($groups) {
- $gml = new GroupMiniList($groups, $this->user, $this);
- $cnt = $gml->show();
- if ($cnt == 0) {
- $this->element('p', null, _('(None)'));
+ if ($cnt > GROUPS_PER_MINILIST) {
+ $this->elementStart('p');
+ $this->element('a', array('href' => common_local_url('usergroups',
+ array('nickname' => $this->profile->nickname)),
+ 'class' => 'more'),
+ _('All groups'));
+ $this->elementEnd('p');
}
- }
- if ($cnt > GROUPS_PER_MINILIST) {
- $this->elementStart('p');
- $this->element('a', array('href' => common_local_url('usergroups',
- array('nickname' => $this->profile->nickname)),
- 'class' => 'more'),
- _('All groups'));
- $this->elementEnd('p');
+ Event::handle('EndShowGroupsMiniList', array($this));
}
-
- $this->elementEnd('div');
+ $this->elementEnd('div');
}
}
diff --git a/lib/profilelist.php b/lib/profilelist.php
index 693cd6449..d970e605a 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -273,10 +273,9 @@ class ProfileListItem extends Widget
$usf = new UnsubscribeForm($this->out, $this->profile);
$usf->show();
} else {
- // Is it a local user? can't remote sub from a list
- // XXX: make that possible!
- $other = User::staticGet('id', $this->profile->id);
- if (!empty($other)) {
+ // We can't initiate sub for a remote OMB profile.
+ $remote = Remote_profile::staticGet('id', $this->profile->id);
+ if (empty($remote)) {
$sf = new SubscribeForm($this->out, $this->profile);
$sf->show();
}
diff --git a/lib/profilequeuehandler.php b/lib/profilequeuehandler.php
new file mode 100644
index 000000000..6ce93229b
--- /dev/null
+++ b/lib/profilequeuehandler.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package QueueHandler
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+class ProfileQueueHandler extends QueueHandler
+{
+
+ function transport()
+ {
+ return 'profile';
+ }
+
+ function handle($profile)
+ {
+ if (!($profile instanceof Profile)) {
+ common_log(LOG_ERR, "Got a bogus profile, not broadcasting");
+ return true;
+ }
+
+ if (Event::handle('StartBroadcastProfile', array($profile))) {
+ require_once(INSTALLDIR.'/lib/omb.php');
+ try {
+ omb_broadcast_profile($profile);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Failed sending OMB profiles: " . $e->getMessage());
+ }
+ }
+ Event::handle('EndBroadcastProfile', array($profile));
+ return true;
+ }
+
+}
diff --git a/lib/queuemanager.php b/lib/queuemanager.php
index 710829e49..87bd356aa 100644
--- a/lib/queuemanager.php
+++ b/lib/queuemanager.php
@@ -264,6 +264,9 @@ abstract class QueueManager extends IoManager
$this->connect('sms', 'SmsQueueHandler');
}
+ // Broadcasting profile updates to OMB remote subscribers
+ $this->connect('profile', 'ProfileQueueHandler');
+
// XMPP output handlers...
if (common_config('xmpp', 'enabled')) {
// Delivery prep, read by queuedaemon.php:
diff --git a/lib/revokeroleform.php b/lib/revokeroleform.php
new file mode 100644
index 000000000..ec24b9910
--- /dev/null
+++ b/lib/revokeroleform.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Form for revoking a role
+ *
+ * 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 Form
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>, Brion Vibber <brion@status.net>
+ * @copyright 2009-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);
+}
+
+/**
+ * Form for sandboxing a user
+ *
+ * @category Form
+ * @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 UnSandboxForm
+ */
+
+class RevokeRoleForm extends ProfileActionForm
+{
+ function __construct($role, $label, $writer, $profile, $r2args)
+ {
+ parent::__construct($writer, $profile, $r2args);
+ $this->role = $role;
+ $this->label = $label;
+ }
+
+ /**
+ * Action this form provides
+ *
+ * @return string Name of the action, lowercased.
+ */
+
+ function target()
+ {
+ return 'revokerole';
+ }
+
+ /**
+ * Title of the form
+ *
+ * @return string Title of the form, internationalized
+ */
+
+ function title()
+ {
+ return $this->label;
+ }
+
+ function formData()
+ {
+ parent::formData();
+ $this->out->hidden('role', $this->role);
+ }
+
+ /**
+ * Description of the form
+ *
+ * @return string description of the form, internationalized
+ */
+
+ function description()
+ {
+ return sprintf(_('Revoke the "%s" role from this user'), $this->label);
+ }
+}
diff --git a/lib/right.php b/lib/right.php
index 4e9c5a918..deb451fde 100644
--- a/lib/right.php
+++ b/lib/right.php
@@ -58,5 +58,7 @@ class Right
const EMAILONSUBSCRIBE = 'emailonsubscribe';
const EMAILONFAVE = 'emailonfave';
const MAKEGROUPADMIN = 'makegroupadmin';
+ const GRANTROLE = 'grantrole';
+ const REVOKEROLE = 'revokerole';
}
diff --git a/lib/router.php b/lib/router.php
index 987d0152e..706120e0b 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -98,6 +98,7 @@ class Router
'groupblock', 'groupunblock',
'sandbox', 'unsandbox',
'silence', 'unsilence',
+ 'grantrole', 'revokerole',
'repeat',
'deleteuser',
'geocode',
@@ -247,6 +248,9 @@ class Router
$m->connect('group/:nickname/'.$v,
array('action' => $v.'group'),
array('nickname' => '[a-zA-Z0-9]+'));
+ $m->connect('group/:id/id/'.$v,
+ array('action' => $v.'group'),
+ array('id' => '[0-9]+'));
}
foreach (array('members', 'logo', 'rss', 'designsettings') as $n) {
@@ -646,6 +650,8 @@ class Router
$m->connect('admin/access', array('action' => 'accessadminpanel'));
$m->connect('admin/paths', array('action' => 'pathsadminpanel'));
$m->connect('admin/sessions', array('action' => 'sessionsadminpanel'));
+ $m->connect('admin/sitenotice', array('action' => 'sitenoticeadminpanel'));
+ $m->connect('admin/snapshot', array('action' => 'snapshotadminpanel'));
$m->connect('getfile/:filename',
array('action' => 'getfile'),
@@ -668,7 +674,7 @@ class Router
foreach (array('subscriptions', 'subscribers',
'all', 'foaf', 'xrds',
- 'replies', 'microsummary') as $a) {
+ 'replies', 'microsummary', 'hcard') as $a) {
$m->connect($a,
array('action' => $a,
'nickname' => $nickname));
@@ -734,7 +740,7 @@ class Router
foreach (array('subscriptions', 'subscribers',
'nudge', 'all', 'foaf', 'xrds',
- 'replies', 'inbox', 'outbox', 'microsummary') as $a) {
+ 'replies', 'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
$m->connect(':nickname/'.$a,
array('action' => $a),
array('nickname' => '[a-zA-Z0-9]{1,64}'));
diff --git a/lib/statusnet.php b/lib/statusnet.php
index 7c4df84b4..eba9ab9b8 100644
--- a/lib/statusnet.php
+++ b/lib/statusnet.php
@@ -354,10 +354,10 @@ class StatusNet
class NoConfigException extends Exception
{
- public $config_files;
+ public $configFiles;
- function __construct($msg, $config_files) {
+ function __construct($msg, $configFiles) {
parent::__construct($msg);
- $this->config_files = $config_files;
+ $this->configFiles = $configFiles;
}
}
diff --git a/lib/stompqueuemanager.php b/lib/stompqueuemanager.php
index bfeeb23b7..9af8b2f48 100644
--- a/lib/stompqueuemanager.php
+++ b/lib/stompqueuemanager.php
@@ -63,7 +63,7 @@ class StompQueueManager extends QueueManager
$this->password = common_config('queue', 'stomp_password');
$this->base = common_config('queue', 'queue_basename');
$this->control = common_config('queue', 'control_channel');
- $this->subscriptions = array($this->control => $this->control);
+ $this->breakout = common_config('queue', 'breakout');
}
/**
@@ -76,28 +76,6 @@ class StompQueueManager extends QueueManager
}
/**
- * Record queue subscriptions we'll need to handle the current site.
- */
- public function addSite()
- {
- $this->sites[] = StatusNet::currentSite();
-
- // Set up handlers active for this site...
- $this->initialize();
-
- foreach ($this->activeGroups as $group) {
- if (isset($this->groups[$group])) {
- // Actual queues may be broken out or consolidated...
- // Subscribe to all the target queues we'll need.
- foreach ($this->groups[$group] as $transport => $class) {
- $target = $this->queueName($transport);
- $this->subscriptions[$target] = $target;
- }
- }
- }
- }
-
- /**
* Optional; ping any running queue handler daemons with a notification
* such as announcing a new site to handle or requesting clean shutdown.
* This avoids having to restart all the daemons manually to update configs
@@ -166,14 +144,15 @@ class StompQueueManager extends QueueManager
$con = $this->cons[$idx];
$host = $con->getServer();
- $result = $con->send($this->queueName($queue), $msg, $props);
+ $target = $this->queueName($queue);
+ $result = $con->send($target, $msg, $props);
if (!$result) {
- $this->_log(LOG_ERR, "Error sending $rep to $queue queue on $host");
+ $this->_log(LOG_ERR, "Error sending $rep to $queue queue on $host $target");
return false;
}
- $this->_log(LOG_DEBUG, "complete remote queueing $rep for $queue on $host");
+ $this->_log(LOG_DEBUG, "complete remote queueing $rep for $queue on $host $target");
$this->stats('enqueued', $queue);
return true;
}
@@ -432,11 +411,42 @@ class StompQueueManager extends QueueManager
protected function doSubscribe(LiberalStomp $con)
{
$host = $con->getServer();
- foreach ($this->subscriptions as $queue) {
- $this->_log(LOG_INFO, "Subscribing to $queue on $host");
- $con->subscribe($queue);
+ foreach ($this->subscriptions() as $sub) {
+ $this->_log(LOG_INFO, "Subscribing to $sub on $host");
+ $con->subscribe($sub);
}
}
+
+ /**
+ * Grab a full list of stomp-side queue subscriptions.
+ * Will include:
+ * - control broadcast channel
+ * - shared group queues for active groups
+ * - per-handler and per-site breakouts from $config['queue']['breakout']
+ * that are rooted in the active groups.
+ *
+ * @return array of strings
+ */
+ protected function subscriptions()
+ {
+ $subs = array();
+ $subs[] = $this->control;
+
+ foreach ($this->activeGroups as $group) {
+ $subs[] = $this->base . $group;
+ }
+
+ foreach ($this->breakout as $spec) {
+ $parts = explode('/', $spec);
+ if (count($parts) < 2 || count($parts) > 3) {
+ common_log(LOG_ERR, "Bad queue breakout specifier $spec");
+ }
+ if (in_array($parts[0], $this->activeGroups)) {
+ $subs[] = $this->base . $spec;
+ }
+ }
+ return array_unique($subs);
+ }
/**
* Handle and acknowledge an event that's come in through a queue.
@@ -612,32 +622,26 @@ class StompQueueManager extends QueueManager
}
/**
- * Set us up with queue subscriptions for a new site added at runtime,
+ * (Re)load runtime configuration for a given site by nickname,
* triggered by a broadcast to the 'statusnet-control' topic.
*
+ * Configuration changes in database should update, but config
+ * files might not.
+ *
* @param array $frame Stomp frame
* @return bool true to continue; false to stop further processing.
*/
protected function updateSiteConfig($nickname)
{
- if (empty($this->sites)) {
- if ($nickname == common_config('site', 'nickname')) {
- StatusNet::init(common_config('site', 'server'));
- } else {
- $this->_log(LOG_INFO, "Ignoring update ping for other site $nickname");
+ $sn = Status_network::staticGet($nickname);
+ if ($sn) {
+ $this->switchSite($nickname);
+ if (!in_array($nickname, $this->sites)) {
+ $this->addSite();
}
+ $this->stats('siteupdate');
} else {
- $sn = Status_network::staticGet($nickname);
- if ($sn) {
- $this->switchSite($nickname);
- if (!in_array($nickname, $this->sites)) {
- $this->addSite();
- }
- // @fixme update subscriptions, if applicable
- $this->stats('siteupdate');
- } else {
- $this->_log(LOG_ERR, "Ignoring ping for unrecognized new site $nickname");
- }
+ $this->_log(LOG_ERR, "Ignoring ping for unrecognized new site $nickname");
}
}
@@ -646,24 +650,25 @@ class StompQueueManager extends QueueManager
* group name for this queue to give eg:
*
* /queue/statusnet/main
+ * /queue/statusnet/main/distrib
+ * /queue/statusnet/xmpp/xmppout/site01
*
* @param string $queue
* @return string
*/
protected function queueName($queue)
{
- $base = common_config('queue', 'queue_basename');
$group = $this->queueGroup($queue);
- $breakout = $this->breakoutMode($queue);
- if ($breakout == 'shared') {
- return $base . "$group";
- } else if ($breakout == 'handler') {
- return $base . "$group/$queue";
- } else if ($breakout == 'site') {
- $site = StatusNet::currentSite();
- return $base . "$group/$queue/$site";
- }
- throw Exception("Unrecognized queue breakout mode '$breakout' for '$queue'");
+ $site = StatusNet::currentSite();
+
+ $specs = array("$group/$queue/$site",
+ "$group/$queue");
+ foreach ($specs as $spec) {
+ if (in_array($spec, $this->breakout)) {
+ return $this->base . $spec;
+ }
+ }
+ return $this->base . $group;
}
/**
diff --git a/lib/subs.php b/lib/subs.php
index 5ac1a75a5..e2ce0667e 100644
--- a/lib/subs.php
+++ b/lib/subs.php
@@ -19,24 +19,6 @@
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-require_once('XMPPHP/XMPP.php');
-
-/* Subscribe $user to nickname $other_nickname
- Returns true or an error message.
-*/
-
-function subs_subscribe_user($user, $other_nickname)
-{
-
- $other = User::staticGet('nickname', $other_nickname);
-
- if (!$other) {
- return _('No such user.');
- }
-
- return subs_subscribe_to($user, $other);
-}
-
/* Subscribe user $user to other user $other.
* Note: $other must be a local user, not a remote profile.
* Because the other way is quite a bit more complicated.
@@ -44,111 +26,40 @@ function subs_subscribe_user($user, $other_nickname)
function subs_subscribe_to($user, $other)
{
- if (!$user->hasRight(Right::SUBSCRIBE)) {
- return _('You have been banned from subscribing.');
- }
-
- if ($user->isSubscribed($other)) {
- return _('Already subscribed!');
- }
-
- if ($other->hasBlocked($user)) {
- return _('User has blocked you.');
- }
-
try {
- if (Event::handle('StartSubscribe', array($user, $other))) {
-
- if (!$user->subscribeTo($other)) {
- return _('Could not subscribe.');
- return;
- }
-
- subs_notify($other, $user);
-
- $cache = common_memcache();
-
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
- }
-
- $profile = $user->getProfile();
-
- $profile->blowSubscriptionsCount();
- $other->blowSubscribersCount();
-
- if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) {
- if (!$other->subscribeTo($user)) {
- return _('Could not subscribe other to you.');
- }
- $cache = common_memcache();
-
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
- }
-
- subs_notify($user, $other);
- }
-
- Event::handle('EndSubscribe', array($user, $other));
- }
+ Subscription::start($user->getProfile(), $other);
+ return true;
} catch (Exception $e) {
return $e->getMessage();
}
-
- return true;
-}
-
-function subs_notify($listenee, $listener)
-{
- # XXX: add other notifications (Jabber, SMS) here
- # XXX: queue this and handle it offline
- # XXX: Whatever happens, do it in Twitter-like API, too
- subs_notify_email($listenee, $listener);
}
-function subs_notify_email($listenee, $listener)
-{
- mail_subscribe_notify($listenee, $listener);
-}
-
-/* Unsubscribe $user from nickname $other_nickname
- Returns true or an error message.
-*/
-
-function subs_unsubscribe_user($user, $other_nickname)
-{
-
- $other = User::staticGet('nickname', $other_nickname);
-
- if (!$other) {
- return _('No such user.');
- }
-
- return subs_unsubscribe_to($user, $other->getProfile());
-}
-
-/* Unsubscribe user $user from profile $other
- * NB: other can be a remote user. */
-
function subs_unsubscribe_to($user, $other)
{
- if (!$user->isSubscribed($other))
- return _('Not subscribed!');
-
- // Don't allow deleting self subs
-
- if ($user->id == $other->id) {
- return _('Couldn\'t delete self-subscription.');
+ try {
+ Subscription::cancel($user->getProfile(), $other);
+ return true;
+ } catch (Exception $e) {
+ return $e->getMessage();
}
+}
+function subs_unsubscribe_from($user, $other){
+ $local = User::staticGet("nickname",$other);
+ if($local){
+ return subs_unsubscribe_to($local,$user);
+ } else {
try {
- if (Event::handle('StartUnsubscribe', array($user, $other))) {
+ $remote = Profile::staticGet("nickname",$other);
+ if(is_string($remote)){
+ return $remote;
+ }
+ if (Event::handle('StartUnsubscribe', array($remote,$user))) {
$sub = DB_DataObject::factory('subscription');
- $sub->subscriber = $user->id;
- $sub->subscribed = $other->id;
+ $sub->subscriber = $remote->id;
+ $sub->subscribed = $user->id;
$sub->find(true);
@@ -160,20 +71,18 @@ function subs_unsubscribe_to($user, $other)
$cache = common_memcache();
if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
+ $cache->delete(common_cache_key('user:notices_with_friends:' . $remote->id));
}
- $profile = $user->getProfile();
- $profile->blowSubscriptionsCount();
- $other->blowSubscribersCount();
+ $user->blowSubscribersCount();
+ $remote->blowSubscribersCount();
- Event::handle('EndUnsubscribe', array($user, $other));
+ Event::handle('EndUnsubscribe', array($remote, $user));
}
} catch (Exception $e) {
return $e->getMessage();
}
-
- return true;
+ }
}
diff --git a/lib/taguri.php b/lib/taguri.php
new file mode 100644
index 000000000..d8398eded
--- /dev/null
+++ b/lib/taguri.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Utility for creating new tag: URIs
+ *
+ * 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 URI
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Mint tag: URIs
+ *
+ * tag: URIs are unique identifiers according to http://tools.ietf.org/html/rfc4151.
+ *
+ * We use them for creating URIs for things that can't be HTTP retrieved.
+ *
+ * @category URI
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class TagURI
+{
+ /**
+ * Return the base part of a tag URI
+ *
+ * Note: use mint() instead.
+ *
+ * @return string Tag URI base to use
+ */
+
+ static function base()
+ {
+ $base = common_config('integration', 'taguri');
+
+ if (empty($base)) {
+
+ $base = common_config('site', 'server').','.date('Y-m-d');
+
+ $pathPart = trim(common_config('site', 'path'), '/');
+
+ if (!empty($pathPart)) {
+ $base .= ':'.str_replace('/', ':', $pathPart);
+ }
+ }
+
+ return $base;
+ }
+
+ /**
+ * Make a new tag URI
+ *
+ * Builds the proper base and creates all the parts
+ *
+ * @return string minted URI
+ */
+
+ static function mint()
+ {
+ $base = self::base();
+
+ $args = func_get_args();
+
+ $format = array_shift($args);
+
+ $extra = vsprintf($format, $args);
+
+ return 'tag:'.$base.':'.$extra;
+ }
+}
diff --git a/lib/userprofile.php b/lib/userprofile.php
index 43dfd05be..8464c2446 100644
--- a/lib/userprofile.php
+++ b/lib/userprofile.php
@@ -346,6 +346,16 @@ class UserProfile extends Widget
$this->out->elementEnd('ul');
$this->out->elementEnd('li');
}
+
+ if ($cur->hasRight(Right::GRANTROLE)) {
+ $this->out->elementStart('li', 'entity_role');
+ $this->out->element('p', null, _('User role'));
+ $this->out->elementStart('ul');
+ $this->roleButton('administrator', _m('role', 'Administrator'));
+ $this->roleButton('moderator', _m('role', 'Moderator'));
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('li');
+ }
}
}
@@ -359,6 +369,22 @@ class UserProfile extends Widget
}
}
+ function roleButton($role, $label)
+ {
+ list($action, $r2args) = $this->out->returnToArgs();
+ $r2args['action'] = $action;
+
+ $this->out->elementStart('li', "entity_role_$role");
+ if ($this->user->hasRole($role)) {
+ $rf = new RevokeRoleForm($role, $label, $this->out, $this->profile, $r2args);
+ $rf->show();
+ } else {
+ $rf = new GrantRoleForm($role, $label, $this->out, $this->profile, $r2args);
+ $rf->show();
+ }
+ $this->out->elementEnd('li');
+ }
+
function showRemoteSubscribeLink()
{
$url = common_local_url('remotesubscribe',
diff --git a/lib/util.php b/lib/util.php
index ef7852953..da2799d4f 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -105,11 +105,13 @@ function common_language()
// Otherwise, find the best match for the languages requested by the
// user's browser...
- $httplang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null;
- if (!empty($httplang)) {
- $language = client_prefered_language($httplang);
- if ($language)
- return $language;
+ if (common_config('site', 'langdetect')) {
+ $httplang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null;
+ if (!empty($httplang)) {
+ $language = client_prefered_language($httplang);
+ if ($language)
+ return $language;
+ }
}
// Finally, if none of the above worked, use the site's default...
@@ -134,7 +136,7 @@ function common_check_user($nickname, $password)
$authenticatedUser = false;
if (Event::handle('StartCheckPassword', array($nickname, $password, &$authenticatedUser))) {
- $user = User::staticGet('nickname', $nickname);
+ $user = User::staticGet('nickname', common_canonical_nickname($nickname));
if (!empty($user)) {
if (!empty($password)) { // never allow login with blank password
if (0 == strcmp(common_munge_password($password, $user->id),
@@ -426,13 +428,187 @@ function common_render_content($text, $notice)
{
$r = common_render_text($text);
$id = $notice->profile_id;
- $r = preg_replace('/(^|\s+)@(['.NICKNAME_FMT.']{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r);
- $r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r);
- $r = preg_replace('/(^|[\s\.\,\:\;]+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r);
+ $r = common_linkify_mentions($r, $notice);
$r = preg_replace('/(^|[\s\.\,\:\;]+)!([A-Za-z0-9]{1,64})/e', "'\\1!'.common_group_link($id, '\\2')", $r);
return $r;
}
+function common_linkify_mentions($text, $notice)
+{
+ $mentions = common_find_mentions($text, $notice);
+
+ // We need to go through in reverse order by position,
+ // so our positions stay valid despite our fudging with the
+ // string!
+
+ $points = array();
+
+ foreach ($mentions as $mention)
+ {
+ $points[$mention['position']] = $mention;
+ }
+
+ krsort($points);
+
+ foreach ($points as $position => $mention) {
+
+ $linkText = common_linkify_mention($mention);
+
+ $text = substr_replace($text, $linkText, $position, mb_strlen($mention['text']));
+ }
+
+ return $text;
+}
+
+function common_linkify_mention($mention)
+{
+ $output = null;
+
+ if (Event::handle('StartLinkifyMention', array($mention, &$output))) {
+
+ $xs = new XMLStringer(false);
+
+ $attrs = array('href' => $mention['url'],
+ 'class' => 'url');
+
+ if (!empty($mention['title'])) {
+ $attrs['title'] = $mention['title'];
+ }
+
+ $xs->elementStart('span', 'vcard');
+ $xs->elementStart('a', $attrs);
+ $xs->element('span', 'fn nickname', $mention['text']);
+ $xs->elementEnd('a');
+ $xs->elementEnd('span');
+
+ $output = $xs->getString();
+
+ Event::handle('EndLinkifyMention', array($mention, &$output));
+ }
+
+ return $output;
+}
+
+function common_find_mentions($text, $notice)
+{
+ $mentions = array();
+
+ $sender = Profile::staticGet('id', $notice->profile_id);
+
+ if (empty($sender)) {
+ return $mentions;
+ }
+
+ if (Event::handle('StartFindMentions', array($sender, $text, &$mentions))) {
+
+ // Get the context of the original notice, if any
+
+ $originalAuthor = null;
+ $originalNotice = null;
+ $originalMentions = array();
+
+ // Is it a reply?
+
+ if (!empty($notice) && !empty($notice->reply_to)) {
+ $originalNotice = Notice::staticGet('id', $notice->reply_to);
+ if (!empty($originalNotice)) {
+ $originalAuthor = Profile::staticGet('id', $originalNotice->profile_id);
+
+ $ids = $originalNotice->getReplies();
+
+ foreach ($ids as $id) {
+ $repliedTo = Profile::staticGet('id', $id);
+ if (!empty($repliedTo)) {
+ $originalMentions[$repliedTo->nickname] = $repliedTo;
+ }
+ }
+ }
+ }
+
+ preg_match_all('/^T ([A-Z0-9]{1,64}) /',
+ $text,
+ $tmatches,
+ PREG_OFFSET_CAPTURE);
+
+ preg_match_all('/(?:^|\s+)@(['.NICKNAME_FMT.']{1,64})/',
+ $text,
+ $atmatches,
+ PREG_OFFSET_CAPTURE);
+
+ $matches = array_merge($tmatches[1], $atmatches[1]);
+
+ foreach ($matches as $match) {
+
+ $nickname = common_canonical_nickname($match[0]);
+
+ // Try to get a profile for this nickname.
+ // Start with conversation context, then go to
+ // sender context.
+
+ if (!empty($originalAuthor) && $originalAuthor->nickname == $nickname) {
+
+ $mentioned = $originalAuthor;
+
+ } else if (!empty($originalMentions) &&
+ array_key_exists($nickname, $originalMentions)) {
+
+ $mentioned = $originalMentions[$nickname];
+ } else {
+ $mentioned = common_relative_profile($sender, $nickname);
+ }
+
+ if (!empty($mentioned)) {
+
+ $user = User::staticGet('id', $mentioned->id);
+
+ if ($user) {
+ $url = common_local_url('userbyid', array('id' => $user->id));
+ } else {
+ $url = $mentioned->profileurl;
+ }
+
+ $mention = array('mentioned' => array($mentioned),
+ 'text' => $match[0],
+ 'position' => $match[1],
+ 'url' => $url);
+
+ if (!empty($mentioned->fullname)) {
+ $mention['title'] = $mentioned->fullname;
+ }
+
+ $mentions[] = $mention;
+ }
+ }
+
+ // @#tag => mention of all subscriptions tagged 'tag'
+
+ preg_match_all('/(?:^|[\s\.\,\:\;]+)@#([\pL\pN_\-\.]{1,64})/',
+ $text,
+ $hmatches,
+ PREG_OFFSET_CAPTURE);
+
+ foreach ($hmatches[1] as $hmatch) {
+
+ $tag = common_canonical_tag($hmatch[0]);
+
+ $tagged = Profile_tag::getTagged($sender->id, $tag);
+
+ $url = common_local_url('subscriptions',
+ array('nickname' => $sender->nickname,
+ 'tag' => $tag));
+
+ $mentions[] = array('mentioned' => $tagged,
+ 'text' => $hmatch[0],
+ 'position' => $hmatch[1],
+ 'url' => $url);
+ }
+
+ Event::handle('EndFindMentions', array($sender, $text, &$mentions));
+ }
+
+ return $mentions;
+}
+
function common_render_text($text)
{
$r = htmlspecialchars($text);
@@ -628,8 +804,28 @@ function common_shorten_links($text)
function common_xml_safe_str($str)
{
- // Neutralize control codes and surrogates
- return preg_replace('/[\p{Cc}\p{Cs}]/u', '*', $str);
+ // Replace common eol and extra whitespace input chars
+ $unWelcome = array(
+ "\t", // tab
+ "\n", // newline
+ "\r", // cr
+ "\0", // null byte eos
+ "\x0B" // vertical tab
+ );
+
+ $replacement = array(
+ ' ', // single space
+ ' ',
+ '', // nothing
+ '',
+ ' '
+ );
+
+ $str = str_replace($unWelcome, $replacement, $str);
+
+ // Neutralize any additional control codes and UTF-16 surrogates
+ // (Twitter uses '*')
+ return preg_replace('/[\p{Cc}\p{Cs}]/u', '*', $str);
}
function common_tag_link($tag)
@@ -656,41 +852,10 @@ function common_valid_profile_tag($str)
return preg_match('/^[A-Za-z0-9_\-\.]{1,64}$/', $str);
}
-function common_at_link($sender_id, $nickname)
-{
- $sender = Profile::staticGet($sender_id);
- if (!$sender) {
- return $nickname;
- }
- $recipient = common_relative_profile($sender, common_canonical_nickname($nickname));
- if ($recipient) {
- $user = User::staticGet('id', $recipient->id);
- if ($user) {
- $url = common_local_url('userbyid', array('id' => $user->id));
- } else {
- $url = $recipient->profileurl;
- }
- $xs = new XMLStringer(false);
- $attrs = array('href' => $url,
- 'class' => 'url');
- if (!empty($recipient->fullname)) {
- $attrs['title'] = $recipient->fullname . ' (' . $recipient->nickname . ')';
- }
- $xs->elementStart('span', 'vcard');
- $xs->elementStart('a', $attrs);
- $xs->element('span', 'fn nickname', $nickname);
- $xs->elementEnd('a');
- $xs->elementEnd('span');
- return $xs->getString();
- } else {
- return $nickname;
- }
-}
-
function common_group_link($sender_id, $nickname)
{
$sender = Profile::staticGet($sender_id);
- $group = User_group::getForNickname($nickname);
+ $group = User_group::getForNickname($nickname, $sender);
if ($sender && $group && $sender->isMember($group)) {
$attrs = array('href' => $group->permalink(),
'class' => 'url');
@@ -709,29 +874,6 @@ function common_group_link($sender_id, $nickname)
}
}
-function common_at_hash_link($sender_id, $tag)
-{
- $user = User::staticGet($sender_id);
- if (!$user) {
- return $tag;
- }
- $tagged = Profile_tag::getTagged($user->id, common_canonical_tag($tag));
- if ($tagged) {
- $url = common_local_url('subscriptions',
- array('nickname' => $user->nickname,
- 'tag' => $tag));
- $xs = new XMLStringer();
- $xs->elementStart('span', 'tag');
- $xs->element('a', array('href' => $url,
- 'rel' => $tag),
- $tag);
- $xs->elementEnd('span');
- return $xs->getString();
- } else {
- return $tag;
- }
-}
-
function common_relative_profile($sender, $nickname, $dt=null)
{
// Try to find profiles this profile is subscribed to that have this nickname
@@ -768,7 +910,7 @@ function common_relative_profile($sender, $nickname, $dt=null)
return null;
}
-function common_local_url($action, $args=null, $params=null, $fragment=null)
+function common_local_url($action, $args=null, $params=null, $fragment=null, $addSession=true)
{
$r = Router::get();
$path = $r->build($action, $args, $params, $fragment);
@@ -776,12 +918,12 @@ function common_local_url($action, $args=null, $params=null, $fragment=null)
$ssl = common_is_sensitive($action);
if (common_config('site','fancy')) {
- $url = common_path(mb_substr($path, 1), $ssl);
+ $url = common_path(mb_substr($path, 1), $ssl, $addSession);
} else {
if (mb_strpos($path, '/index.php') === 0) {
- $url = common_path(mb_substr($path, 1), $ssl);
+ $url = common_path(mb_substr($path, 1), $ssl, $addSession);
} else {
- $url = common_path('index.php'.$path, $ssl);
+ $url = common_path('index.php'.$path, $ssl, $addSession);
}
}
return $url;
@@ -800,7 +942,7 @@ function common_is_sensitive($action)
return $ssl;
}
-function common_path($relative, $ssl=false)
+function common_path($relative, $ssl=false, $addSession=true)
{
$pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
@@ -824,7 +966,9 @@ function common_path($relative, $ssl=false)
}
}
- $relative = common_inject_session($relative, $serverpart);
+ if ($addSession) {
+ $relative = common_inject_session($relative, $serverpart);
+ }
return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
}
@@ -1031,25 +1175,30 @@ function common_enqueue_notice($notice)
return true;
}
-function common_broadcast_profile($profile)
+/**
+ * Broadcast profile updates to OMB and other remote subscribers.
+ *
+ * Since this may be slow with a lot of subscribers or bad remote sites,
+ * this is run through the background queues if possible.
+ */
+function common_broadcast_profile(Profile $profile)
{
- // XXX: optionally use a queue system like http://code.google.com/p/microapps/wiki/NQDQ
- require_once(INSTALLDIR.'/lib/omb.php');
- omb_broadcast_profile($profile);
- // XXX: Other broadcasts...?
+ $qm = QueueManager::get();
+ $qm->enqueue($profile, "profile");
return true;
}
function common_profile_url($nickname)
{
- return common_local_url('showstream', array('nickname' => $nickname));
+ return common_local_url('showstream', array('nickname' => $nickname),
+ null, null, false);
}
// Should make up a reasonable root URL
function common_root_url($ssl=false)
{
- $url = common_path('', $ssl);
+ $url = common_path('', $ssl, false);
$i = strpos($url, '?');
if ($i !== false) {
$url = substr($url, 0, $i);
@@ -1334,7 +1483,8 @@ function common_remove_magic_from_request()
function common_user_uri(&$user)
{
- return common_local_url('userbyid', array('id' => $user->id));
+ return common_local_url('userbyid', array('id' => $user->id),
+ null, null, false);
}
function common_notice_uri(&$notice)
@@ -1514,6 +1664,7 @@ function common_database_tablename($tablename)
*/
function common_shorten_url($long_url)
{
+ $long_url = trim($long_url);
$user = common_current_user();
if (empty($user)) {
// common current user does not find a user when called from the XMPP daemon
@@ -1528,7 +1679,7 @@ function common_shorten_url($long_url)
return $long_url;
}else{
//URL was shortened, so return the result
- return $shortenedUrl;
+ return trim($shortenedUrl);
}
}
@@ -1605,7 +1756,8 @@ function common_url_to_nickname($url)
# Strip starting, ending slashes
$path = preg_replace('@/$@', '', $parts['path']);
$path = preg_replace('@^/@', '', $path);
- if (strpos($path, '/') === false) {
+ $path = basename($path);
+ if ($path) {
return common_nicknamize($path);
}
}
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index c7276b56f..3e2f7c7b4 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -9,76 +9,82 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:05:58+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:55:52+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
"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"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Ù†Ùاذ"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "إعدادات الوصول إلى الموقع"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "تسجيل"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "خاص"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "بالدعوة Ùقط"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "خاص"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Ù…Ùغلق"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "بالدعوة Ùقط"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "عطّل التسجيل الجديد."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "أرسل"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Ù…Ùغلق"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Ø­Ùظ إعدادت الوصول"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "احÙظ"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "لا صÙحة كهذه"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -92,73 +98,82 @@ msgstr "لا صÙحة كهذه"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "لا مستخدم كهذا."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s والأصدقاء, الصÙحة %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s والأصدقاء"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr ""
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr ""
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr ""
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "أنت والأصدقاء"
@@ -176,20 +191,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيلة API."
@@ -221,8 +236,9 @@ msgstr "تعذّر تحديث المستخدم."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "ليس للمستخدم مل٠شخصي."
@@ -246,7 +262,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -287,7 +303,7 @@ msgstr "رسالة مباشرة %s"
#: actions/apidirectmessage.php:105
#, php-format
msgid "All the direct messages sent to %s"
-msgstr ""
+msgstr "كل الرسائل المباشرة التي أرسلت إلى %s"
#: actions/apidirectmessagenew.php:126
msgid "No message text!"
@@ -356,68 +372,68 @@ msgstr "تعذّر تحديد المستخدم المصدر."
msgid "Could not find target user."
msgstr "تعذّر إيجاد المستخدم الهدÙ."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "الاسم المستعار مستخدم بالÙعل. جرّب اسمًا آخرًا."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "ليس اسمًا مستعارًا صحيحًا."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "الصÙحة الرئيسية ليست عنونًا صالحًا."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "الاسم الكامل طويل جدا (الأقصى 255 حرÙًا)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr ""
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr ""
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "كنيات كيرة! العدد الأقصى هو %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "كنية غير صالحة: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -428,15 +444,15 @@ msgstr ""
msgid "Group not found!"
msgstr "لم توجد المجموعة!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
@@ -445,7 +461,7 @@ msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
msgid "You are not a member of this group."
msgstr "لست عضوًا ÙÙŠ هذه المجموعة"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "لم يمكن إزالة المستخدم %1$s من المجموعة %2$s."
@@ -477,7 +493,7 @@ msgstr "حجم غير صالح."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -486,7 +502,7 @@ msgstr "حجم غير صالح."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -520,7 +536,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -543,13 +559,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "الحساب"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -630,18 +646,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "مسار %s الزمني"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -652,12 +656,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمني العام"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -672,7 +676,7 @@ msgstr "كرر إلى %s"
msgid "Repeats of %s"
msgstr "تكرارات %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومة ب%s"
@@ -693,8 +697,7 @@ msgstr "لا مرÙÙ‚ كهذا."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "لا اسم مستعار."
@@ -706,7 +709,7 @@ msgstr "لا حجم."
msgid "Invalid size."
msgstr "حجم غير صالح."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ø£Ùتار"
@@ -714,7 +717,7 @@ msgstr "Ø£Ùتار"
#: actions/avatarsettings.php:78
#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
+msgstr "بإمكانك رÙع Ø£Ùتارك الشخصي. أقصى حجم للمل٠هو %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
@@ -723,30 +726,30 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "إعدادات الأÙتار"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
-msgstr "الأصلي"
+msgstr "الأصل"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
-msgstr "عاين"
+msgstr "معاينة"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "احذÙ"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "ارÙع"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -754,7 +757,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -786,22 +789,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "لا"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "لا تمنع هذا المستخدم"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "نعم"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -809,39 +812,43 @@ msgstr "امنع هذا المستخدم"
msgid "Failed to save block information."
msgstr "Ùشل Ø­Ùظ معلومات المنع."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "لا مجموعة كهذه."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s ملÙات ممنوعة, الصÙحة %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "ألغ منع المستخدم من المجموعة"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "ألغ٠المنع"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "ألغ٠منع هذا المستخدم"
@@ -897,19 +904,17 @@ msgid "Conversation"
msgstr "محادثة"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "الإشعارات"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
+msgstr "يجب أن تسجل الدخول لتحذ٠تطبيقا."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "لم يوجد رمز التأكيد."
+msgstr "لم يوجد التطبيق."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
@@ -918,14 +923,13 @@ msgstr "أنت لست مالك هذا التطبيق."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "عدّل التطبيق"
+msgstr "احذ٠هذا التطبيق"
#: actions/deleteapplication.php:149
msgid ""
@@ -935,21 +939,20 @@ msgid ""
msgstr ""
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "لا تحذ٠هذا الإشعار"
+msgstr "لا تحذ٠هذا التطبيق"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "احذ٠هذا الإشعار"
+msgstr "احذ٠هذا التطبيق"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "لست والجًا."
@@ -976,7 +979,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -992,18 +995,18 @@ msgstr "يمكنك حذ٠المستخدمين المحليين Ùقط."
msgid "Delete user"
msgstr "احذ٠المستخدم"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "احذ٠هذا المستخدم"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "التصميم"
@@ -1054,7 +1057,7 @@ msgstr "الخلÙية"
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr ""
+msgstr "بإمكانك رÙع صورة خلÙية للموقع. أقصى حجم للمل٠هو %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -1104,6 +1107,18 @@ msgstr "استعد التصميمات المبدئية"
msgid "Reset back to default"
msgstr "ارجع إلى المبدئي"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "أرسل"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "احÙظ التصميم"
@@ -1117,12 +1132,11 @@ msgid "Add to favorites"
msgstr "أض٠إلى المÙضلات"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "لا مستند كهذا."
+msgstr "لا مستند باسم \"%s\""
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
msgstr "عدّل التطبيق"
@@ -1196,29 +1210,29 @@ msgstr "عدّل مجموعة %s"
msgid "You must be logged in to create a group."
msgstr "يجب أن تكون والجًا لتنشئ مجموعة."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "يجب أن تكون إداريا لتعدل المجموعة."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "استخدم هذا النموذج لتعديل المجموعة."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr ""
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "تعذر تحديث المجموعة."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Ø­ÙÙظت الخيارات."
@@ -1302,15 +1316,15 @@ msgstr "أرسل لي بريدًا إلكرتونيًا عندما يضي٠أح
#: actions/emailsettings.php:169
msgid "Send me email when someone sends me a private message."
-msgstr ""
+msgstr "أرسل لي بريدًا إلكترونيًا عندما يرسل لي أحد رسالة خاصة."
#: actions/emailsettings.php:174
msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "أرسل لي بريدًا إلكترونيًا عندما يرسل لي أحدهم \"@-رد\"."
+msgstr "أرسل لي بريدًا إلكترونيًا عندما يرسل لي أحد \"@-رد\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
-msgstr ""
+msgstr "اسمح لأصدقائي بتنبيهي ومراسلتي عبر البريد الإلكتروني."
#: actions/emailsettings.php:185
msgid "I want to post notices by email."
@@ -1318,7 +1332,7 @@ msgstr "أريد أن أرسل الملاحظات عبر البريد الإلك
#: actions/emailsettings.php:191
msgid "Publish a MicroID for my email address."
-msgstr ""
+msgstr "انشر هوية مصغّرة لعنوان بريدي الإلكتروني."
#: actions/emailsettings.php:302 actions/imsettings.php:264
#: actions/othersettings.php:180 actions/smssettings.php:284
@@ -1334,7 +1348,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1387,7 +1401,7 @@ msgstr "لا عنوان بريد إلكتروني وارد."
#: actions/emailsettings.php:456 actions/emailsettings.php:478
#: actions/smssettings.php:528 actions/smssettings.php:552
msgid "Couldn't update user record."
-msgstr ""
+msgstr "تعذّر تحديث سجل المستخدم."
#: actions/emailsettings.php:459 actions/smssettings.php:531
msgid "Incoming email address removed."
@@ -1445,7 +1459,7 @@ msgstr "إشعارات %s المÙÙضلة"
#: actions/favoritesrss.php:115
#, php-format
msgid "Updates favored by %1$s on %2$s!"
-msgstr ""
+msgstr "الإشعارات التي Ùضلها %1$s ÙÙŠ %2$s!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@@ -1518,6 +1532,25 @@ msgstr "لا مل٠كهذا."
msgid "Cannot read file."
msgstr "تعذّرت قراءة الملÙ."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "حجم غير صالح."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "المستخدم مسكت من قبل."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1547,7 +1580,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙŠ المجموعة."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1579,91 +1612,97 @@ msgstr "لا هوية."
msgid "You must be logged in to edit a group."
msgstr "يجب أن تلج لتÙعدّل المجموعات."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "تصميم المجموعة"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "تعذّر تحديث تصميمك."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr ""
+msgstr "Ø­ÙÙظت تÙضيلات التصميم."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "شعار المجموعة"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
+msgstr "بإمكانك رÙع صورة شعار مجموعتك. أقصى حجم للمل٠هو %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "المستخدم بدون مل٠مطابق."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Ø­Ùدّث الشعار."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Ùشل رÙع الشعار."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "أعضاء مجموعة %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "قائمة بمستخدمي هذه المجموعة."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr ""
+msgstr "اجعل المستخدم إداريًا ÙÙŠ المجموعة"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "مسار %s الزمني"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "مجموعات"
@@ -1816,16 +1855,16 @@ msgstr "هذه ليست هويتك ÙÙŠ جابر."
#: actions/inbox.php:59
#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr ""
+msgstr "صندوق %1$s الوارد - صÙحة %2$d"
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
-msgstr ""
+msgstr "صندوق %s الوارد"
#: actions/inbox.php:115
msgid "This is your inbox, which lists your incoming private messages."
-msgstr ""
+msgstr "هذا صندوق بريدك الوارد، والذي يسرد رسائلك الخاصة الواردة."
#: actions/invite.php:39
msgid "Invites have been disabled."
@@ -1876,7 +1915,7 @@ msgstr ""
#: actions/invite.php:162
msgid ""
"Use this form to invite your friends and colleagues to use this service."
-msgstr ""
+msgstr "استخدم هذا النموذج لدعوة أصدقائك وزملائك لاستخدام هذه الخدمة."
#: actions/invite.php:187
msgid "Email addresses"
@@ -1894,16 +1933,18 @@ msgstr "رسالة شخصية"
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr "أرسل"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1938,7 +1979,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "يجب أن تلج لتنضم إلى مجموعة."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "لا اسم مستعار."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s انضم للمجموعة %2$s"
@@ -1947,11 +1993,11 @@ msgstr "%1$s انضم للمجموعة %2$s"
msgid "You must be logged in to leave a group."
msgstr "يجب أن تلج لتغادر مجموعة."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "لست عضوا ÙÙŠ تلك المجموعة."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ترك المجموعة %2$s"
@@ -1968,8 +2014,7 @@ msgstr "اسم المستخدم أو كلمة السر غير صحيحان."
msgid "Error setting user. You are probably not authorized."
msgstr "خطأ أثناء ضبط المستخدم. لست Ù…Ùصرحًا على الأرجح."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ù„Ùج"
@@ -1983,7 +2028,7 @@ msgstr "تذكّرني"
#: actions/login.php:237 actions/register.php:480
msgid "Automatically login in the future; not for shared computers!"
-msgstr ""
+msgstr "Ù„Ùج تلقائيًا ÙÙŠ المستقبل؛ هذا الخيار ليس Ù…Ùعدًا للحواسيب المشتركة!"
#: actions/login.php:247
msgid "Lost or forgotten password?"
@@ -1994,6 +2039,7 @@ msgid ""
"For security reasons, please re-enter your user name and password before "
"changing your settings."
msgstr ""
+"لأسباب أمنية، من Ùضلك أعد إدخال اسم مستخدمك وكلمة سرك قبل تغيير إعداداتك."
#: actions/login.php:270
#, php-format
@@ -2026,7 +2072,6 @@ msgid "No current status"
msgstr "لا حالة حالية"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
msgstr "تطبيق جديد"
@@ -2211,8 +2256,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@@ -2279,20 +2324,20 @@ msgstr "توكن الدخول انتهى."
#: actions/outbox.php:58
#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr ""
+msgstr "صندوق %1$s الصادر - صÙحة %2$d"
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
-msgstr ""
+msgstr "صندوق %s الصادر"
#: actions/outbox.php:116
msgid "This is your outbox, which lists private messages you have sent."
-msgstr ""
+msgstr "هذا صندوق بريدك الصادر، والذي يسرد الرسائل الخاصة التي أرسلتها."
#: actions/passwordsettings.php:58
msgid "Change password"
-msgstr "غيّر كلمة السر"
+msgstr "تغيير كلمة السر"
#: actions/passwordsettings.php:69
msgid "Change your password."
@@ -2312,7 +2357,7 @@ msgstr "كلمة سر جديدة"
#: actions/passwordsettings.php:109
msgid "6 or more characters"
-msgstr ""
+msgstr "6 أحر٠أو أكثر"
#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
#: actions/register.php:433 actions/smssettings.php:134
@@ -2351,7 +2396,8 @@ msgstr "تعذّر Ø­Ùظ كلمة السر الجديدة."
msgid "Password saved."
msgstr "Ø­ÙÙظت كلمة السر."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2384,7 +2430,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "الموقع"
@@ -2472,7 +2517,7 @@ msgstr "دليل الخلÙيات"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
@@ -2523,13 +2568,13 @@ msgstr "ليس وسم أشخاص صالح: %s"
#: actions/peopletag.php:144
#, php-format
msgid "Users self-tagged with %1$s - page %2$d"
-msgstr ""
+msgstr "المستخدمون الذين وسموا أنÙسهم ب%1$s - الصÙحة %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوى إشعار غير صالح"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2549,10 +2594,10 @@ msgstr "معلومات المل٠الشخصي"
#: actions/profilesettings.php:108 lib/groupeditform.php:154
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr ""
+msgstr "1-64 حرÙًا إنجليزيًا أو رقمًا بدون نقاط أو مساÙات"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "الاسم الكامل"
@@ -2580,7 +2625,7 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2606,7 +2651,7 @@ msgid ""
msgstr ""
"سÙÙ… Ù†Ùسك (حرو٠وأرقام Ùˆ \"-\" Ùˆ \".\" Ùˆ \"_\")ØŒ اÙصلها بÙاصلة (',') أو مساÙØ©."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2632,7 +2677,7 @@ msgstr "اشترك تلقائيًا بأي شخص يشترك بي (ÙŠÙضل أن
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تÙختر المنطقة الزمنية."
@@ -2645,23 +2690,24 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "وسم غير صالح: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "لم يمكن Ø­Ùظ تÙضيلات الموقع."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "تعذّر Ø­Ùظ المل٠الشخصي."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "تعذّر Ø­Ùظ الوسوم."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Ø­ÙÙظت الإعدادات."
@@ -2674,45 +2720,45 @@ msgstr "وراء حد الصÙحة (%s)"
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "المسار الزمني العام، صÙحة %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "المسار الزمني العام"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "كن أول من ÙŠÙرسل!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2725,7 +2771,7 @@ msgstr ""
"الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! "
"([اقرأ المزيد](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2896,8 +2942,7 @@ msgstr "عذرا، رمز دعوة غير صالح."
msgid "Registration successful"
msgstr "نجح التسجيل"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "سجّل"
@@ -2936,7 +2981,7 @@ msgid "Same as password above. Required."
msgstr "Ù†Ùس كلمة السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -3020,7 +3065,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "اشترك"
@@ -3056,7 +3101,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية."
msgid "You already repeated that notice."
msgstr "أنت كررت هذه الملاحظة بالÙعل."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "مكرر"
@@ -3064,47 +3109,47 @@ msgstr "مكرر"
msgid "Repeated!"
msgstr "مكرر!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "الردود على %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "الردود على %s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr ""
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr ""
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr ""
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3116,6 +3161,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "المستخدم بدون مل٠مطابق."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "ستاتس نت"
@@ -3128,8 +3183,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "الجلسات"
@@ -3154,8 +3210,8 @@ msgstr "تنقيح الجلسة"
msgid "Turn on debugging output for sessions."
msgstr "مكّن تنقيح Ù…Ùخرجات الجلسة."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "اذ٠إعدادت الموقع"
@@ -3185,8 +3241,8 @@ msgstr "المنظمة"
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3247,28 +3303,28 @@ msgstr "إشعارات %s المÙÙضلة"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr ""
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr ""
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr ""
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3277,7 +3333,7 @@ msgstr ""
"%s لم يض٠أي إشعارات إلى Ù…Ùضلته إلى الآن. أرسل شيئًا شيقًا ليضيÙÙ‡ إلى "
"Ù…Ùضلته. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3287,7 +3343,7 @@ msgstr ""
"%s لم يض٠أي إشعارات إلى Ù…Ùضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيÙÙ‡ إلى Ù…Ùضلته. :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "إنها إحدى وسائل مشاركة ما تحب."
@@ -3301,67 +3357,67 @@ msgstr "مجموعة %s"
msgid "%1$s group, page %2$d"
msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "مل٠المجموعة الشخصي"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "مسار"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "ملاحظة"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "الكنى"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3371,7 +3427,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3380,7 +3436,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3490,146 +3546,137 @@ msgid "User is already silenced."
msgstr "المستخدم مسكت من قبل."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "الإعدادات الأساسية لموقع StatusNet هذا."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صÙرًا."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "يجب أن تملك عنوان بريد إلكتروني صحيح."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "لغة غير معروÙØ© \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرÙًا."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكتروني للاتصال بموقعك"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقة الزمنية المبدئية"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقة الزمنية المبدئية للموقع؛ ت‌ع‌م عادة."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "لغة الموقع المبدئية"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "ÙÙŠ مهمة Ù…Ùجدولة"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "التكرار"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحرو٠ÙÙŠ الإشعارات."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "رسالة جديدة"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "إشعار الموقع"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "إعدادات الرسائل القصيرة"
@@ -3697,7 +3744,7 @@ msgstr ""
#: actions/smssettings.php:374
msgid "That is the wrong confirmation number."
-msgstr ""
+msgstr "إن رقم التأكيد هذا خاطئ."
#: actions/smssettings.php:405
msgid "That is not your phone number."
@@ -3720,21 +3767,90 @@ msgstr ""
#: actions/smssettings.php:498
msgid "No code entered"
+msgstr "لم تدخل رمزًا"
+
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
msgstr ""
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "غيّر ضبط الموقع"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "ÙÙŠ مهمة Ù…Ùجدولة"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "التكرار"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "بلّغ عن المسار"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "اذ٠إعدادت الموقع"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "تعذّر Ø­Ùظ الاشتراك."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "ليس Ù…Ùستخدمًا محليًا."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "هذا الإجراء يقبل طلبات POST Ùقط."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "لا مل٠كهذا."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Ù…Ùشترك"
@@ -3794,7 +3910,7 @@ msgstr "هؤلاء الأشخاص الذي تستمع إليهم."
msgid "These are the people whose notices %s listens to."
msgstr "هؤلاء الأشخاص الذي يستمع %s إليهم."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3804,35 +3920,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "جابر"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "رسائل قصيرة"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "الإشعارات الموسومة ب%s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -3882,7 +3998,7 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3906,76 +4022,77 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "المستخدم"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "رسالة ترحيب غير صالحة. أقصى طول هو 255 حرÙ."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "المل٠الشخصي"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "حد السيرة"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "مستخدمون جدد"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "ترحيب المستخدمين الجدد"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "نص الترحيب بالمستخدمين الجدد (255 حرÙًا كحد أقصى)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "الاشتراك المبدئي"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "أشرك المستخدمين الجدد بهذا المستخدم تلقائيًا."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "الدعوات"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "الدعوات Ù…ÙÙعلة"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4080,7 +4197,7 @@ msgstr "تصميم المل٠الشخصي"
msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
-msgstr ""
+msgstr "خصّص أسلوب عرض ملÙÙƒ بصورة خلÙية ومخطط ألوان من اختيارك."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
@@ -4095,16 +4212,22 @@ msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
msgid "Search for more groups"
msgstr "ابحث عن المزيد من المجموعات"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
-msgstr ""
+msgstr "%s ليس عضوًا ÙÙŠ أي مجموعة."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4116,10 +4239,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
+"هذا الموقع يشغله %1$s النسخة %2$s، حقوق النشر 2008-2010 StatusNet, Inc "
+"ومساهموها."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "المساهمون"
#: actions/version.php:168
msgid ""
@@ -4146,9 +4271,9 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr "ملحقات"
+msgstr "الملحقات"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "النسخة"
@@ -4185,6 +4310,10 @@ msgstr "ليس جزءا من المجموعة."
msgid "Group leave failed."
msgstr "ترك المجموعة Ùشل."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "تعذر تحديث المجموعة المحلية."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4202,66 +4331,100 @@ msgstr "تعذّر إدراج الرسالة."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
-
-#: classes/Notice.php:1271
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Ù…Ùشترك أصلا!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "لقد منعك المستخدم."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "غير مشترك!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "لم يمكن حذ٠اشتراك ذاتي."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "تعذّر حذ٠الاشتراك."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "تعذّر حذ٠الاشتراك."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙŠ %1$s يا @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعة."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "تعذّر ضبط عضوية المجموعة."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضوية المجموعة."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "تعذّر Ø­Ùظ الاشتراك."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "غيّر إعدادات ملÙÙƒ الشخصي"
@@ -4299,124 +4462,176 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صÙحة غير Ù…Ùعنونة"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "الرئيسية"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "المل٠الشخصي ومسار الأصدقاء الزمني"
-#: lib/action.php:441
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "الصÙحة الشخصية"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "غير كلمة سرّك"
+
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "اتصالات"
-#: lib/action.php:444
+#: lib/action.php:443
+#, fuzzy
msgid "Connect"
msgstr "اتصل"
-#: lib/action.php:444
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ادعÙ"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "إداري"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
+msgstr "ادع٠أصدقائك وزملائك للانضمام إليك ÙÙŠ %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "اخرج"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "اخرج"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "أنشئ حسابًا"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "سجّل"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ù„Ùج إلى الموقع"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "مساعدة"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ù„Ùج"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "ابحث"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "مساعدة"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr "ابحث عن أشخاص أو نص"
+msgstr "ابحث عن أشخاص أو نصوص"
+
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "ابحث"
-#: lib/action.php:493
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "إشعار الموقع"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصÙحة"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "مساعدة"
+
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئلة المكررة"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
-msgstr ""
+msgstr "الجسر"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "رخصة برنامج StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4425,12 +4640,12 @@ msgstr ""
"**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4441,96 +4656,145 @@ msgstr ""
"المتوÙر تحت [رخصة غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصة محتوى الموقع"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "الرخصة."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "التغييرات لهذه اللوحة غير مسموح بها."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "تعذّر حذ٠إعدادات التصميم."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ضبط الموقع الأساسي"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ضبط التصميم"
-#: lib/adminpanelaction.php:322
-#, fuzzy
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "التصميم"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "ضبط المسارات"
+msgstr "ضبط المستخدم"
-#: lib/adminpanelaction.php:327
-#, fuzzy
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "المستخدم"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
-msgstr "ضبط التصميم"
+msgstr "ضبط الحساب"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ضبط المسارات"
-#: lib/adminpanelaction.php:337
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
-msgstr "ضبط التصميم"
+msgstr "ضبط الجلسات"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "إشعار الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ضبط المسارات"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4620,11 +4884,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "وسوم هذا المرÙÙ‚"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "تغيير كلمة السر Ùشل"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "تغيير كلمة السر غير مسموح به"
@@ -4775,54 +5039,64 @@ msgstr "خطأ أثناء Ø­Ùظ الإشعار."
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "لا مستخدم كهذا."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Ù…Ùشترك ب%s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "ألغ٠الاشتراك"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "لست Ù…Ùشتركًا بأي أحد."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "لست مشتركًا بأحد."
@@ -4832,11 +5106,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "لا أحد مشترك بك."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "لا أحد مشترك بك."
@@ -4846,11 +5120,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "لست عضوًا ÙÙŠ أي مجموعة."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "لست عضوًا ÙÙŠ أي مجموعة."
@@ -4860,7 +5134,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4874,6 +5148,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -4901,19 +5176,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -5010,6 +5285,11 @@ msgstr ""
msgid "Go"
msgstr "اذهب"
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5099,23 +5379,23 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "نوع مل٠غير معروÙ"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "ميجابايت"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "كيلوبايت"
@@ -5139,11 +5419,11 @@ msgstr "غادر"
#: lib/logingroupnav.php:80
msgid "Login with a username and password"
-msgstr ""
+msgstr "Ù„Ùج باسم مستخدم وكلمة سر"
#: lib/logingroupnav.php:86
msgid "Sign up for a new account"
-msgstr ""
+msgstr "سجّل حسابًا جديدًا"
#: lib/mail.php:172
msgid "Email address confirmation"
@@ -5204,7 +5484,7 @@ msgstr "السيرة: %s"
#: lib/mail.php:286
#, php-format
msgid "New email address for posting to %s"
-msgstr ""
+msgstr "عنوان بريد إلكتروني جديد للإرسال إلى %s"
#: lib/mail.php:289
#, php-format
@@ -5226,12 +5506,12 @@ msgstr "حالة %s"
#: lib/mail.php:439
msgid "SMS confirmation"
-msgstr ""
+msgstr "تأكيد الرسالة القصيرة"
#: lib/mail.php:463
#, php-format
msgid "You've been nudged by %s"
-msgstr ""
+msgstr "لقد نبهك %s"
#: lib/mail.php:467
#, php-format
@@ -5276,7 +5556,7 @@ msgstr ""
#: lib/mail.php:559
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
+msgstr "لقد أضا٠%s (@%s) إشعارك إلى Ù…Ùضلاته"
#: lib/mail.php:561
#, php-format
@@ -5302,7 +5582,7 @@ msgstr ""
#: lib/mail.php:624
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "لقد أرسل %s (@%s) إشعارًا إليك"
#: lib/mail.php:626
#, php-format
@@ -5329,7 +5609,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "من"
@@ -5418,6 +5698,11 @@ msgstr "إلى"
msgid "Available characters"
msgstr "المحار٠المتوÙرة"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "أرسل"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "أرسل إشعارًا"
@@ -5449,48 +5734,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "Ø´"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "ج"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "ر"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "غ"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "ÙÙŠ"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "ÙÙŠ السياق"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "مكرر بواسطة"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5522,10 +5807,6 @@ msgstr "خطأ أثناء إدراج المل٠الشخصي البعيد"
msgid "Duplicate notice"
msgstr "ضاع٠الإشعار"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "تعذّر إدراج اشتراك جديد."
@@ -5565,9 +5846,9 @@ msgstr "وسوم ÙÙŠ إشعارات %s"
#: lib/plugin.php:114
msgid "Unknown"
-msgstr "غير معروÙ"
+msgstr "غير معروÙØ©"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "الاشتراكات"
@@ -5575,23 +5856,23 @@ msgstr "الاشتراكات"
msgid "All subscriptions"
msgstr "جميع الاشتراكات"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "المشتركون"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "جميع المشتركين"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "هوية المستخدم"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو منذ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "كل المجموعات"
@@ -5631,7 +5912,12 @@ msgstr "أأكرّر هذا الإشعار؟ّ"
msgid "Repeat this notice"
msgstr "كرّر هذا الإشعار"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "امنع هذا المستخدم من هذه المجموعة"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5651,6 +5937,10 @@ msgstr "ابحث ÙÙŠ الموقع"
msgid "Keyword(s)"
msgstr "الكلمات المÙتاحية"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ابحث"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ابحث ÙÙŠ المساعدة"
@@ -5702,34 +5992,15 @@ msgstr "الأشخاص المشتركون ب%s"
msgid "Groups %s is a member of"
msgstr "المجموعات التي %s عضو Ùيها"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Ù…Ùشترك أصلا!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "لقد منعك المستخدم."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "تعذّر الاشتراك."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "غير مشترك!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "لم يمكن حذ٠اشتراك ذاتي."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "تعذّر حذ٠الاشتراك."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -5780,67 +6051,83 @@ msgstr "عدّل الأÙتار"
msgid "User actions"
msgstr "تصرÙات المستخدم"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "عدّل إعدادات المل٠الشخصي"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "عدّل"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "أرسل رسالة مباشرة إلى هذا المستخدم"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "رسالة"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "مل٠المستخدم الشخصي"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "الإداريون"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index 2940486d8..dd00dbf7d 100644
--- a/locale/arz/LC_MESSAGES/statusnet.po
+++ b/locale/arz/LC_MESSAGES/statusnet.po
@@ -10,79 +10,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:06:01+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:55:56+0000\n"
"Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"
"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"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Ù†Ùاذ"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "اذ٠إعدادت الموقع"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "سجّل"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "خاص"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "بالدعوه Ùقط"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "خاص"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Ù…Ùغلق"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "بالدعوه Ùقط"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "عطّل التسجيل الجديد."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "أرسل"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Ù…Ùغلق"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "اذ٠إعدادت الموقع"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "أرسل"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "لا صÙحه كهذه"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -96,73 +104,82 @@ msgstr "لا صÙحه كهذه"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "لا مستخدم كهذا."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s Ùˆ الصحاب, صÙحه %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s والأصدقاء"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr ""
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr ""
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr ""
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "أنت والأصدقاء"
@@ -180,22 +197,22 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
-msgstr "لم يتم العثور على وسيله API."
+msgstr "الـ API method مش موجوده."
#: actions/apiaccountupdatedeliverydevice.php:85
#: actions/apiaccountupdateprofile.php:89
@@ -225,8 +242,9 @@ msgstr "تعذّر تحديث المستخدم."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "ليس للمستخدم مل٠شخصى."
@@ -250,7 +268,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -263,7 +281,7 @@ msgstr "تعذّر تحديث تصميمك."
#: actions/apiblockcreate.php:105
msgid "You cannot block yourself!"
-msgstr "لا يمكنك منع Ù†Ùسك!"
+msgstr "ما ينÙعش تمنع Ù†Ùسك!"
#: actions/apiblockcreate.php:126
msgid "Block user failed."
@@ -360,68 +378,68 @@ msgstr ""
msgid "Could not find target user."
msgstr "تعذّر إيجاد المستخدم الهدÙ."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "ليس اسمًا مستعارًا صحيحًا."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "الصÙحه الرئيسيه ليست عنونًا صالحًا."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "الاسم الكامل طويل جدا (الأقصى 255 حرÙًا)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr ""
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr ""
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "كنيه غير صالحة: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -432,15 +450,15 @@ msgstr ""
msgid "Group not found!"
msgstr "لم توجد المجموعة!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "ما Ù†Ùعش يضم %1$s للجروپ %2$s."
@@ -449,7 +467,7 @@ msgstr "ما Ù†Ùعش يضم %1$s للجروپ %2$s."
msgid "You are not a member of this group."
msgstr ""
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "ما Ù†Ùعش يتشال اليوزر %1$s من الجروپ %2$s."
@@ -481,7 +499,7 @@ msgstr "حجم غير صالح."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -490,7 +508,7 @@ msgstr "حجم غير صالح."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -524,7 +542,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -547,13 +565,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "الحساب"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -591,11 +609,11 @@ msgstr "لا إشعار كهذا."
#: actions/apistatusesretweet.php:83
msgid "Cannot repeat your own notice."
-msgstr "لا يمكنك تكرار ملحوظتك الخاصه."
+msgstr "مش ناÙعه تتكرر الملاحظتك بتاعتك."
#: actions/apistatusesretweet.php:91
msgid "Already repeated that notice."
-msgstr "كرر بالÙعل هذه الملاحظه."
+msgstr "الملاحظه اتكررت Ùعلا."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -634,18 +652,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "مسار %s الزمني"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -656,12 +662,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمنى العام"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -676,7 +682,7 @@ msgstr "كرر إلى %s"
msgid "Repeats of %s"
msgstr "تكرارات %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومه ب%s"
@@ -697,8 +703,7 @@ msgstr "لا مرÙÙ‚ كهذا."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "لا اسم مستعار."
@@ -710,7 +715,7 @@ msgstr "لا حجم."
msgid "Invalid size."
msgstr "حجم غير صالح."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ø£Ùتار"
@@ -727,30 +732,30 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "إعدادات الأÙتار"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "الأصلي"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "عاين"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "احذÙ"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "ارÙع"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -758,7 +763,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -790,22 +795,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "لا"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "لا تمنع هذا المستخدم"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "نعم"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -813,39 +818,43 @@ msgstr "امنع هذا المستخدم"
msgid "Failed to save block information."
msgstr "Ùشل Ø­Ùظ معلومات المنع."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "لا مجموعه كهذه."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s Ùايلات معمول ليها بلوك, الصÙحه %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "ألغ منع المستخدم من المجموعة"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "ألغ٠المنع"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "ألغ٠منع هذا المستخدم"
@@ -901,7 +910,7 @@ msgid "Conversation"
msgstr "محادثة"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "الإشعارات"
@@ -922,7 +931,7 @@ msgstr "انت مش بتملك الapplication دى."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -948,12 +957,13 @@ msgstr "لا تحذ٠هذا الإشعار"
msgid "Delete this application"
msgstr "احذ٠هذا الإشعار"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "لست والجًا."
@@ -980,7 +990,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -996,18 +1006,18 @@ msgstr "يمكنك حذ٠المستخدمين المحليين Ùقط."
msgid "Delete user"
msgstr "احذ٠المستخدم"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "احذ٠هذا المستخدم"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "التصميم"
@@ -1108,6 +1118,18 @@ msgstr "استعد التصميمات المبدئية"
msgid "Reset back to default"
msgstr "ارجع إلى المبدئي"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "أرسل"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "احÙظ التصميم"
@@ -1200,29 +1222,29 @@ msgstr "عدّل مجموعه %s"
msgid "You must be logged in to create a group."
msgstr "يجب أن تكون والجًا لتنشئ مجموعه."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "لازم تكون ادارى علشان تعدّل الجروپ."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "استخدم هذا النموذج لتعديل المجموعه."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr ""
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "تعذر تحديث المجموعه."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Ø­ÙÙظت الخيارات."
@@ -1338,7 +1360,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1468,11 +1490,11 @@ msgstr "اختيار لبعض المستخدمين المتميزين على %s"
#: actions/file.php:34
msgid "No notice ID."
-msgstr "لا رقم ملاحظه."
+msgstr "ما Ùيش ملاحظة ID."
#: actions/file.php:38
msgid "No notice."
-msgstr "لا ملاحظه."
+msgstr "ما Ùيش ملاحظه."
#: actions/file.php:42
msgid "No attachments."
@@ -1480,7 +1502,7 @@ msgstr "لا مرÙقات."
#: actions/file.php:51
msgid "No uploaded attachments."
-msgstr "لا مرÙقات مرÙوعه."
+msgstr "ما Ùيش Ùايلات اتعمللها upload."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1522,6 +1544,25 @@ msgstr "لا مل٠كهذا."
msgid "Cannot read file."
msgstr "تعذّرت قراءه الملÙ."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "حجم غير صالح."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "المستخدم مسكت من قبل."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1551,7 +1592,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙ‰ المجموعه."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1583,91 +1624,97 @@ msgstr "لا هويه."
msgid "You must be logged in to edit a group."
msgstr "يجب أن تلج لتÙعدّل المجموعات."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "تصميم المجموعة"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "تعذّر تحديث تصميمك."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "شعار المجموعة"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "يوزر من-غير پروÙايل زيّه."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Ø­Ùدّث الشعار."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Ùشل رÙع الشعار."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "أعضاء مجموعه %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s اعضاء الجروپ, صÙحه %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "قائمه بمستخدمى هذه المجموعه."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "مسار %s الزمني"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "مجموعات"
@@ -1898,16 +1945,19 @@ msgstr "رساله شخصية"
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "أرسل"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1942,7 +1992,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "لا اسم مستعار."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s دخل جروپ %2$s"
@@ -1951,11 +2006,11 @@ msgstr "%1$s دخل جروپ %2$s"
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "لست عضوا ÙÙ‰ تلك المجموعه."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ساب جروپ %2$s"
@@ -1972,8 +2027,7 @@ msgstr "اسم المستخدم أو كلمه السر غير صحيحان."
msgid "Error setting user. You are probably not authorized."
msgstr "خطأ أثناء ضبط المستخدم. لست Ù…Ùصرحًا على الأرجح."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ù„Ùج"
@@ -2213,8 +2267,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr " مش نظام بيانات مدعوم."
@@ -2353,7 +2407,8 @@ msgstr "تعذّر Ø­Ùظ كلمه السر الجديده."
msgid "Password saved."
msgstr "Ø­ÙÙظت كلمه السر."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2386,7 +2441,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "الموقع"
@@ -2474,7 +2528,7 @@ msgstr "دليل الخلÙيات"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
@@ -2527,11 +2581,11 @@ msgstr "ليس وسم أشخاص صالح: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوى إشعار غير صالح"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2554,7 +2608,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "الاسم الكامل"
@@ -2582,7 +2636,7 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2607,7 +2661,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2633,7 +2687,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تÙختر المنطقه الزمنيه."
@@ -2646,23 +2700,24 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "وسم غير صالح: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "لم يمكن Ø­Ùظ تÙضيلات الموقع."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "تعذّر Ø­Ùظ المل٠الشخصى."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "تعذّر Ø­Ùظ الوسوم."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Ø­ÙÙظت الإعدادات."
@@ -2675,45 +2730,45 @@ msgstr "وراء حد الصÙحه (%s)"
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "المسار الزمنى العام، صÙحه %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "المسار الزمنى العام"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "كن أول من ÙŠÙرسل!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2726,7 +2781,7 @@ msgstr ""
"الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! "
"([اقرأ المزيد](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2897,8 +2952,7 @@ msgstr "عذرا، رمز دعوه غير صالح."
msgid "Registration successful"
msgstr "نجح التسجيل"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "سجّل"
@@ -2937,7 +2991,7 @@ msgid "Same as password above. Required."
msgstr "Ù†Ùس كلمه السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -3021,7 +3075,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "اشترك"
@@ -3047,17 +3101,17 @@ msgstr ""
#: actions/repeat.php:64 actions/repeat.php:71
msgid "No notice specified."
-msgstr "لا ملاحظه محدده."
+msgstr "ما Ùيش ملاحظه متحدده."
#: actions/repeat.php:76
msgid "You can't repeat your own notice."
-msgstr "لا يمكنك تكرار ملاحظتك الشخصيه."
+msgstr "ما ينÙعش تكرر الملاحظه بتاعتك."
#: actions/repeat.php:90
msgid "You already repeated that notice."
-msgstr "أنت كررت هذه الملاحظه بالÙعل."
+msgstr "انت عيدت الملاحظه دى Ùعلا."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "مكرر"
@@ -3065,47 +3119,47 @@ msgstr "مكرر"
msgid "Repeated!"
msgstr "مكرر!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "الردود على %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "الردود على %s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr ""
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr ""
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr ""
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3117,6 +3171,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "يوزر من-غير پروÙايل زيّه."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3129,8 +3193,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "الجلسات"
@@ -3155,8 +3220,8 @@ msgstr "تنقيح الجلسة"
msgid "Turn on debugging output for sessions."
msgstr "مكّن تنقيح Ù…Ùخرجات الجلسه."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "اذ٠إعدادت الموقع"
@@ -3186,8 +3251,8 @@ msgstr "المنظمه"
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3248,28 +3313,28 @@ msgstr "إشعارات %s المÙÙضلة"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr ""
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr ""
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr ""
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3278,7 +3343,7 @@ msgstr ""
"%s لم يض٠أى إشعارات إلى Ù…Ùضلته إلى الآن. أرسل شيئًا شيقًا ليضيÙÙ‡ إلى "
"Ù…Ùضلته. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3288,7 +3353,7 @@ msgstr ""
"%s لم يض٠أى إشعارات إلى Ù…Ùضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
"register%%%%) وترسل شيئًا شيقًا ليضيÙÙ‡ إلى Ù…Ùضلته. :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "إنها إحدى وسائل مشاركه ما تحب."
@@ -3302,67 +3367,67 @@ msgstr "مجموعه %s"
msgid "%1$s group, page %2$d"
msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "مل٠المجموعه الشخصي"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "مسار"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "ملاحظة"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "الكنى"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3372,7 +3437,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3381,7 +3446,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3491,146 +3556,137 @@ msgid "User is already silenced."
msgstr "المستخدم مسكت من قبل."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "الإعدادات الأساسيه لموقع StatusNet هذا."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صÙرًا."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "لازم يكون عندك عنوان ايميل صالح."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "لغه مش معروÙÙ‡ \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرÙًا."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكترونى للاتصال بموقعك"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقه الزمنيه المبدئية"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقه الزمنيه المبدئيه للموقع؛ ت‌ع‌م عاده."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "لغه الموقع المبدئية"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "ÙÙ‰ مهمه Ù…Ùجدولة"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "التكرار"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحرو٠ÙÙ‰ الإشعارات."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "رساله جديدة"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "مشكله أثناء Ø­Ùظ الإشعار."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "إشعار الموقع"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "تظبيطات الـSMS"
@@ -3723,19 +3779,89 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "غيّر ضبط الموقع"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "ÙÙ‰ مهمه Ù…Ùجدولة"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "التكرار"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "بلّغ عن المسار"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "اذ٠إعدادت الموقع"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "تعذّر Ø­Ùظ الاشتراك."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "ليس Ù…Ùستخدمًا محليًا."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "لا مل٠كهذا."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Ù…Ùشترك"
@@ -3795,7 +3921,7 @@ msgstr "هؤلاء الأشخاص الذى تستمع إليهم."
msgid "These are the people whose notices %s listens to."
msgstr "هؤلاء الأشخاص الذى يستمع %s إليهم."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3805,35 +3931,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "جابر"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "رسائل قصيرة"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "الإشعارات الموسومه ب%s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -3858,7 +3984,7 @@ msgstr "صورة"
#: actions/tagother.php:141
msgid "Tag user"
-msgstr "اوسم المستخدم"
+msgstr "اعمل tag لليوزر"
#: actions/tagother.php:151
msgid ""
@@ -3883,7 +4009,7 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3893,7 +4019,7 @@ msgstr "لم تمنع هذا المستخدم."
#: actions/unsandbox.php:72
msgid "User is not sandboxed."
-msgstr "المستخدم ليس ÙÙ‰ صندوق الرمل."
+msgstr "اليوزر مش ÙÙ‰ السبوره."
#: actions/unsilence.php:72
msgid "User is not silenced."
@@ -3907,76 +4033,78 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "المستخدم"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "رساله ترحيب غير صالحه. أقصى طول هو 255 حرÙ."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "المل٠الشخصي"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "حد السيرة"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "مستخدمون جدد"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "ترحيب المستخدمين الجدد"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "نص الترحيب بالمستخدمين الجدد (255 حرÙًا كحد أقصى)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "الاشتراك المبدئي"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "أشرك المستخدمين الجدد بهذا المستخدم تلقائيًا."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "الدعوات"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "الدعوات Ù…ÙÙعلة"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4096,16 +4224,22 @@ msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4149,7 +4283,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "النسخه"
@@ -4186,10 +4320,15 @@ msgstr "مش جزء من الجروپ."
msgid "Group leave failed."
msgstr "الخروج من الجروپ Ùشل."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "تعذر تحديث المجموعه."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
-msgstr "لم يمكن إنشاء توكن الولوج ل%s"
+msgstr "ما Ù†Ùعش يتعمل امارة تسجيل دخول لـ %s"
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
@@ -4203,66 +4342,100 @@ msgstr "تعذّر إدراج الرساله."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
-
-#: classes/Notice.php:1271
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Ù…Ùشترك أصلا!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "لقد منعك المستخدم."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "غير مشترك!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "ما Ù†Ùعش يمسح الاشتراك الشخصى."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "تعذّر حذ٠الاشتراك."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "تعذّر حذ٠الاشتراك."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙ‰ %1$s يا @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعه."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "تعذّر ضبط عضويه المجموعه."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضويه المجموعه."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "تعذّر Ø­Ùظ الاشتراك."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "غيّر إعدادات ملÙÙƒ الشخصي"
@@ -4300,124 +4473,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صÙحه غير Ù…Ùعنونة"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "الرئيسية"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "المل٠الشخصى ومسار الأصدقاء الزمني"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "شخصية"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "غير كلمه سرّك"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "كونيكشونات (Connections)"
+
+#: lib/action.php:443
+#, fuzzy
msgid "Connect"
msgstr "اتصل"
-#: lib/action.php:444
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ادعÙ"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "إداري"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "اخرج"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "اخرج"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "أنشئ حسابًا"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "سجّل"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ù„Ùج إلى الموقع"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "مساعدة"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ù„Ùج"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "ابحث"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "مساعدة"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ابحث عن أشخاص أو نص"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "ابحث"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "إشعار الموقع"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصÙحة"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "مساعدة"
+
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئله المكررة"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4426,12 +4663,12 @@ msgstr ""
"**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4442,96 +4679,150 @@ msgstr ""
"المتوÙر تحت [رخصه غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصه محتوى الموقع"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "الرخصه."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "التغييرات مش مسموحه للـ لوحه دى."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "تعذّر حذ٠إعدادات التصميم."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ضبط الموقع الأساسي"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ضبط التصميم"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "التصميم"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "ضبط المسارات"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "المستخدم"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "ضبط التصميم"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ضبط المسارات"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "ضبط التصميم"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "إشعار الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ضبط المسارات"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4621,11 +4912,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "وسوم هذا المرÙÙ‚"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "تغيير الپاسوورد Ùشل"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "تغيير الپاسوورد مش مسموح"
@@ -4776,54 +5067,64 @@ msgstr "خطأ أثناء Ø­Ùظ الإشعار."
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "لا مستخدم كهذا."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Ù…Ùشترك ب%s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "ألغ٠الاشتراك"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "لست Ù…Ùشتركًا بأى أحد."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "لست مشتركًا بأحد."
@@ -4833,11 +5134,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "لا أحد مشترك بك."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "لا أحد مشترك بك."
@@ -4847,11 +5148,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "لست عضوًا ÙÙ‰ أى مجموعه."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "لست عضوًا ÙÙ‰ أى مجموعه."
@@ -4861,7 +5162,7 @@ msgstr[3] "أنت عضو ÙÙ‰ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4875,6 +5176,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -4902,19 +5204,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -5011,6 +5313,11 @@ msgstr ""
msgid "Go"
msgstr "اذهب"
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5100,23 +5407,23 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "نوع مل٠غير معروÙ"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "ميجابايت"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "كيلوبايت"
@@ -5320,7 +5627,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "من"
@@ -5409,6 +5716,12 @@ msgstr "إلى"
msgid "Available characters"
msgstr "المحار٠المتوÙرة"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "أرسل"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "أرسل إشعارًا"
@@ -5440,48 +5753,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "Ø´"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "ج"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "ر"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "غ"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "ÙÙŠ"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "ÙÙ‰ السياق"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "مكرر بواسطة"
+msgstr "متكرر من"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5513,10 +5826,6 @@ msgstr "خطأ أثناء إدراج المل٠الشخصى البعيد"
msgid "Duplicate notice"
msgstr "ضاع٠الإشعار"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "تعذّر إدراج اشتراك جديد."
@@ -5558,7 +5867,7 @@ msgstr ""
msgid "Unknown"
msgstr "مش معروÙ"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "الاشتراكات"
@@ -5566,23 +5875,23 @@ msgstr "الاشتراكات"
msgid "All subscriptions"
msgstr "جميع الاشتراكات"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "المشتركون"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "جميع المشتركين"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "هويه المستخدم"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو منذ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "كل المجموعات"
@@ -5622,7 +5931,12 @@ msgstr "كرر هذا الإشعار؟"
msgid "Repeat this notice"
msgstr "كرر هذا الإشعار"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "امنع هذا المستخدم من هذه المجموعة"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5642,6 +5956,10 @@ msgstr "ابحث ÙÙ‰ الموقع"
msgid "Keyword(s)"
msgstr "الكلمات المÙتاحية"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ابحث"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ابحث ÙÙ‰ المساعدة"
@@ -5693,34 +6011,15 @@ msgstr "الأشخاص المشتركون ب%s"
msgid "Groups %s is a member of"
msgstr "المجموعات التى %s عضو Ùيها"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Ù…Ùشترك أصلا!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "لقد منعك المستخدم."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "تعذّر الاشتراك."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "غير مشترك!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "لم يمكن حذ٠اشتراك ذاتى."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "تعذّر حذ٠الاشتراك."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -5771,67 +6070,83 @@ msgstr "عدّل الأÙتار"
msgid "User actions"
msgstr "تصرÙات المستخدم"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "عدّل إعدادات المل٠الشخصي"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "عدّل"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "أرسل رساله مباشره إلى هذا المستخدم"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "رسالة"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "مل٠المستخدم الشخصي"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "الإداريون"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index efe49b56a..e24c60c5a 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -9,77 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:17+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:55:59+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "ДоÑтъп"
-#: actions/accessadminpanel.php:65
-#, fuzzy
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
-msgstr "Запазване наÑтройките на Ñайта"
+msgstr "ÐаÑтройки за доÑтъп до Ñайта"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "РегиÑтриране"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "ЧаÑтен"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Само Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "ЧаÑтен"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Ðовите региÑтрации да Ñа Ñамо Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Затворен"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Само Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Изключване на новите региÑтрации."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Запазване"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Затворен"
-#: actions/accessadminpanel.php:189
-#, fuzzy
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
-msgstr "Запазване наÑтройките на Ñайта"
+msgstr "Запазване наÑтройките за доÑтъп"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Запазване"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "ÐÑма такака Ñтраница."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,78 +99,87 @@ msgstr "ÐÑма такака Ñтраница."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "ÐÑма такъв потребител"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s и приÑтели, Ñтраница %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s и приÑтели"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Вие и приÑтелите"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Бележки от %1$s и приÑтели в %2$s."
@@ -177,20 +192,20 @@ msgstr "Бележки от %1$s и приÑтели в %2$s."
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Ðе е открит методът в API."
@@ -222,8 +237,9 @@ msgstr "Грешка при обновÑване на потребителÑ."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "ПотребителÑÑ‚ нÑма профил."
@@ -247,7 +263,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -365,7 +381,7 @@ msgstr "Грешка при изтеглÑне на Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº"
msgid "Could not find target user."
msgstr "ЦелевиÑÑ‚ потребител не беше открит."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -373,62 +389,62 @@ msgstr ""
"ПÑевдонимът може да Ñъдържа Ñамо малки букви, чиÑла и никакво разÑтоÑние "
"между Ñ‚ÑÑ…."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Опитайте друг пÑевдоним, този вече е зает."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ðеправилен пÑевдоним."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "ÐдреÑÑŠÑ‚ на личната Ñтраница не е правилен URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Пълното име е твърде дълго (макÑ. 255 знака)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "ОпиÑанието е твърде дълго (до %d Ñимвола)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Името на меÑтоположението е твърде дълго (макÑ. 255 знака)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ðеправилен пÑевдоним: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "ПÑевдонимът \"%s\" вече е зает. Опитайте друг."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -439,15 +455,15 @@ msgstr ""
msgid "Group not found!"
msgstr "Групата не е открита."
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Вече членувате в тази група."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
@@ -456,7 +472,7 @@ msgstr "Грешка при проÑледÑване — потребителÑÑ
msgid "You are not a member of this group."
msgstr "Ðе членувате в тази група."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
@@ -488,7 +504,7 @@ msgstr "Ðеправилен размер."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -497,7 +513,7 @@ msgstr "Ðеправилен размер."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -532,7 +548,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -555,13 +571,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Сметка"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -638,23 +654,11 @@ msgstr "Ðеподдържан формат."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / ОтбелÑзани като любими от %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s бележки отбелÑзани като любими от %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Поток на %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Бележки от %1$s в %2$s."
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -680,17 +684,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr "Повторено за %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
@@ -707,8 +711,7 @@ msgstr "ÐÑма такъв документ."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "ÐÑма пÑевдоним."
@@ -720,7 +723,7 @@ msgstr "ÐÑма размер."
msgid "Invalid size."
msgstr "Ðеправилен размер."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватар"
@@ -738,30 +741,30 @@ msgid "User without matching profile"
msgstr "Потребител без ÑъответÑтващ профил"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "ÐаÑтройки за аватар"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Оригинал"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Преглед"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Изтриване"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Качване"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "ИзрÑзване"
@@ -769,7 +772,7 @@ msgstr "ИзрÑзване"
msgid "Pick a square area of the image to be your avatar"
msgstr "Изберете квадратна облаÑÑ‚ от изображението за аватар"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -801,22 +804,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Ðе"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Да не Ñе блокира този потребител"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокиране на потребителÑ"
@@ -824,40 +827,44 @@ msgstr "Блокиране на потребителÑ"
msgid "Failed to save block information."
msgstr "Грешка при запиÑване данните за блокирането."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "ÐÑма такава група"
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "Блокирани за %s"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Блокирани за %s, Ñтраница %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
#, fuzzy
msgid "A list of the users blocked from joining this group."
msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Разблокиране на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ñ‚ групата"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Разблокиране"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Разблокиране на този потребител"
@@ -914,7 +921,7 @@ msgid "Conversation"
msgstr "Разговор"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Бележки"
@@ -936,7 +943,7 @@ msgstr "Ðе членувате в тази група."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Имаше проблем ÑÑŠÑ ÑеÑиÑта ви в Ñайта."
@@ -962,12 +969,13 @@ msgstr "Да не Ñе изтрива бележката"
msgid "Delete this application"
msgstr "Изтриване на бележката"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ðе Ñте влезли в ÑиÑтемата."
@@ -994,7 +1002,7 @@ msgstr "ÐаиÑтина ли иÑкате да изтриете тази бел
msgid "Do not delete this notice"
msgstr "Да не Ñе изтрива бележката"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Изтриване на бележката"
@@ -1010,18 +1018,18 @@ msgstr "Може да изтривате Ñамо локални потребиÑ
msgid "Delete user"
msgstr "Изтриване на потребител"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Изтриване на този потребител"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1127,6 +1135,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Запазване"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1229,36 +1249,35 @@ msgstr "Редактиране на групата %s"
msgid "You must be logged in to create a group."
msgstr "За да Ñъздавате група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "ОпиÑанието е твърде дълго (до %d Ñимвола)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Грешка при обновÑване на групата."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Грешка при отбелÑзване като любима."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "ÐаÑтройките Ñа запазени."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
msgstr "ÐаÑтройки на е-поща"
@@ -1297,9 +1316,8 @@ msgid "Cancel"
msgstr "Отказ"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "ÐдреÑи на е-поща"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1374,7 +1392,7 @@ msgid "Cannot normalize that email address"
msgstr "Грешка при нормализиране адреÑа на е-пощата"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеправилен Ð°Ð´Ñ€ÐµÑ Ð½Ð° е-поща."
@@ -1567,6 +1585,25 @@ msgstr "ÐÑма такъв файл."
msgid "Cannot read file."
msgstr "Грешка при четене на файла."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ðеправилен размер."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ðе може да изпращате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ този потребител."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "ПотребителÑÑ‚ вече е заглушен."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1596,7 +1633,7 @@ msgstr "ПотребителÑÑ‚ вече е блокиран за групатÐ
msgid "User is not a member of group."
msgstr "ПотребителÑÑ‚ не членува в групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Блокиране на потребителÑ"
@@ -1631,97 +1668,103 @@ msgstr "ЛипÑва ID."
msgid "You must be logged in to edit a group."
msgstr "За да редактирате група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "Групи"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Грешка при обновÑване на потребителÑ."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "ÐаÑтройките Ñа запазени."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Лого на групата"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, fuzzy, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "Може да качите лого за групата ви."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Потребител без ÑъответÑтващ профил"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
#, fuzzy
msgid "Pick a square area of the image to be the logo."
msgstr "Изберете квадратна облаÑÑ‚ от изображението за аватар"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Лотого е обновено."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "ÐеуÑпешно обновÑване на логото."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Членове на групата %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "Членове на групата %s, Ñтраница %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокиране"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Поток на %s"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -1971,16 +2014,19 @@ msgstr "Лично Ñъобщение"
msgid "Optionally add a personal message to the invitation."
msgstr "Може да добавите и лично Ñъобщение към поканата."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Прати"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s ви кани да ползвате заедно %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2041,7 +2087,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "За да Ñе приÑъедините към група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "ÐÑма пÑевдоним."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s Ñе приÑъедини към групата %s"
@@ -2050,11 +2101,11 @@ msgstr "%s Ñе приÑъедини към групата %s"
msgid "You must be logged in to leave a group."
msgstr "За напуÑнете група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Ðе членувате в тази група."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s напуÑна групата %2$s"
@@ -2072,14 +2123,13 @@ msgstr "Грешно име или парола."
msgid "Error setting user. You are probably not authorized."
msgstr "Забранено."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Вход"
#: actions/login.php:227
msgid "Login to site"
-msgstr ""
+msgstr "Вход в Ñайта"
#: actions/login.php:236 actions/register.php:478
msgid "Remember me"
@@ -2327,8 +2377,8 @@ msgstr "вид Ñъдържание "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ðеподдържан формат на данните"
@@ -2474,7 +2524,8 @@ msgstr "Грешка при запазване на новата парола."
msgid "Password saved."
msgstr "Паролата е запиÑана."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пътища"
@@ -2507,7 +2558,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Сайт"
@@ -2595,7 +2645,7 @@ msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° фона"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикога"
@@ -2650,11 +2700,11 @@ msgstr "Това не е правилен Ð°Ð´Ñ€ÐµÑ Ð½Ð° е-поща."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s, Ñтраница %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ðевалидно Ñъдържание на бележка"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2677,7 +2727,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "От 1 до 64 малки букви или цифри, без Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð°Ñ†Ð¸Ñ Ð¸ интервали"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Пълно име"
@@ -2705,7 +2755,7 @@ msgid "Bio"
msgstr "За мен"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2730,7 +2780,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Език"
@@ -2758,7 +2808,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "БиографиÑта е твърде дълга (до %d Ñимвола)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Ðе е избран чаÑови поÑÑ"
@@ -2771,24 +2821,25 @@ msgstr "Името на езика е твърде дълго (може да е
msgid "Invalid tag: \"%s\""
msgstr "Ðеправилен етикет: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Грешка при запазване етикетите."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Грешка при запазване на профила."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Грешка при запазване етикетите."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "ÐаÑтройките Ñа запазени."
@@ -2801,45 +2852,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Грешка при изтеглÑне на Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº"
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Общ поток, Ñтраница %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Общ поток"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2848,7 +2899,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3021,8 +3072,7 @@ msgstr "Грешка в кода за потвърждение."
msgid "Registration successful"
msgstr "ЗапиÑването е уÑпешно."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтриране"
@@ -3063,7 +3113,7 @@ msgid "Same as password above. Required."
msgstr "Същото като паролата по-горе. Задължително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-поща"
@@ -3168,7 +3218,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° профила ви в друга, ÑъвмеÑтима уÑлуга за микроблогване"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Ðбониране"
@@ -3206,7 +3256,7 @@ msgstr "Ðе можете да повтарÑте ÑобÑтвена бележÐ
msgid "You already repeated that notice."
msgstr "Вече Ñте повторили тази бележка."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3214,47 +3264,47 @@ msgstr "Повторено"
msgid "Repeated!"
msgstr "Повторено!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Отговори на %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Отговори до %1$s в %2$s!"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¾Ñ‚Ð³Ð¾Ð²Ð¾Ñ€Ð¸ на %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¾Ñ‚Ð³Ð¾Ð²Ð¾Ñ€Ð¸ на %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¾Ñ‚Ð³Ð¾Ð²Ð¾Ñ€Ð¸ на %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3266,10 +3316,19 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Отговори до %1$s в %2$s!"
-#: actions/rsd.php:146 actions/version.php:157
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ðе можете да заглушавате потребители на този Ñайт."
+
+#: actions/revokerole.php:82
#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Потребител без ÑъответÑтващ профил"
+
+#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
-msgstr "Бележката е изтрита."
+msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -3281,8 +3340,9 @@ msgstr "Ðе може да изпращате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ този Ð
msgid "User is already sandboxed."
msgstr "ПотребителÑÑ‚ ви е блокирал."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "СеÑии"
@@ -3307,8 +3367,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Запазване наÑтройките на Ñайта"
@@ -3340,8 +3400,8 @@ msgstr "ОрганизациÑ"
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
@@ -3403,35 +3463,35 @@ msgstr "Любими бележки на %1$s, Ñтраница %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Грешка при изтеглÑне на любимите бележки"
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð¿Ñ€Ð¸Ñтелите на %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3439,7 +3499,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Така можете да Ñподелите какво хареÑвате."
@@ -3453,67 +3513,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Членове на групата %s, Ñтраница %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профил на групата"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Бележка"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ПÑевдоними"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "ИзходÑща ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Членове"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Ð’Ñички членове"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Създадена на"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3523,7 +3583,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3532,7 +3592,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -3564,9 +3624,9 @@ msgid " tagged %s"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "Блокирани за %s, Ñтраница %d"
+msgstr "%1$s, Ñтраница %2$d"
#: actions/showstream.php:122
#, fuzzy, php-format
@@ -3642,150 +3702,140 @@ msgid "User is already silenced."
msgstr "ПотребителÑÑ‚ вече е заглушен."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "ОÑновни наÑтройки на тази инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Името на Ñайта е задължително."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "ÐдреÑÑŠÑ‚ на е-поща за контакт е задължителен"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Ðепознат език \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничение на текÑта е 140 знака."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Общи"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на Ñайта"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща за контакт ÑÑŠÑ Ñайта"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "МеÑтоположение"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑови поÑÑ Ð¿Ð¾ подразбиране"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑови поÑÑ Ð¿Ð¾ подразбиране за Ñайта (обикновено UTC)."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Език по подразбиране за Ñайта"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "ОграничениÑ"
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "ЧеÑтота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ðова бележка"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ðово Ñъобщение"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr "ОграничениÑ"
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Грешка при запиÑване наÑтройките за Twitter"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Ðова бележка"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ðова бележка"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
msgstr "ÐаÑтройки за SMS"
@@ -3816,7 +3866,6 @@ msgid "Enter the code you received on your phone."
msgstr "Въведете кода, който получихте по телефона."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
msgstr "Телефонен номер за SMS"
@@ -3887,20 +3936,91 @@ msgstr ""
msgid "No code entered"
msgstr "Ðе е въведен код."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "ПромÑна наÑтройките на Ñайта"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "ЧеÑтота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Запазване наÑтройките на Ñайта"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Ðе Ñте абонирани за този профил"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "Грешка при Ñъздаване на нов абонамент."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ðе е локален потребител."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "ÐÑма такъв файл."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Ðе Ñте абонирани за този профил"
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "Ðбониране"
@@ -3961,7 +4081,7 @@ msgstr "ÐÑма хора, чийто бележки четете."
msgid "These are the people whose notices %s listens to."
msgstr "Хора, чийто бележки %s чете."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3971,35 +4091,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s не получава ничии бележки."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s, Ñтраница %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
@@ -4051,7 +4171,7 @@ msgstr ""
msgid "No such tag."
msgstr "ÐÑма такъв етикет."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Методът в API вÑе още Ñе разработва."
@@ -4078,80 +4198,82 @@ msgstr "Сървърът не е върнал Ð°Ð´Ñ€ÐµÑ Ð½Ð° профила."
msgid "Unsubscribed"
msgstr "ОтпиÑване"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Потребител"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Профил"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Ðови потребители"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Ð’Ñички абонаменти"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Ðвтоматично абониране за вÑеки, който Ñе абонира за мен (подходÑщо за "
"ботове)."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Покани"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Поканите Ñа включени"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4279,20 +4401,25 @@ msgid "%1$s groups, page %2$d"
msgstr "Членове на групата %s, Ñтраница %d"
#: actions/usergroups.php:130
-#, fuzzy
msgid "Search for more groups"
-msgstr "ТърÑене за хора или бележки"
+msgstr "ТърÑене на още групи"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не членува в Ð½Ð¸ÐºÐ¾Ñ Ð³Ñ€ÑƒÐ¿Ð°."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Бележки от %1$s в %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4336,7 +4463,7 @@ msgstr ""
msgid "Plugins"
msgstr "ПриÑтавки"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ВерÑиÑ"
@@ -4376,6 +4503,11 @@ msgstr "Грешка при обновÑване на групата."
msgid "Group leave failed."
msgstr "Профил на групата"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Грешка при обновÑване на групата."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4394,28 +4526,28 @@ msgstr "Грешка при вмъкване на Ñъобщението."
msgid "Could not update message with new URI."
msgstr "Грешка при обновÑване на бележката Ñ Ð½Ð¾Ð² URL-адреÑ."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Грешка при запиÑване на бележката. Ðепознат потребител."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4424,43 +4556,80 @@ msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забранено ви е да публикувате бележки в този Ñайт."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "ПотребителÑÑ‚ е забранил да Ñе абонирате за него."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "ПотребителÑÑ‚ ви е блокирал."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Ðе Ñте абонирани!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Грешка при изтриване на абонамента."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Грешка при изтриване на абонамента."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Грешка при изтриване на абонамента."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добре дошли в %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Грешка при Ñъздаване на групата."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Грешка при Ñъздаване на нов абонамент."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Грешка при Ñъздаване на нов абонамент."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Грешка при Ñъздаване на нов абонамент."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "ПромÑна наÑтройките на профила"
@@ -4491,136 +4660,198 @@ msgid "Other options"
msgstr "Други наÑтройки"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
msgstr "Ðеозаглавена Ñтраница"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Ðачало"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Лично"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "ПромÑна на поща, аватар, парола, профил"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Свързване"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Свързване към уÑлуги"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Свързване"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "ПромÑна наÑтройките на Ñайта"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Покани"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ÐаÑтройки"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Поканете приÑтели и колеги да Ñе приÑъединÑÑ‚ към Ð²Ð°Ñ Ð² %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Изход"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Покани"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Излизане от Ñайта"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Изход"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Създаване на нова Ñметка"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "РегиÑтриране"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Влизане в Ñайта"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Помощ"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Вход"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощ"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "ТърÑене"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помощ"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ТърÑене за хора или бележки"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "ТърÑене"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Ðова бележка"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Ðова бележка"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Ðбонаменти"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помощ"
+
+#: lib/action.php:754
msgid "About"
msgstr "ОтноÑно"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "ВъпроÑи"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "УÑловиÑ"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПоверителноÑÑ‚"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Изходен код"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Табелка"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценз на програмата StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4629,12 +4860,12 @@ msgstr ""
"**%%site.name%%** е уÑлуга за микроблогване, предоÑтавена ви от [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е уÑлуга за микроблогване. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4645,100 +4876,154 @@ msgstr ""
"доÑтъпна под [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценз на Ñъдържанието"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Ð’Ñички "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "лиценз."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Страниране"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "След"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Преди"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Ðе можете да променÑте този Ñайт."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "ЗапиÑването не е позволено."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Командата вÑе още не Ñе поддържа."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Командата вÑе още не Ñе поддържа."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Грешка при запиÑване наÑтройките за Twitter"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ОÑновна наÑтройка на Ñайта"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Сайт"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ÐаÑтройка на оформлението"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "ВерÑиÑ"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "ÐаÑтройка на пътищата"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Потребител"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "ÐаÑтройка на оформлението"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ÐаÑтройка на пътищата"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "ÐаÑтройка на оформлението"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Ðова бележка"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ÐаÑтройка на пътищата"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4833,12 +5118,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Паролата е запиÑана."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Паролата е запиÑана."
@@ -4993,80 +5278,89 @@ msgstr "Грешка при запиÑване на бележката."
msgid "Specify the name of the user to subscribe to"
msgstr "Уточнете името на потребителÑ, за когото Ñе абонирате."
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "ÐÑма такъв потребител"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Ðбонирани Ñте за %s."
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Уточнете името на потребителÑ, от когото Ñе отпиÑвате."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "ОтпиÑани Ñте от %s."
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Командата вÑе още не Ñе поддържа."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Уведомлението е изключено."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Грешка при изключване на уведомлението."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Уведомлението е включено."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Грешка при включване на уведомлението."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "ОтпиÑани Ñте от %s."
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Ðе Ñте абонирани за никого."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Вече Ñте абонирани за Ñледните потребители:"
msgstr[1] "Вече Ñте абонирани за Ñледните потребители:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ðикой не е абониран за ваÑ."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Грешка при абониране на друг потребител за ваÑ."
msgstr[1] "Грешка при абониране на друг потребител за ваÑ."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Ðе членувате в нито една група."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе членувате в тази група."
msgstr[1] "Ðе членувате в тази група."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5080,6 +5374,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5107,19 +5402,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ðе е открит файл Ñ Ð½Ð°Ñтройки. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Влизане в Ñайта"
@@ -5221,6 +5516,11 @@ msgstr "Изберете етикет за конкретизиране"
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+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 "ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñтраница, блог или профил в друг Ñайт на групата"
@@ -5311,24 +5611,24 @@ msgstr "СиÑтемна грешка при качване на файл."
msgid "Not an image or corrupt file."
msgstr "Файлът не е изображение или е повреден."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Форматът на файла Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾ не Ñе поддържа."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "ÐÑма такава бележка."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Ðеподдържан вид файл"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5542,7 +5842,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "от"
@@ -5632,6 +5932,12 @@ msgstr "До"
msgid "Available characters"
msgstr "Ðалични знаци"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Прати"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Изпращане на бележка"
@@ -5665,48 +5971,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "С"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "Ю"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "И"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "З"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑÑ‚"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено от"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ОтговарÑне на тази бележка"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Отговор"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Бележката е повторена."
@@ -5739,11 +6045,6 @@ msgstr "Грешка при вмъкване на отдалечен профиÐ
msgid "Duplicate notice"
msgstr "Изтриване на бележката"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "ПотребителÑÑ‚ е забранил да Ñе абонирате за него."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Грешка при добавÑне на нов абонамент."
@@ -5786,7 +6087,7 @@ msgstr "Етикети в бележките на %s"
msgid "Unknown"
msgstr "Ðепознато дейÑтвие"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Ðбонаменти"
@@ -5794,24 +6095,24 @@ msgstr "Ðбонаменти"
msgid "All subscriptions"
msgstr "Ð’Ñички абонаменти"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Ðбонати"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Ð’Ñички абонати"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Потребител"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "УчаÑтник от"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Ð’Ñички групи"
@@ -5852,7 +6153,12 @@ msgstr "ПовтарÑне на тази бележка"
msgid "Repeat this notice"
msgstr "ПовтарÑне на тази бележка"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5875,6 +6181,10 @@ msgstr "ТърÑене"
msgid "Keyword(s)"
msgstr "Ключови думи"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ТърÑене"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5927,35 +6237,14 @@ msgstr "Ðбонирани за %s"
msgid "Groups %s is a member of"
msgstr "Групи, в които учаÑтва %s"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "ПотребителÑÑ‚ ви е блокирал."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Грешка при абониране."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Грешка при абониране на друг потребител за ваÑ."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ðе Ñте абонирани!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Грешка при изтриване на абонамента."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Покани"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Грешка при изтриване на абонамента."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Поканете приÑтели и колеги да Ñе приÑъединÑÑ‚ към Ð²Ð°Ñ Ð² %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6009,67 +6298,83 @@ msgstr "Редактиране на аватара"
msgid "User actions"
msgstr "ПотребителÑки дейÑтвиÑ"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Редактиране на профила"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Редактиране"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Изпращате на прÑко Ñъобщение до този потребител."
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Съобщение"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ПотребителÑки профил"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "ÐдминиÑтратори"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "преди нÑколко Ñекунди"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "преди около чаÑ"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d чаÑа"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "преди около меÑец"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "преди около %d меÑеца"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "преди около година"
diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po
new file mode 100644
index 000000000..53e971a31
--- /dev/null
+++ b/locale/br/LC_MESSAGES/statusnet.po
@@ -0,0 +1,6106 @@
+# Translation of StatusNet to Breton
+#
+# Author@translatewiki.net: Fulup
+# Author@translatewiki.net: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-04 19:12+0000\n"
+"PO-Revision-Date: 2010-03-04 19:12:57+0000\n"
+"Language-Team: Dutch\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: out-statusnet\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Moned"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr ""
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Enskrivadur"
+
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Prevez"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Aotreañ an enskrivadur goude bezañ bet pedet hepken."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Tud pedet hepken"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Diweredekaat an enskrivadurioù nevez."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Serr"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Enrollañ an arventennoù moned"
+
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Enrollañ"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
+msgid "No such page"
+msgstr "N'eus ket eus ar bajenn-se"
+
+#: actions/all.php:75 actions/allrss.php:68
+#: actions/apiaccountupdatedeliverydevice.php:113
+#: actions/apiaccountupdateprofile.php:105
+#: actions/apiaccountupdateprofilebackgroundimage.php:116
+#: actions/apiaccountupdateprofileimage.php:105 actions/apiblockcreate.php:97
+#: actions/apiblockdestroy.php:96 actions/apidirectmessage.php:77
+#: actions/apidirectmessagenew.php:75 actions/apigroupcreate.php:112
+#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
+#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
+#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
+#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
+#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
+#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
+msgid "No such user."
+msgstr "N'eus ket eus an implijer-se."
+
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
+#, php-format
+msgid "%1$s and friends, page %2$d"
+msgstr "%1$s hag e vignoned, pajenn %2$d"
+
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
+#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
+#: lib/personalgroupnav.php:100
+#, php-format
+msgid "%s and friends"
+msgstr "%s hag e vignoned"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
+#, php-format
+msgid "Feed for friends of %s (RSS 1.0)"
+msgstr "Gwazh evit mignoned %s (RSS 1.0)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
+#, php-format
+msgid "Feed for friends of %s (RSS 2.0)"
+msgstr "Gwazh evit mignoned %s (RSS 2.0)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
+#, php-format
+msgid "Feed for friends of %s (Atom)"
+msgstr "Gwazh evit mignoned %s (Atom)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
+#, php-format
+msgid ""
+"This is the timeline for %s and friends but no one has posted anything yet."
+msgstr ""
+
+#: actions/all.php:139
+#, php-format
+msgid ""
+"Try subscribing to more people, [join a group](%%action.groups%%) or post "
+"something yourself."
+msgstr ""
+
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
+#, php-format
+msgid ""
+"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
+"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+msgstr ""
+
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to his or her attention."
+msgstr ""
+
+#. TRANS: H1 text
+#: actions/all.php:178
+msgid "You and friends"
+msgstr "C'hwi hag o mignoned"
+
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
+#, php-format
+msgid "Updates from %1$s and friends on %2$s!"
+msgstr "Hizivadennoù %1$s ha mignoned e %2$s!"
+
+#: actions/apiaccountratelimitstatus.php:70
+#: actions/apiaccountupdatedeliverydevice.php:93
+#: actions/apiaccountupdateprofile.php:97
+#: actions/apiaccountupdateprofilebackgroundimage.php:94
+#: actions/apiaccountupdateprofilecolors.php:118
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelineretweetedtome.php:121
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+msgid "API method not found."
+msgstr "N'eo ket bet kavet an hentenn API !"
+
+#: actions/apiaccountupdatedeliverydevice.php:85
+#: actions/apiaccountupdateprofile.php:89
+#: actions/apiaccountupdateprofilebackgroundimage.php:86
+#: actions/apiaccountupdateprofilecolors.php:110
+#: actions/apiaccountupdateprofileimage.php:84 actions/apiblockcreate.php:89
+#: actions/apiblockdestroy.php:88 actions/apidirectmessagenew.php:117
+#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
+#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
+#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
+#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
+#: actions/apistatusesupdate.php:118
+msgid "This method requires a POST."
+msgstr "Ezhomm en deus an argerzh-mañ eus ur POST."
+
+#: actions/apiaccountupdatedeliverydevice.php:105
+msgid ""
+"You must specify a parameter named 'device' with a value of one of: sms, im, "
+"none"
+msgstr ""
+
+#: actions/apiaccountupdatedeliverydevice.php:132
+msgid "Could not update user."
+msgstr "Diposubl eo hizivaat an implijer."
+
+#: actions/apiaccountupdateprofile.php:112
+#: actions/apiaccountupdateprofilebackgroundimage.php:194
+#: actions/apiaccountupdateprofilecolors.php:185
+#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
+msgid "User has no profile."
+msgstr "An implijer-mañ n'eus profil ebet dezhañ."
+
+#: actions/apiaccountupdateprofile.php:147
+msgid "Could not save profile."
+msgstr "Diposubl eo enrollañ ar profil."
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:108
+#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
+#: actions/designadminpanel.php:122 actions/editapplication.php:118
+#: actions/newapplication.php:101 actions/newnotice.php:94
+#: lib/designsettings.php:283
+#, php-format
+msgid ""
+"The server was unable to handle that much POST data (%s bytes) due to its "
+"current configuration."
+msgstr ""
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:136
+#: actions/apiaccountupdateprofilebackgroundimage.php:146
+#: actions/apiaccountupdateprofilecolors.php:164
+#: actions/apiaccountupdateprofilecolors.php:174
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
+#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
+#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
+msgid "Unable to save your design settings."
+msgstr ""
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:187
+#: actions/apiaccountupdateprofilecolors.php:142
+msgid "Could not update your design."
+msgstr "Diposubl eo hizivat ho design."
+
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Ne c'helloc'h ket ho stankañ ho unan !"
+
+#: actions/apiblockcreate.php:126
+msgid "Block user failed."
+msgstr "N'eo ket bet stanke an implijer."
+
+#: actions/apiblockdestroy.php:114
+msgid "Unblock user failed."
+msgstr "N'eus ket bet tu distankañ an implijer."
+
+#: actions/apidirectmessage.php:89
+#, php-format
+msgid "Direct messages from %s"
+msgstr "Kemennadennoù war-eeun kaset gant %s"
+
+#: actions/apidirectmessage.php:93
+#, php-format
+msgid "All the direct messages sent from %s"
+msgstr "An holl gemennadennoù war-eeun kaset gant %s"
+
+#: actions/apidirectmessage.php:101
+#, php-format
+msgid "Direct messages to %s"
+msgstr "Kemennadennoù war-eeun kaset da %s"
+
+#: actions/apidirectmessage.php:105
+#, php-format
+msgid "All the direct messages sent to %s"
+msgstr "An holl gemennadennoù war-eeun kaset da %s"
+
+#: actions/apidirectmessagenew.php:126
+msgid "No message text!"
+msgstr "Kemenadenn hep testenn !"
+
+#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
+#, php-format
+msgid "That's too long. Max message size is %d chars."
+msgstr "Re hir eo ! Ment hirañ ar gemenadenn a zo a %d arouezenn."
+
+#: actions/apidirectmessagenew.php:146
+msgid "Recipient user not found."
+msgstr "N'eo ket bet kavet ar resever."
+
+#: actions/apidirectmessagenew.php:150
+msgid "Can't send direct messages to users who aren't your friend."
+msgstr ""
+"Ne c'helloc'h ket kas kemennadennoù personel d'an implijerien n'int ket ho "
+"mignoned."
+
+#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
+#: actions/apistatusesdestroy.php:113
+msgid "No status found with that ID."
+msgstr "N'eo bet kavet statud ebet gant an ID-mañ."
+
+#: actions/apifavoritecreate.php:119
+msgid "This status is already a favorite."
+msgstr "Ur pennroll eo dija an ali-mañ."
+
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+msgid "Could not create favorite."
+msgstr "Diposupl eo krouiñ ar pennroll-mañ."
+
+#: actions/apifavoritedestroy.php:122
+msgid "That status is not a favorite."
+msgstr "N'eo ket ar statud-mañ ur pennroll."
+
+#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
+msgid "Could not delete favorite."
+msgstr "Diposupl eo dilemel ar pennroll-mañ."
+
+#: actions/apifriendshipscreate.php:109
+msgid "Could not follow user: User not found."
+msgstr "Diposupl eo heuliañ an implijer : N'eo ket bet kavet an implijer."
+
+#: actions/apifriendshipscreate.php:118
+#, php-format
+msgid "Could not follow user: %s is already on your list."
+msgstr "Diposubl eo heuliañ an implijer : war ho listenn emañ %s dija."
+
+#: actions/apifriendshipsdestroy.php:109
+msgid "Could not unfollow user: User not found."
+msgstr ""
+"Diposupl eo paouez heuliañ an implijer : N'eo ket bet kavet an implijer."
+
+#: actions/apifriendshipsdestroy.php:120
+msgid "You cannot unfollow yourself."
+msgstr "Ne c'hallit ket chom hep ho heuliañ hoc'h-unan."
+
+#: actions/apifriendshipsexists.php:94
+msgid "Two user ids or screen_names must be supplied."
+msgstr ""
+
+#: actions/apifriendshipsshow.php:134
+msgid "Could not determine source user."
+msgstr "Diposubl eo termeniñ an implijer mammenn."
+
+#: actions/apifriendshipsshow.php:142
+msgid "Could not find target user."
+msgstr "Diposubl eo kavout an implijer pal."
+
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
+#: actions/newgroup.php:126 actions/profilesettings.php:215
+#: actions/register.php:205
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
+#: actions/newgroup.php:130 actions/profilesettings.php:238
+#: actions/register.php:208
+msgid "Nickname already in use. Try another one."
+msgstr "Implijet eo dija al lesanv-se. Klaskit unan all."
+
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
+#: actions/newgroup.php:133 actions/profilesettings.php:218
+#: actions/register.php:210
+msgid "Not a valid nickname."
+msgstr "N'eo ket ul lesanv mat."
+
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
+#: actions/newgroup.php:139 actions/profilesettings.php:222
+#: actions/register.php:217
+msgid "Homepage is not a valid URL."
+msgstr "N'eo ket chomlec'h al lec'hienn personel un URL reizh."
+
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
+#: actions/newgroup.php:142 actions/profilesettings.php:225
+#: actions/register.php:220
+msgid "Full name is too long (max 255 chars)."
+msgstr "Re hir eo an anv klok (255 arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
+#: actions/newapplication.php:172
+#, php-format
+msgid "Description is too long (max %d chars)."
+msgstr "Re hir eo an deskrivadur (%d arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
+#: actions/newgroup.php:148 actions/profilesettings.php:232
+#: actions/register.php:227
+msgid "Location is too long (max 255 chars)."
+msgstr "Re hir eo al lec'hiadur (255 arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
+#: actions/newgroup.php:159
+#, php-format
+msgid "Too many aliases! Maximum %d."
+msgstr "Re a aliasoù ! %d d'ar muiañ."
+
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
+#: actions/newgroup.php:168
+#, php-format
+msgid "Invalid alias: \"%s\""
+msgstr "Alias fall : \"%s\""
+
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
+#: actions/newgroup.php:172
+#, php-format
+msgid "Alias \"%s\" already in use. Try another one."
+msgstr "Implijet e vez an alias \"%s\" dija. Klaskit gant unan all."
+
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
+#: actions/newgroup.php:178
+msgid "Alias can't be the same as nickname."
+msgstr "Ne c'hell ket an alias bezañ ar memes hini eget al lesanv."
+
+#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
+#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
+#: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
+msgid "Group not found!"
+msgstr "N'eo ket bet kavet ar strollad"
+
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
+msgid "You are already a member of that group."
+msgstr "Un ezel eus ar strollad-mañ eo dija."
+
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+msgid "You have been blocked from that group by the admin."
+msgstr "Stanket oc'h bet eus ar strollad-mañ gant ur merour."
+
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
+#, php-format
+msgid "Could not join user %1$s to group %2$s."
+msgstr "Diposubl eo stagañ an implijer %1$s d'ar strollad %2$s."
+
+#: actions/apigroupleave.php:114
+msgid "You are not a member of this group."
+msgstr "N'oc'h ket ezel eus ar strollad-mañ."
+
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
+#, php-format
+msgid "Could not remove user %1$s from group %2$s."
+msgstr "Diposubl eo dilemel an implijer %1$s deus ar strollad %2$s."
+
+#: actions/apigrouplist.php:95
+#, php-format
+msgid "%s's groups"
+msgstr "Strollad %s"
+
+#: actions/apigrouplistall.php:90 actions/usergroups.php:62
+#, php-format
+msgid "%s groups"
+msgstr "Strolladoù %s"
+
+#: actions/apigrouplistall.php:94
+#, php-format
+msgid "groups on %s"
+msgstr "strolladoù war %s"
+
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Arventenn oauth_token nann-roet."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Fichenn direizh."
+
+#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
+#: actions/deletenotice.php:157 actions/disfavor.php:74
+#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
+#: actions/groupblock.php:66 actions/grouplogo.php:312
+#: actions/groupunblock.php:66 actions/imsettings.php:206
+#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
+#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
+#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
+#: actions/othersettings.php:145 actions/passwordsettings.php:138
+#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/register.php:165 actions/remotesubscribe.php:77
+#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
+#: actions/subscribe.php:86 actions/tagother.php:166
+#: actions/unsubscribe.php:69 actions/userauthorization.php:52
+#: lib/designsettings.php:294
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/apioauthauthorize.php:135
+msgid "Invalid nickname / password!"
+msgstr "Lesanv / ger tremen direizh !"
+
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr ""
+
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr ""
+
+#: actions/apioauthauthorize.php:214
+#, php-format
+msgid ""
+"The request token %s has been authorized. Please exchange it for an access "
+"token."
+msgstr ""
+
+#: actions/apioauthauthorize.php:227
+#, php-format
+msgid "The request token %s has been denied and revoked."
+msgstr ""
+
+#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
+#: actions/designadminpanel.php:103 actions/editapplication.php:139
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
+#: actions/imsettings.php:220 actions/newapplication.php:121
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
+#: actions/smssettings.php:248 lib/designsettings.php:304
+msgid "Unexpected form submission."
+msgstr ""
+
+#: actions/apioauthauthorize.php:259
+msgid "An application would like to connect to your account"
+msgstr ""
+
+#: actions/apioauthauthorize.php:276
+msgid "Allow or deny access"
+msgstr "Aotreañ pe nac'h ar moned"
+
+#: actions/apioauthauthorize.php:292
+#, php-format
+msgid ""
+"The application <strong>%1$s</strong> by <strong>%2$s</strong> would like "
+"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
+"give access to your %4$s account to third parties you trust."
+msgstr ""
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
+msgid "Account"
+msgstr "Kont"
+
+#: actions/apioauthauthorize.php:313 actions/login.php:230
+#: actions/profilesettings.php:106 actions/register.php:424
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
+#: lib/userprofile.php:131
+msgid "Nickname"
+msgstr "Lesanv"
+
+#: actions/apioauthauthorize.php:316 actions/login.php:233
+#: actions/register.php:429 lib/accountsettingsaction.php:116
+msgid "Password"
+msgstr "Ger-tremen"
+
+#: actions/apioauthauthorize.php:328
+msgid "Deny"
+msgstr "Nac'hañ"
+
+#: actions/apioauthauthorize.php:334
+msgid "Allow"
+msgstr "Aotreañ"
+
+#: actions/apioauthauthorize.php:351
+msgid "Allow or deny access to your account information."
+msgstr "Aotreañ pe nac'hañ ar moned da ditouroù ho kont."
+
+#: actions/apistatusesdestroy.php:107
+msgid "This method requires a POST or DELETE."
+msgstr "Ezhomm en deus an argerzh-mañ ur POST pe un DELETE."
+
+#: actions/apistatusesdestroy.php:130
+msgid "You may not delete another user's status."
+msgstr "Ne c'helloc'h ket dilemel statud un implijer all."
+
+#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
+#: actions/deletenotice.php:52 actions/shownotice.php:92
+msgid "No such notice."
+msgstr "N'eus ket eus an ali-se."
+
+#: actions/apistatusesretweet.php:83
+msgid "Cannot repeat your own notice."
+msgstr "Ne c'helloc'h ket adlavar ho alioù."
+
+#: actions/apistatusesretweet.php:91
+msgid "Already repeated that notice."
+msgstr "Adlavaret o peus dija an ali-mañ."
+
+#: actions/apistatusesshow.php:138
+msgid "Status deleted."
+msgstr "Statud diverket."
+
+#: actions/apistatusesshow.php:144
+msgid "No status with that ID found."
+msgstr "N'eo ket bet kavet a statud evit an ID-mañ"
+
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
+#: lib/mailhandler.php:60
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn."
+
+#: actions/apistatusesupdate.php:202
+msgid "Not found"
+msgstr "N'eo ket bet kavet"
+
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
+#, php-format
+msgid "Max notice size is %d chars, including attachment URL."
+msgstr ""
+
+#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
+msgid "Unsupported format."
+msgstr "Diembreget eo ar furmad-se."
+
+#: actions/apitimelinefavorites.php:108
+#, php-format
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Pennroll %2$s"
+
+#: actions/apitimelinefavorites.php:117
+#, php-format
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s statud pennroll da %2$s / %2$s."
+
+#: actions/apitimelinementions.php:117
+#, php-format
+msgid "%1$s / Updates mentioning %2$s"
+msgstr "%1$s / Hizivadennoù a veneg %2$s"
+
+#: actions/apitimelinementions.php:127
+#, php-format
+msgid "%1$s updates that reply to updates from %2$s / %3$s."
+msgstr ""
+
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#, php-format
+msgid "%s public timeline"
+msgstr "Oberezhioù publik %s"
+
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#, php-format
+msgid "%s updates from everyone!"
+msgstr "%s statud an holl !"
+
+#: actions/apitimelineretweetedtome.php:111
+#, php-format
+msgid "Repeated to %s"
+msgstr "Adkemeret evit %s"
+
+#: actions/apitimelineretweetsofme.php:114
+#, php-format
+msgid "Repeats of %s"
+msgstr "Adkemeret eus %s"
+
+#: actions/apitimelinetag.php:102 actions/tag.php:67
+#, php-format
+msgid "Notices tagged with %s"
+msgstr "Alioù merket gant %s"
+
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#, php-format
+msgid "Updates tagged with %1$s on %2$s!"
+msgstr ""
+
+#: actions/apiusershow.php:96
+msgid "Not found."
+msgstr "N'eo ket bet kavet."
+
+#: actions/attachment.php:73
+msgid "No such attachment."
+msgstr "N'eo ket bet kavet ar restr stag."
+
+#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
+#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
+#: actions/grouplogo.php:86 actions/groupmembers.php:76
+#: actions/grouprss.php:91 actions/showgroup.php:121
+msgid "No nickname."
+msgstr "Lesanv ebet."
+
+#: actions/avatarbynickname.php:64
+msgid "No size."
+msgstr "Ment ebet."
+
+#: actions/avatarbynickname.php:69
+msgid "Invalid size."
+msgstr "Ment direizh."
+
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: lib/accountsettingsaction.php:112
+msgid "Avatar"
+msgstr "Avatar"
+
+#: actions/avatarsettings.php:78
+#, php-format
+msgid "You can upload your personal avatar. The maximum file size is %s."
+msgstr ""
+
+#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
+#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
+#: actions/userrss.php:103
+msgid "User without matching profile"
+msgstr "Implijer hep profil klotaus"
+
+#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
+#: actions/grouplogo.php:254
+msgid "Avatar settings"
+msgstr "Arventennoù an avatar"
+
+#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
+msgid "Original"
+msgstr "Orin"
+
+#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
+msgid "Preview"
+msgstr "Rakwelet"
+
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
+msgid "Delete"
+msgstr "Diverkañ"
+
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
+msgid "Upload"
+msgstr "Enporzhiañ"
+
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
+msgid "Crop"
+msgstr "Adframmañ"
+
+#: actions/avatarsettings.php:328
+msgid "Pick a square area of the image to be your avatar"
+msgstr ""
+
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
+msgid "Lost our file data."
+msgstr "Kollet eo bet roadennoù."
+
+#: actions/avatarsettings.php:366
+msgid "Avatar updated."
+msgstr "Hizivaet eo bet an avatar."
+
+#: actions/avatarsettings.php:369
+msgid "Failed updating avatar."
+msgstr "Ur gudenn 'zo bet e-pad hizivadenn an avatar."
+
+#: actions/avatarsettings.php:393
+msgid "Avatar deleted."
+msgstr "Dilammet eo bet an Avatar."
+
+#: actions/block.php:69
+msgid "You already blocked that user."
+msgstr "Stanket o peus dija an implijer-mañ."
+
+#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
+msgid "Block user"
+msgstr "Stankañ an implijer-mañ"
+
+#: actions/block.php:130
+msgid ""
+"Are you sure you want to block this user? Afterwards, they will be "
+"unsubscribed from you, unable to subscribe to you in the future, and you "
+"will not be notified of any @-replies from them."
+msgstr ""
+
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
+#: actions/groupblock.php:178
+msgid "No"
+msgstr "Ket"
+
+#: actions/block.php:143 actions/deleteuser.php:150
+msgid "Do not block this user"
+msgstr "Arabat stankañ an implijer-mañ"
+
+#: actions/block.php:144 actions/deleteapplication.php:158
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
+#: actions/groupblock.php:179 lib/repeatform.php:132
+msgid "Yes"
+msgstr "Ya"
+
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
+msgid "Block this user"
+msgstr "Stankañ an implijer-mañ"
+
+#: actions/block.php:167
+msgid "Failed to save block information."
+msgstr "Diposubl eo enrollañ an titouroù stankañ."
+
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
+msgid "No such group."
+msgstr "N'eus ket eus ar strollad-se."
+
+#: actions/blockedfromgroup.php:97
+#, php-format
+msgid "%s blocked profiles"
+msgstr "%s profil stanket"
+
+#: actions/blockedfromgroup.php:100
+#, php-format
+msgid "%1$s blocked profiles, page %2$d"
+msgstr "%1$s profil stanket, pajenn %2$d"
+
+#: actions/blockedfromgroup.php:115
+msgid "A list of the users blocked from joining this group."
+msgstr ""
+"Ur roll eus an implijerien evit pere eo stanket an enskrivadur d'ar strollad."
+
+#: actions/blockedfromgroup.php:288
+msgid "Unblock user from group"
+msgstr "Distankañ implijer ar strollad"
+
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
+msgid "Unblock"
+msgstr "Distankañ"
+
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
+msgid "Unblock this user"
+msgstr "Distankañ an implijer-se"
+
+#: actions/bookmarklet.php:50
+msgid "Post to "
+msgstr "Postañ war "
+
+#: actions/confirmaddress.php:75
+msgid "No confirmation code."
+msgstr "Kod kadarnaat ebet."
+
+#: actions/confirmaddress.php:80
+msgid "Confirmation code not found."
+msgstr "N'eo ket bet kavet ar c'hod kadarnaat."
+
+#: actions/confirmaddress.php:85
+msgid "That confirmation code is not for you!"
+msgstr "N'eo ket ar c'hod-se evidoc'h !"
+
+#: actions/confirmaddress.php:90
+#, php-format
+msgid "Unrecognized address type %s"
+msgstr "N'eo ket bet anavezet seurt ar chomlec'h %s"
+
+#: actions/confirmaddress.php:94
+msgid "That address has already been confirmed."
+msgstr "Kadarnaet eo bet dija ar chomlec'h-mañ."
+
+#: actions/confirmaddress.php:114 actions/emailsettings.php:296
+#: actions/emailsettings.php:427 actions/imsettings.php:258
+#: actions/imsettings.php:401 actions/othersettings.php:174
+#: actions/profilesettings.php:283 actions/smssettings.php:278
+#: actions/smssettings.php:420
+msgid "Couldn't update user."
+msgstr "Diposubl eo hizivaat an implijer."
+
+#: actions/confirmaddress.php:126 actions/emailsettings.php:391
+#: actions/imsettings.php:363 actions/smssettings.php:382
+msgid "Couldn't delete email confirmation."
+msgstr "Diposubl eo dilemel ar postel kadarnadur."
+
+#: actions/confirmaddress.php:144
+msgid "Confirm address"
+msgstr "Chomlec'h kadarnaet"
+
+#: actions/confirmaddress.php:159
+#, php-format
+msgid "The address \"%s\" has been confirmed for your account."
+msgstr "Kadarnaet eo bet ar chomlec'h \"%s\" evit ho kont."
+
+#: actions/conversation.php:99
+msgid "Conversation"
+msgstr "Kaozeadenn"
+
+#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
+msgid "Notices"
+msgstr "Ali"
+
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Rankout a reoc'h bezañ kevreet evit dilemel ur poellad."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "N'eo ket bet kavet ar poellad"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "N'oc'h ket perc'henn ar poellad-se."
+
+#: actions/deleteapplication.php:102 actions/editapplication.php:127
+#: actions/newapplication.php:110 actions/showapplication.php:118
+#: lib/action.php:1217
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Dilemel ar poelad"
+
+#: actions/deleteapplication.php:149
+msgid ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+msgstr ""
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Arabat eo dilemel ar poellad-mañ"
+
+#: actions/deleteapplication.php:160
+msgid "Delete this application"
+msgstr "Dilemel ar poelad-se"
+
+#. TRANS: Client error message
+#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
+#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
+#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
+#: actions/tagother.php:33 actions/unsubscribe.php:52
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
+#: lib/settingsaction.php:72
+msgid "Not logged in."
+msgstr "Nann-luget."
+
+#: actions/deletenotice.php:71
+msgid "Can't delete this notice."
+msgstr "Diposupl eo dilemel an ali-mañ."
+
+#: actions/deletenotice.php:103
+msgid ""
+"You are about to permanently delete a notice. Once this is done, it cannot "
+"be undone."
+msgstr ""
+
+#: actions/deletenotice.php:109 actions/deletenotice.php:141
+msgid "Delete notice"
+msgstr "Dilemel un ali"
+
+#: actions/deletenotice.php:144
+msgid "Are you sure you want to delete this notice?"
+msgstr "Ha sur oc'h ho peus c'hoant dilemel an ali-mañ ?"
+
+#: actions/deletenotice.php:145
+msgid "Do not delete this notice"
+msgstr "Arabat dilemel an ali-mañ"
+
+#: actions/deletenotice.php:146 lib/noticelist.php:655
+msgid "Delete this notice"
+msgstr "Dilemel an ali-mañ"
+
+#: actions/deleteuser.php:67
+msgid "You cannot delete users."
+msgstr "Ne c'helloc'h ket diverkañ implijerien"
+
+#: actions/deleteuser.php:74
+msgid "You can only delete local users."
+msgstr "Ne c'helloc'h nemet dilemel an implijerien lec'hel."
+
+#: actions/deleteuser.php:110 actions/deleteuser.php:133
+msgid "Delete user"
+msgstr "Diverkañ an implijer"
+
+#: actions/deleteuser.php:136
+msgid ""
+"Are you sure you want to delete this user? This will clear all data about "
+"the user from the database, without a backup."
+msgstr ""
+
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
+msgid "Delete this user"
+msgstr "Diverkañ an implijer-se"
+
+#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
+#: lib/groupnav.php:119
+msgid "Design"
+msgstr "Design"
+
+#: actions/designadminpanel.php:73
+msgid "Design settings for this StatusNet site."
+msgstr "Arventennoù design evit al lec'hienn StatusNet-mañ."
+
+#: actions/designadminpanel.php:275
+msgid "Invalid logo URL."
+msgstr "URL fall evit al logo."
+
+#: actions/designadminpanel.php:279
+#, php-format
+msgid "Theme not available: %s"
+msgstr "N'eus ket tu kaout an dodenn : %s"
+
+#: actions/designadminpanel.php:375
+msgid "Change logo"
+msgstr "Cheñch al logo"
+
+#: actions/designadminpanel.php:380
+msgid "Site logo"
+msgstr "Logo al lec'hienn"
+
+#: actions/designadminpanel.php:387
+msgid "Change theme"
+msgstr "Lakaat un dodenn all"
+
+#: actions/designadminpanel.php:404
+msgid "Site theme"
+msgstr "Dodenn al lec'hienn"
+
+#: actions/designadminpanel.php:405
+msgid "Theme for the site."
+msgstr "Dodenn evit al lec'hienn."
+
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
+msgid "Change background image"
+msgstr "Kemmañ ar skeudenn foñs"
+
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
+#: lib/designsettings.php:178
+msgid "Background"
+msgstr "Background"
+
+#: actions/designadminpanel.php:427
+#, php-format
+msgid ""
+"You can upload a background image for the site. The maximum file size is %1"
+"$s."
+msgstr ""
+
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
+msgid "On"
+msgstr "Gweredekaet"
+
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
+msgid "Off"
+msgstr "Diweredekaet"
+
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
+msgid "Turn background image on or off."
+msgstr "Gweredekaat pe diweredekaat ar skeudenn foñs."
+
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
+msgid "Tile background image"
+msgstr ""
+
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
+msgid "Change colours"
+msgstr "Kemmañ al livioù"
+
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
+msgid "Content"
+msgstr "Endalc'h"
+
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
+msgid "Sidebar"
+msgstr "Barenn kostez"
+
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
+msgid "Text"
+msgstr "Testenn"
+
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
+msgid "Links"
+msgstr "Liammoù"
+
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
+msgid "Use defaults"
+msgstr "Implijout an talvoudoù dre ziouer"
+
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
+msgid "Restore default designs"
+msgstr "Adlakaat an neuz dre ziouer."
+
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
+msgid "Reset back to default"
+msgstr "Adlakaat an arventennoù dre ziouer"
+
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Enrollañ"
+
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
+msgid "Save design"
+msgstr "Enrollañ an design"
+
+#: actions/disfavor.php:81
+msgid "This notice is not a favorite!"
+msgstr "N'eo ket an ali-mañ ur pennroll !"
+
+#: actions/disfavor.php:94
+msgid "Add to favorites"
+msgstr "Ouzhpennañ d'ar pennrolloù"
+
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "N'eo ket bet kavet ar restr \"%s\""
+
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Kemmañ ar poellad"
+
+#: actions/editapplication.php:66
+msgid "You must be logged in to edit an application."
+msgstr "Ret eo bezañ kevreet evit kemmañ ur poellad."
+
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
+#: actions/showapplication.php:87
+msgid "No such application."
+msgstr "N'eus ket eus an arload-mañ."
+
+#: actions/editapplication.php:161
+msgid "Use this form to edit your application."
+msgstr "Implijit ar furmskrid-mañ evit kemmañ ho poellad."
+
+#: actions/editapplication.php:177 actions/newapplication.php:159
+msgid "Name is required."
+msgstr "Ret eo lakaat un anv."
+
+#: actions/editapplication.php:180 actions/newapplication.php:165
+msgid "Name is too long (max 255 chars)."
+msgstr "Re hir eo an anv (255 arouezenn d'ar muiañ)."
+
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Implijet eo dija an anv-mañ. Klaskit unan all."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
+msgid "Description is required."
+msgstr "Ezhomm 'zo un deskrivadur."
+
+#: actions/editapplication.php:194
+msgid "Source URL is too long."
+msgstr "Mammenn URL re hir."
+
+#: actions/editapplication.php:200 actions/newapplication.php:185
+msgid "Source URL is not valid."
+msgstr "N'eo ket mat an URL mammenn."
+
+#: actions/editapplication.php:203 actions/newapplication.php:188
+msgid "Organization is required."
+msgstr "Ezhomm 'zo eus an aozadur."
+
+#: actions/editapplication.php:206 actions/newapplication.php:191
+msgid "Organization is too long (max 255 chars)."
+msgstr "Re hir eo an aozadur (255 arouezenn d'ar muiañ)."
+
+#: actions/editapplication.php:209 actions/newapplication.php:194
+msgid "Organization homepage is required."
+msgstr "Ret eo kaout pajenn degemer an aozadur."
+
+#: actions/editapplication.php:218 actions/newapplication.php:206
+msgid "Callback is too long."
+msgstr "Rez hir eo ar c'hounadur (Callback)."
+
+#: actions/editapplication.php:225 actions/newapplication.php:215
+msgid "Callback URL is not valid."
+msgstr "N'eo ket mat an URL kounadur (Callback)."
+
+#: actions/editapplication.php:258
+msgid "Could not update application."
+msgstr "Diposubl eo hizivaat ar poellad"
+
+#: actions/editgroup.php:56
+#, php-format
+msgid "Edit %s group"
+msgstr "Kemmañ ar strollad %s"
+
+#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
+msgid "You must be logged in to create a group."
+msgstr "Rankout a reoc'h bezañ luget evit krouiñ ur strollad."
+
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
+msgid "You must be an admin to edit the group."
+msgstr "Rankout a reer bezañ merour evit kemmañ ar strollad."
+
+#: actions/editgroup.php:158
+msgid "Use this form to edit the group."
+msgstr "Leunit ar furmskrid-mañ evit kemmañ dibarzhioù ar strollad."
+
+#: actions/editgroup.php:205 actions/newgroup.php:145
+#, php-format
+msgid "description is too long (max %d chars)."
+msgstr "re hir eo an deskrivadur (%d arouezenn d'ar muiañ)."
+
+#: actions/editgroup.php:258
+msgid "Could not update group."
+msgstr "Diposubl eo hizivaat ar strollad."
+
+#: actions/editgroup.php:264 classes/User_group.php:493
+msgid "Could not create aliases."
+msgstr "Diposubl eo krouiñ an aliasoù."
+
+#: actions/editgroup.php:280
+msgid "Options saved."
+msgstr "Enrollet eo bet ho dibarzhioù."
+
+#: actions/emailsettings.php:60
+msgid "Email settings"
+msgstr "Arventennoù ar postel"
+
+#: actions/emailsettings.php:71
+#, php-format
+msgid "Manage how you get email from %%site.name%%."
+msgstr "Merañ ar posteloù a fell deoc'h resevout a-berzh %%site.name%%."
+
+#: actions/emailsettings.php:100 actions/imsettings.php:100
+#: actions/smssettings.php:104
+msgid "Address"
+msgstr "Chomlec'h"
+
+#: actions/emailsettings.php:105
+msgid "Current confirmed email address."
+msgstr "Chomlec'h postel gwiriekaet er mare-mañ."
+
+#: actions/emailsettings.php:107 actions/emailsettings.php:140
+#: actions/imsettings.php:108 actions/smssettings.php:115
+#: actions/smssettings.php:158
+msgid "Remove"
+msgstr "Dilemel"
+
+#: actions/emailsettings.php:113
+msgid ""
+"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
+"a message with further instructions."
+msgstr ""
+
+#: actions/emailsettings.php:117 actions/imsettings.php:120
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
+msgid "Cancel"
+msgstr "Nullañ"
+
+#: actions/emailsettings.php:121
+msgid "Email address"
+msgstr "Chomlec'h postel"
+
+#: actions/emailsettings.php:123
+msgid "Email address, like \"UserName@example.org\""
+msgstr "Chomlec'h postel, evel \"AnvImplijer@example.org\""
+
+#: actions/emailsettings.php:126 actions/imsettings.php:133
+#: actions/smssettings.php:145
+msgid "Add"
+msgstr "Ouzhpennañ"
+
+#: actions/emailsettings.php:133 actions/smssettings.php:152
+msgid "Incoming email"
+msgstr "Postel o tont"
+
+#: actions/emailsettings.php:138 actions/smssettings.php:157
+msgid "Send email to this address to post new notices."
+msgstr ""
+
+#: actions/emailsettings.php:145 actions/smssettings.php:162
+msgid "Make a new email address for posting to; cancels the old one."
+msgstr ""
+
+#: actions/emailsettings.php:148 actions/smssettings.php:164
+msgid "New"
+msgstr "Nevez"
+
+#: actions/emailsettings.php:153 actions/imsettings.php:139
+#: actions/smssettings.php:169
+msgid "Preferences"
+msgstr "Penndibaboù"
+
+#: actions/emailsettings.php:158
+msgid "Send me notices of new subscriptions through email."
+msgstr ""
+
+#: actions/emailsettings.php:163
+msgid "Send me email when someone adds my notice as a favorite."
+msgstr "Kas din ur postel pa lak unan bennak unan eus va alioù evel pennroll."
+
+#: actions/emailsettings.php:169
+msgid "Send me email when someone sends me a private message."
+msgstr "Kas din ur postel pa gas unan bennak ur gemennadenn bersonel din."
+
+#: actions/emailsettings.php:174
+msgid "Send me email when someone sends me an \"@-reply\"."
+msgstr "Kas din ur postel pa gas unan bennak ur \"@-respont\" din."
+
+#: actions/emailsettings.php:179
+msgid "Allow friends to nudge me and send me an email."
+msgstr ""
+
+#: actions/emailsettings.php:185
+msgid "I want to post notices by email."
+msgstr "C'hoant am eus kas va alioù dre bostel."
+
+#: actions/emailsettings.php:191
+msgid "Publish a MicroID for my email address."
+msgstr "Embann ur MicroID evit ma chomlec'h postel."
+
+#: actions/emailsettings.php:302 actions/imsettings.php:264
+#: actions/othersettings.php:180 actions/smssettings.php:284
+msgid "Preferences saved."
+msgstr "Penndibaboù enrollet"
+
+#: actions/emailsettings.php:320
+msgid "No email address."
+msgstr "N'eus chomlec'h postel ebet."
+
+#: actions/emailsettings.php:327
+msgid "Cannot normalize that email address"
+msgstr ""
+
+#: actions/emailsettings.php:331 actions/register.php:201
+#: actions/siteadminpanel.php:144
+msgid "Not a valid email address."
+msgstr "N'eo ket ur chomlec'h postel reizh."
+
+#: actions/emailsettings.php:334
+msgid "That is already your email address."
+msgstr "Ho postel eo dija."
+
+#: actions/emailsettings.php:337
+msgid "That email address already belongs to another user."
+msgstr ""
+
+#: actions/emailsettings.php:353 actions/imsettings.php:319
+#: actions/smssettings.php:337
+msgid "Couldn't insert confirmation code."
+msgstr ""
+
+#: actions/emailsettings.php:359
+msgid ""
+"A confirmation code was sent to the email address you added. Check your "
+"inbox (and spam box!) for the code and instructions on how to use it."
+msgstr ""
+
+#: actions/emailsettings.php:379 actions/imsettings.php:351
+#: actions/smssettings.php:370
+msgid "No pending confirmation to cancel."
+msgstr ""
+
+#: actions/emailsettings.php:383 actions/imsettings.php:355
+msgid "That is the wrong IM address."
+msgstr "N'eo ket mat ar chomlec'h postelerezh prim."
+
+#: actions/emailsettings.php:395 actions/imsettings.php:367
+#: actions/smssettings.php:386
+msgid "Confirmation cancelled."
+msgstr "Nullet eo bet ar gadarnadenn."
+
+#: actions/emailsettings.php:413
+msgid "That is not your email address."
+msgstr "N'eo ket ho postel."
+
+#: actions/emailsettings.php:432 actions/imsettings.php:408
+#: actions/smssettings.php:425
+msgid "The address was removed."
+msgstr "Dilamet eo bet ar chomlec'h."
+
+#: actions/emailsettings.php:446 actions/smssettings.php:518
+msgid "No incoming email address."
+msgstr ""
+
+#: actions/emailsettings.php:456 actions/emailsettings.php:478
+#: actions/smssettings.php:528 actions/smssettings.php:552
+msgid "Couldn't update user record."
+msgstr ""
+
+#: actions/emailsettings.php:459 actions/smssettings.php:531
+msgid "Incoming email address removed."
+msgstr ""
+
+#: actions/emailsettings.php:481 actions/smssettings.php:555
+msgid "New incoming email address added."
+msgstr ""
+
+#: actions/favor.php:79
+msgid "This notice is already a favorite!"
+msgstr "Ouzhpennet eo bet an ali-mañ d'ho pennrolloù dija !"
+
+#: actions/favor.php:92 lib/disfavorform.php:140
+msgid "Disfavor favorite"
+msgstr ""
+
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
+#: lib/publicgroupnav.php:93
+msgid "Popular notices"
+msgstr "Alioù poblek"
+
+#: actions/favorited.php:67
+#, php-format
+msgid "Popular notices, page %d"
+msgstr "Alioù poblek, pajenn %d"
+
+#: actions/favorited.php:79
+msgid "The most popular notices on the site right now."
+msgstr "An alioù ar brudetañ el lec'hienn er mare-mañ."
+
+#: actions/favorited.php:150
+msgid "Favorite notices appear on this page but no one has favorited one yet."
+msgstr ""
+
+#: actions/favorited.php:153
+msgid ""
+"Be the first to add a notice to your favorites by clicking the fave button "
+"next to any notice you like."
+msgstr ""
+
+#: actions/favorited.php:156
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to add a "
+"notice to your favorites!"
+msgstr ""
+
+#: actions/favoritesrss.php:111 actions/showfavorites.php:77
+#: lib/personalgroupnav.php:115
+#, php-format
+msgid "%s's favorite notices"
+msgstr "Alioù pennrollet eus %s"
+
+#: actions/favoritesrss.php:115
+#, php-format
+msgid "Updates favored by %1$s on %2$s!"
+msgstr "Hizivadennoù brientek gant %1$s war %2$s !"
+
+#: actions/featured.php:69 lib/featureduserssection.php:87
+#: lib/publicgroupnav.php:89
+msgid "Featured users"
+msgstr ""
+
+#: actions/featured.php:71
+#, php-format
+msgid "Featured users, page %d"
+msgstr ""
+
+#: actions/featured.php:99
+#, php-format
+msgid "A selection of some great users on %s"
+msgstr "Un dibab eus implijerien vat e %s"
+
+#: actions/file.php:34
+msgid "No notice ID."
+msgstr "ID ali ebet."
+
+#: actions/file.php:38
+msgid "No notice."
+msgstr "Ali ebet."
+
+#: actions/file.php:42
+msgid "No attachments."
+msgstr "N'eus restr stag ebet."
+
+#: actions/file.php:51
+msgid "No uploaded attachments."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:69
+msgid "Not expecting this response!"
+msgstr "Ne oa ket gortozet ar respont-mañ !"
+
+#: actions/finishremotesubscribe.php:80
+msgid "User being listened to does not exist."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
+msgid "You can use the local subscription!"
+msgstr ""
+
+#: actions/finishremotesubscribe.php:99
+msgid "That user has blocked you from subscribing."
+msgstr "An implijer-se en deus ho stanket evit en enskrivañ."
+
+#: actions/finishremotesubscribe.php:110
+msgid "You are not authorized."
+msgstr "N'oc'h ket aotreet."
+
+#: actions/finishremotesubscribe.php:113
+msgid "Could not convert request token to access token."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:118
+msgid "Remote service uses unknown version of OMB protocol."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
+msgid "Error updating remote profile"
+msgstr ""
+
+#: actions/getfile.php:79
+msgid "No such file."
+msgstr "Restr ezvezant."
+
+#: actions/getfile.php:83
+msgid "Cannot read file."
+msgstr "Diposupl eo lenn ar restr."
+
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Fichenn direizh."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "An implijer-mañ n'eus profil ebet dezhañ."
+
+#: actions/groupblock.php:71 actions/groupunblock.php:71
+#: actions/makeadmin.php:71 actions/subedit.php:46
+#: lib/profileformaction.php:70
+msgid "No profile specified."
+msgstr "N'eo bet resisaet profil ebet"
+
+#: actions/groupblock.php:76 actions/groupunblock.php:76
+#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
+#: actions/unsubscribe.php:84 lib/profileformaction.php:77
+msgid "No profile with that ID."
+msgstr "N'eus profil ebet gant an ID-mañ."
+
+#: actions/groupblock.php:81 actions/groupunblock.php:81
+#: actions/makeadmin.php:81
+msgid "No group specified."
+msgstr "N'eo bet resisaet strollad ebet"
+
+#: actions/groupblock.php:91
+msgid "Only an admin can block group members."
+msgstr "N'eus neme ur merour a c'hell stankañ izili ur strollad."
+
+#: actions/groupblock.php:95
+msgid "User is already blocked from group."
+msgstr "An implijer-mañ a zo stanket dija eus ar strollad."
+
+#: actions/groupblock.php:100
+msgid "User is not a member of group."
+msgstr "N'eo ket an implijer-mañ ezel eus ur strollad."
+
+#: actions/groupblock.php:136 actions/groupmembers.php:323
+msgid "Block user from group"
+msgstr "Stankañ an implijer-mañ eus ar strollad"
+
+#: actions/groupblock.php:162
+#, php-format
+msgid ""
+"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
+"will be removed from the group, unable to post, and unable to subscribe to "
+"the group in the future."
+msgstr ""
+
+#: actions/groupblock.php:178
+msgid "Do not block this user from this group"
+msgstr "Arabat stankañ an implijer-mañ eus ar strollad."
+
+#: actions/groupblock.php:179
+msgid "Block this user from this group"
+msgstr "Stankañ an implijer-mañ eus ar strollad-se"
+
+#: actions/groupblock.php:196
+msgid "Database error blocking user from group."
+msgstr ""
+
+#: actions/groupbyid.php:74 actions/userbyid.php:70
+msgid "No ID."
+msgstr "ID ebet"
+
+#: actions/groupdesignsettings.php:68
+msgid "You must be logged in to edit a group."
+msgstr ""
+
+#: actions/groupdesignsettings.php:144
+msgid "Group design"
+msgstr "Design ar strollad"
+
+#: actions/groupdesignsettings.php:155
+msgid ""
+"Customize the way your group looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
+msgid "Couldn't update your design."
+msgstr "Diposubl eo hizivaat ho design."
+
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
+msgid "Design preferences saved."
+msgstr "Enrollet eo bet an arventennoù design."
+
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
+msgid "Group logo"
+msgstr "Logo ar strollad"
+
+#: actions/grouplogo.php:153
+#, php-format
+msgid ""
+"You can upload a logo image for your group. The maximum file size is %s."
+msgstr ""
+
+#: actions/grouplogo.php:181
+msgid "User without matching profile."
+msgstr ""
+
+#: actions/grouplogo.php:365
+msgid "Pick a square area of the image to be the logo."
+msgstr ""
+
+#: actions/grouplogo.php:399
+msgid "Logo updated."
+msgstr "Logo hizivaet."
+
+#: actions/grouplogo.php:401
+msgid "Failed updating logo."
+msgstr "N'eo ket bet kaset da benn an hizivadenn."
+
+#: actions/groupmembers.php:100 lib/groupnav.php:92
+#, php-format
+msgid "%s group members"
+msgstr "Izili ar strollad %s"
+
+#: actions/groupmembers.php:103
+#, php-format
+msgid "%1$s group members, page %2$d"
+msgstr "Izili ar strollad %1$s, pajenn %2$d"
+
+#: actions/groupmembers.php:118
+msgid "A list of the users in this group."
+msgstr "Roll an implijerien enrollet er strollad-mañ."
+
+#: actions/groupmembers.php:182 lib/groupnav.php:107
+msgid "Admin"
+msgstr "Merañ"
+
+#: actions/groupmembers.php:355 lib/blockform.php:69
+msgid "Block"
+msgstr "Stankañ"
+
+#: actions/groupmembers.php:450
+msgid "Make user an admin of the group"
+msgstr "Lakaat an implijer da vezañ ur merour eus ar strollad"
+
+#: actions/groupmembers.php:482
+msgid "Make Admin"
+msgstr "Lakaat ur merour"
+
+#: actions/groupmembers.php:482
+msgid "Make this user an admin"
+msgstr "Lakaat an implijer-mañ da verour"
+
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Oberezhioù %s"
+
+#: actions/grouprss.php:140
+#, php-format
+msgid "Updates from members of %1$s on %2$s!"
+msgstr "Hizivadenn izili %1$s e %2$s !"
+
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
+#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
+msgid "Groups"
+msgstr "Strolladoù"
+
+#: actions/groups.php:64
+#, php-format
+msgid "Groups, page %d"
+msgstr "Strollad, pajenn %d"
+
+#: actions/groups.php:90
+#, php-format
+msgid ""
+"%%%%site.name%%%% groups let you find and talk with people of similar "
+"interests. After you join a group you can send messages to all other members "
+"using the syntax \"!groupname\". Don't see a group you like? Try [searching "
+"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
+"%%%%)"
+msgstr ""
+
+#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
+msgid "Create a new group"
+msgstr "Krouiñ ur strollad nevez"
+
+#: actions/groupsearch.php:52
+#, php-format
+msgid ""
+"Search for groups on %%site.name%% by their name, location, or description. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/groupsearch.php:58
+msgid "Group search"
+msgstr "Klask strolladoù"
+
+#: actions/groupsearch.php:79 actions/noticesearch.php:117
+#: actions/peoplesearch.php:83
+msgid "No results."
+msgstr "Disoc'h ebet."
+
+#: actions/groupsearch.php:82
+#, php-format
+msgid ""
+"If you can't find the group you're looking for, you can [create it](%%action."
+"newgroup%%) yourself."
+msgstr ""
+"Ma ne gavoc'h ket ar strollad emaoc'h o klask, neuze e c'helloc'h [krouiñ "
+"anezhañ](%%action.newgroup%%)."
+
+#: actions/groupsearch.php:85
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and [create the group](%%"
+"action.newgroup%%) yourself!"
+msgstr ""
+
+#: actions/groupunblock.php:91
+msgid "Only an admin can unblock group members."
+msgstr "N'eus nemet ur merour a c'hell distankañ izili ur strollad."
+
+#: actions/groupunblock.php:95
+msgid "User is not blocked from group."
+msgstr "N'eo ket stanket an implijer-mañ eus ar strollad."
+
+#: actions/groupunblock.php:128 actions/unblock.php:86
+msgid "Error removing the block."
+msgstr "Ur fazi a zo bet e-pad nulladenn ar stankadenn."
+
+#: actions/imsettings.php:59
+msgid "IM settings"
+msgstr "Arventennoù ar bostelerezh prim"
+
+#: actions/imsettings.php:70
+#, php-format
+msgid ""
+"You can send and receive notices through Jabber/GTalk [instant messages](%%"
+"doc.im%%). Configure your address and settings below."
+msgstr ""
+
+#: actions/imsettings.php:89
+msgid "IM is not available."
+msgstr "Dizimplijadus eo ar bostelerezh prim"
+
+#: actions/imsettings.php:106
+msgid "Current confirmed Jabber/GTalk address."
+msgstr "Chomlec'h Jabber/GTalk kadarnaet er mare-mañ."
+
+#: actions/imsettings.php:114
+#, php-format
+msgid ""
+"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
+"message with further instructions. (Did you add %s to your buddy list?)"
+msgstr ""
+
+#: actions/imsettings.php:124
+msgid "IM address"
+msgstr "Chomlec'h postelerezh prim"
+
+#: actions/imsettings.php:126
+#, php-format
+msgid ""
+"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
+"add %s to your buddy list in your IM client or on GTalk."
+msgstr ""
+
+#: actions/imsettings.php:143
+msgid "Send me notices through Jabber/GTalk."
+msgstr "Kas din an alioù dre Jabber/GTalk."
+
+#: actions/imsettings.php:148
+msgid "Post a notice when my Jabber/GTalk status changes."
+msgstr ""
+
+#: actions/imsettings.php:153
+msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
+msgstr ""
+
+#: actions/imsettings.php:159
+msgid "Publish a MicroID for my Jabber/GTalk address."
+msgstr "Embann ur MicroID evit ma chomlec'h Jabber/GTalk."
+
+#: actions/imsettings.php:285
+msgid "No Jabber ID."
+msgstr "ID Jabber ebet."
+
+#: actions/imsettings.php:292
+msgid "Cannot normalize that Jabber ID"
+msgstr "Diposubl eo implijout an ID Jabber-mañ"
+
+#: actions/imsettings.php:296
+msgid "Not a valid Jabber ID"
+msgstr "N'eo ket un ID Jabber reizh."
+
+#: actions/imsettings.php:299
+msgid "That is already your Jabber ID."
+msgstr "Ho ID Jabber eo dija"
+
+#: actions/imsettings.php:302
+msgid "Jabber ID already belongs to another user."
+msgstr "Implijet eo an Jabber ID-mañ gant un implijer all."
+
+#: actions/imsettings.php:327
+#, php-format
+msgid ""
+"A confirmation code was sent to the IM address you added. You must approve %"
+"s for sending messages to you."
+msgstr ""
+
+#: actions/imsettings.php:387
+msgid "That is not your Jabber ID."
+msgstr "N'eo ket ho ID Jabber."
+
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Boest degemer %1$s - pajenn %2$d"
+
+#: actions/inbox.php:62
+#, php-format
+msgid "Inbox for %s"
+msgstr "Bost resevout %s"
+
+#: actions/inbox.php:115
+msgid "This is your inbox, which lists your incoming private messages."
+msgstr ""
+
+#: actions/invite.php:39
+msgid "Invites have been disabled."
+msgstr "Diweredekaat eo bet ar bedadennoù."
+
+#: actions/invite.php:41
+#, php-format
+msgid "You must be logged in to invite other users to use %s"
+msgstr ""
+
+#: actions/invite.php:72
+#, php-format
+msgid "Invalid email address: %s"
+msgstr "Fall eo ar postel : %s"
+
+#: actions/invite.php:110
+msgid "Invitation(s) sent"
+msgstr "Kaset eo bet ar bedadenn(où)"
+
+#: actions/invite.php:112
+msgid "Invite new users"
+msgstr "Pediñ implijerien nevez"
+
+#: actions/invite.php:128
+msgid "You are already subscribed to these users:"
+msgstr "Koumanantet oc'h dija d'an implijerien-mañ :"
+
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#, php-format
+msgid "%1$s (%2$s)"
+msgstr "%1$s (%2$s)"
+
+#: actions/invite.php:136
+msgid ""
+"These people are already users and you were automatically subscribed to them:"
+msgstr ""
+"Implijerien eo dija an dud-mañ ha koumanantet oc'h bet ez emgefre d'an "
+"implijerien da-heul :"
+
+#: actions/invite.php:144
+msgid "Invitation(s) sent to the following people:"
+msgstr "Pedadennoù bet kaset d'an implijerien da-heul :"
+
+#: actions/invite.php:150
+msgid ""
+"You will be notified when your invitees accept the invitation and register "
+"on the site. Thanks for growing the community!"
+msgstr ""
+
+#: actions/invite.php:162
+msgid ""
+"Use this form to invite your friends and colleagues to use this service."
+msgstr ""
+
+#: actions/invite.php:187
+msgid "Email addresses"
+msgstr "Chomlec'hioù postel"
+
+#: actions/invite.php:189
+msgid "Addresses of friends to invite (one per line)"
+msgstr "Chomlec'hioù an implijerien da bediñ (unan dre linenn)"
+
+#: actions/invite.php:192
+msgid "Personal message"
+msgstr "Kemenadenn bersonel"
+
+#: actions/invite.php:194
+msgid "Optionally add a personal message to the invitation."
+msgstr ""
+
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
+msgid "Send"
+msgstr "Kas"
+
+#: actions/invite.php:227
+#, php-format
+msgid "%1$s has invited you to join them on %2$s"
+msgstr "%1$s a bed ac'hanoc'h d'en em enskrivañ war %2$s"
+
+#: actions/invite.php:229
+#, php-format
+msgid ""
+"%1$s has invited you to join them on %2$s (%3$s).\n"
+"\n"
+"%2$s is a micro-blogging service that lets you keep up-to-date with people "
+"you know and people who interest you.\n"
+"\n"
+"You can also share news about yourself, your thoughts, or your life online "
+"with people who know about you. It's also great for meeting new people who "
+"share your interests.\n"
+"\n"
+"%1$s said:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see %1$s's profile page on %2$s here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"If you'd like to try the service, click on the link below to accept the "
+"invitation.\n"
+"\n"
+"%6$s\n"
+"\n"
+"If not, you can ignore this message. Thanks for your patience and your "
+"time.\n"
+"\n"
+"Sincerely, %2$s\n"
+msgstr ""
+
+#: actions/joingroup.php:60
+msgid "You must be logged in to join a group."
+msgstr "Rankout a reoc'h bezañ luget evit mont en ur strollad."
+
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Lesanv pe ID ebet."
+
+#: actions/joingroup.php:141
+#, php-format
+msgid "%1$s joined group %2$s"
+msgstr "%1$s a zo bet er strollad %2$s"
+
+#: actions/leavegroup.php:60
+msgid "You must be logged in to leave a group."
+msgstr "Ret eo deoc'h bezañ kevreet evit kuitaat ur strollad"
+
+#: actions/leavegroup.php:100 lib/command.php:265
+msgid "You are not a member of that group."
+msgstr "N'oc'h ket un ezel eus ar strollad-mañ."
+
+#: actions/leavegroup.php:137
+#, php-format
+msgid "%1$s left group %2$s"
+msgstr "%1$s en deus kuitaet ar strollad %2$s"
+
+#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
+msgid "Already logged in."
+msgstr "Kevreet oc'h dija."
+
+#: actions/login.php:126
+msgid "Incorrect username or password."
+msgstr "Anv implijer pe ger-tremen direizh."
+
+#: actions/login.php:132 actions/otp.php:120
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
+"Ur fazi 'zo bet e-pad hizivadenn an implijer. Moarvat n'oc'h ket aotreet "
+"evit en ober."
+
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
+msgid "Login"
+msgstr "Kevreañ"
+
+#: actions/login.php:227
+msgid "Login to site"
+msgstr "Kevreañ d'al lec'hienn"
+
+#: actions/login.php:236 actions/register.php:478
+msgid "Remember me"
+msgstr "Kaout soñj"
+
+#: actions/login.php:237 actions/register.php:480
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+"Digeriñ va dalc'h war-eeun ar wechoù o tont ; arabat en ober war "
+"urzhiataeroù rannet pe publik !"
+
+#: actions/login.php:247
+msgid "Lost or forgotten password?"
+msgstr "Ha kollet o peus ho ker-tremen ?"
+
+#: actions/login.php:266
+msgid ""
+"For security reasons, please re-enter your user name and password before "
+"changing your settings."
+msgstr ""
+"Evit abegoù a surentezh, mar plij adlakait hoc'h anv implijer hag ho ker-"
+"tremen a-benn enrollañ ho penndibaboù."
+
+#: actions/login.php:270
+#, php-format
+msgid ""
+"Login with your username and password. Don't have a username yet? [Register]"
+"(%%action.register%%) a new account."
+msgstr ""
+"Kevreit gant ho anv implijer hag ho ker tremen. N'o peus ket a anv implijer "
+"evit c'hoazh ? [Krouit](%%action.register%%) ur gont nevez."
+
+#: actions/makeadmin.php:92
+msgid "Only an admin can make another user an admin."
+msgstr "N'eus nemet ur merour a c'hall lakaat un implijer all da vezañ merour."
+
+#: actions/makeadmin.php:96
+#, php-format
+msgid "%1$s is already an admin for group \"%2$s\"."
+msgstr "%1$s a zo dija merour ar strollad \"%2$s\"."
+
+#: actions/makeadmin.php:133
+#, php-format
+msgid "Can't get membership record for %1$s in group %2$s."
+msgstr ""
+
+#: actions/makeadmin.php:146
+#, php-format
+msgid "Can't make %1$s an admin for group %2$s."
+msgstr "Diposubl eo lakaat %1$s da merour ar strollad %2$s."
+
+#: actions/microsummary.php:69
+msgid "No current status"
+msgstr "Statud ebet er mare-mañ"
+
+#: actions/newapplication.php:52
+msgid "New Application"
+msgstr "Poellad nevez"
+
+#: actions/newapplication.php:64
+msgid "You must be logged in to register an application."
+msgstr "Ret eo deoc'h bezañ luget evit enrollañ ur poellad."
+
+#: actions/newapplication.php:143
+msgid "Use this form to register a new application."
+msgstr "Implijit ar furmskrid-mañ evit enskrivañ ur poellad nevez."
+
+#: actions/newapplication.php:176
+msgid "Source URL is required."
+msgstr "Ezhomm 'zo eus ar vammenn URL."
+
+#: actions/newapplication.php:258 actions/newapplication.php:267
+msgid "Could not create application."
+msgstr "N'eo ket posubl krouiñ ar poellad."
+
+#: actions/newgroup.php:53
+msgid "New group"
+msgstr "Strollad nevez"
+
+#: actions/newgroup.php:110
+msgid "Use this form to create a new group."
+msgstr "Implijit ar furmskrid-mañ a-benn krouiñ ur strollad nevez."
+
+#: actions/newmessage.php:71 actions/newmessage.php:231
+msgid "New message"
+msgstr "Kemennadenn nevez"
+
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+msgid "You can't send a message to this user."
+msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
+
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
+#: lib/command.php:475
+msgid "No content!"
+msgstr "Goullo eo !"
+
+#: actions/newmessage.php:158
+msgid "No recipient specified."
+msgstr "N'o peus ket lakaet a resever."
+
+#: actions/newmessage.php:164 lib/command.php:361
+msgid ""
+"Don't send a message to yourself; just say it to yourself quietly instead."
+msgstr ""
+"Na gasit ket a gemennadenn deoc'h c'hwi ho unan ; lavarit an traoù-se en ho "
+"penn kentoc'h."
+
+#: actions/newmessage.php:181
+msgid "Message sent"
+msgstr "Kaset eo bet ar gemenadenn"
+
+#: actions/newmessage.php:185
+#, php-format
+msgid "Direct message to %s sent."
+msgstr "Kaset eo bet da %s ar gemennadenn war-eeun."
+
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+msgid "Ajax Error"
+msgstr "Fazi Ajax"
+
+#: actions/newnotice.php:69
+msgid "New notice"
+msgstr "Ali nevez"
+
+#: actions/newnotice.php:211
+msgid "Notice posted"
+msgstr "Ali embannet"
+
+#: actions/noticesearch.php:68
+#, php-format
+msgid ""
+"Search for notices on %%site.name%% by their contents. Separate search terms "
+"by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/noticesearch.php:78
+msgid "Text search"
+msgstr "Klask un destenn"
+
+#: actions/noticesearch.php:91
+#, php-format
+msgid "Search results for \"%1$s\" on %2$s"
+msgstr "Disoc'hoù ar c'hlask evit \"%1$s\" e %2$s"
+
+#: actions/noticesearch.php:121
+#, php-format
+msgid ""
+"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearch.php:124
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and be the first to "
+"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearchrss.php:96
+#, php-format
+msgid "Updates with \"%s\""
+msgstr "Hizivadenn gant \"%s\""
+
+#: actions/noticesearchrss.php:98
+#, php-format
+msgid "Updates matching search term \"%1$s\" on %2$s!"
+msgstr ""
+
+#: actions/nudge.php:85
+msgid ""
+"This user doesn't allow nudges or hasn't confirmed or set his email yet."
+msgstr ""
+
+#: actions/nudge.php:94
+msgid "Nudge sent"
+msgstr "Kaset eo bet ar blinkadenn"
+
+#: actions/nudge.php:97
+msgid "Nudge sent!"
+msgstr "Kaset eo bet ar blinkadenn !"
+
+#: actions/oauthappssettings.php:59
+msgid "You must be logged in to list your applications."
+msgstr "Rankout a reoc'h bezañ kevreet evit rollañ ho poelladoù."
+
+#: actions/oauthappssettings.php:74
+msgid "OAuth applications"
+msgstr "Poelladoù OAuth"
+
+#: actions/oauthappssettings.php:85
+msgid "Applications you have registered"
+msgstr "Ar poelladoù o peus enrollet"
+
+#: actions/oauthappssettings.php:135
+#, php-format
+msgid "You have not registered any applications yet."
+msgstr "N'o peus enrollet poellad ebet evit poent."
+
+#: actions/oauthconnectionssettings.php:72
+msgid "Connected applications"
+msgstr "Poeladoù kevreet."
+
+#: actions/oauthconnectionssettings.php:83
+msgid "You have allowed the following applications to access you account."
+msgstr ""
+
+#: actions/oauthconnectionssettings.php:175
+msgid "You are not a user of that application."
+msgstr "N'oc'h ket un implijer eus ar poellad-mañ."
+
+#: actions/oauthconnectionssettings.php:186
+msgid "Unable to revoke access for app: "
+msgstr "Dibosupl eo nullañ moned ar poellad : "
+
+#: actions/oauthconnectionssettings.php:198
+#, php-format
+msgid "You have not authorized any applications to use your account."
+msgstr ""
+
+#: actions/oauthconnectionssettings.php:211
+msgid "Developers can edit the registration settings for their applications "
+msgstr ""
+
+#: actions/oembed.php:79 actions/shownotice.php:100
+msgid "Notice has no profile"
+msgstr "N'en deus ket an ali a profil"
+
+#: actions/oembed.php:86 actions/shownotice.php:180
+#, php-format
+msgid "%1$s's status on %2$s"
+msgstr "Statud %1$s war %2$s"
+
+#: actions/oembed.php:157
+msgid "content type "
+msgstr "seurt an danvez "
+
+#: actions/oembed.php:160
+msgid "Only "
+msgstr "Hepken "
+
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
+msgid "Not a supported data format."
+msgstr ""
+
+#: actions/opensearch.php:64
+msgid "People Search"
+msgstr "Klask tud"
+
+#: actions/opensearch.php:67
+msgid "Notice Search"
+msgstr "Klask alioù"
+
+#: actions/othersettings.php:60
+msgid "Other settings"
+msgstr "Arventennoù all"
+
+#: actions/othersettings.php:71
+msgid "Manage various other options."
+msgstr "Dibarzhioù all da gefluniañ."
+
+#: actions/othersettings.php:108
+msgid " (free service)"
+msgstr " (servij digoust)"
+
+#: actions/othersettings.php:116
+msgid "Shorten URLs with"
+msgstr ""
+
+#: actions/othersettings.php:117
+msgid "Automatic shortening service to use."
+msgstr ""
+
+#: actions/othersettings.php:122
+msgid "View profile designs"
+msgstr ""
+
+#: actions/othersettings.php:123
+msgid "Show or hide profile designs."
+msgstr ""
+
+#: actions/othersettings.php:153
+msgid "URL shortening service is too long (max 50 chars)."
+msgstr ""
+
+#: actions/otp.php:69
+msgid "No user ID specified."
+msgstr "N'eus bet diferet ID implijer ebet."
+
+#: actions/otp.php:83
+msgid "No login token specified."
+msgstr ""
+
+#: actions/otp.php:90
+msgid "No login token requested."
+msgstr ""
+
+#: actions/otp.php:95
+msgid "Invalid login token specified."
+msgstr ""
+
+#: actions/otp.php:104
+msgid "Login token expired."
+msgstr ""
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Boest kas %1$s - pajenn %2$d"
+
+#: actions/outbox.php:61
+#, php-format
+msgid "Outbox for %s"
+msgstr "Boest kas %s"
+
+#: actions/outbox.php:116
+msgid "This is your outbox, which lists private messages you have sent."
+msgstr ""
+
+#: actions/passwordsettings.php:58
+msgid "Change password"
+msgstr "Cheñch ger-tremen"
+
+#: actions/passwordsettings.php:69
+msgid "Change your password."
+msgstr "Kemmañ ho ger tremen."
+
+#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
+msgid "Password change"
+msgstr "Kemmañ ar ger-tremen"
+
+#: actions/passwordsettings.php:104
+msgid "Old password"
+msgstr "Ger-tremen kozh"
+
+#: actions/passwordsettings.php:108 actions/recoverpassword.php:235
+msgid "New password"
+msgstr "Ger-tremen nevez"
+
+#: actions/passwordsettings.php:109
+msgid "6 or more characters"
+msgstr "6 arouezenn pe muioc'h"
+
+#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
+#: actions/register.php:433 actions/smssettings.php:134
+msgid "Confirm"
+msgstr "Kadarnaat"
+
+#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
+msgid "Same as password above"
+msgstr "Memestra eget ar ger tremen a-us"
+
+#: actions/passwordsettings.php:117
+msgid "Change"
+msgstr "Kemmañ"
+
+#: actions/passwordsettings.php:154 actions/register.php:230
+msgid "Password must be 6 or more characters."
+msgstr ""
+
+#: actions/passwordsettings.php:157 actions/register.php:233
+msgid "Passwords don't match."
+msgstr "Ne glot ket ar gerioù-tremen."
+
+#: actions/passwordsettings.php:165
+msgid "Incorrect old password"
+msgstr "ger-termen kozh amreizh"
+
+#: actions/passwordsettings.php:181
+msgid "Error saving user; invalid."
+msgstr "Ur fazi 'zo bet e-pad enolladenn an implijer ; diwiriek."
+
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+msgid "Can't save new password."
+msgstr "Dibosupl eo enrollañ ar ger-tremen nevez."
+
+#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
+msgid "Password saved."
+msgstr "Ger-tremen enrollet."
+
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
+msgid "Paths"
+msgstr "Hentoù"
+
+#: actions/pathsadminpanel.php:70
+msgid "Path and server settings for this StatusNet site."
+msgstr ""
+
+#: actions/pathsadminpanel.php:157
+#, php-format
+msgid "Theme directory not readable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:163
+#, php-format
+msgid "Avatar directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:169
+#, php-format
+msgid "Background directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:177
+#, php-format
+msgid "Locales directory not readable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:183
+msgid "Invalid SSL server. The maximum length is 255 characters."
+msgstr ""
+
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
+msgid "Site"
+msgstr "Lec'hien"
+
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servijer"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
+msgid "Path"
+msgstr "Hent"
+
+#: actions/pathsadminpanel.php:242
+msgid "Site path"
+msgstr "Hent al lec'hien"
+
+#: actions/pathsadminpanel.php:246
+msgid "Path to locales"
+msgstr ""
+
+#: actions/pathsadminpanel.php:246
+msgid "Directory path to locales"
+msgstr ""
+
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URLioù brav"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
+msgid "Theme"
+msgstr "Danvez"
+
+#: actions/pathsadminpanel.php:264
+msgid "Theme server"
+msgstr "Servijer danvezioù"
+
+#: actions/pathsadminpanel.php:268
+msgid "Theme path"
+msgstr "Hentad an tem"
+
+#: actions/pathsadminpanel.php:272
+msgid "Theme directory"
+msgstr ""
+
+#: actions/pathsadminpanel.php:279
+msgid "Avatars"
+msgstr "Avataroù"
+
+#: actions/pathsadminpanel.php:284
+msgid "Avatar server"
+msgstr "Servijer avatar"
+
+#: actions/pathsadminpanel.php:288
+msgid "Avatar path"
+msgstr ""
+
+#: actions/pathsadminpanel.php:292
+msgid "Avatar directory"
+msgstr ""
+
+#: actions/pathsadminpanel.php:301
+msgid "Backgrounds"
+msgstr "Backgroundoù"
+
+#: actions/pathsadminpanel.php:305
+msgid "Background server"
+msgstr "Servijer ar backgroundoù"
+
+#: actions/pathsadminpanel.php:309
+msgid "Background path"
+msgstr ""
+
+#: actions/pathsadminpanel.php:313
+msgid "Background directory"
+msgstr ""
+
+#: actions/pathsadminpanel.php:320
+msgid "SSL"
+msgstr "SSL"
+
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
+msgid "Never"
+msgstr "Morse"
+
+#: actions/pathsadminpanel.php:324
+msgid "Sometimes"
+msgstr "A-wechoù"
+
+#: actions/pathsadminpanel.php:325
+msgid "Always"
+msgstr "Atav"
+
+#: actions/pathsadminpanel.php:329
+msgid "Use SSL"
+msgstr "Implij SSl"
+
+#: actions/pathsadminpanel.php:330
+msgid "When to use SSL"
+msgstr ""
+
+#: actions/pathsadminpanel.php:335
+msgid "SSL server"
+msgstr "Servijer SSL"
+
+#: actions/pathsadminpanel.php:336
+msgid "Server to direct SSL requests to"
+msgstr ""
+
+#: actions/pathsadminpanel.php:352
+msgid "Save paths"
+msgstr "Enrollañ an hentadoù."
+
+#: actions/peoplesearch.php:52
+#, php-format
+msgid ""
+"Search for people on %%site.name%% by their name, location, or interests. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/peoplesearch.php:58
+msgid "People search"
+msgstr "Klask tud"
+
+#: actions/peopletag.php:70
+#, php-format
+msgid "Not a valid people tag: %s"
+msgstr "N'eo ket reizh ar merk-se : %s"
+
+#: actions/peopletag.php:144
+#, php-format
+msgid "Users self-tagged with %1$s - page %2$d"
+msgstr ""
+
+#: actions/postnotice.php:95
+msgid "Invalid notice content"
+msgstr ""
+
+#: actions/postnotice.php:101
+#, php-format
+msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
+msgstr ""
+
+#: actions/profilesettings.php:60
+msgid "Profile settings"
+msgstr "Arventennoù ar profil"
+
+#: actions/profilesettings.php:71
+msgid ""
+"You can update your personal profile info here so people know more about you."
+msgstr ""
+
+#: actions/profilesettings.php:99
+msgid "Profile information"
+msgstr ""
+
+#: actions/profilesettings.php:108 lib/groupeditform.php:154
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: actions/profilesettings.php:111 actions/register.php:448
+#: actions/showgroup.php:255 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:149
+msgid "Full name"
+msgstr "Anv klok"
+
+#: actions/profilesettings.php:115 actions/register.php:453
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
+msgid "Homepage"
+msgstr "Pajenn degemer"
+
+#: actions/profilesettings.php:117 actions/register.php:455
+msgid "URL of your homepage, blog, or profile on another site"
+msgstr ""
+
+#: actions/profilesettings.php:122 actions/register.php:461
+#, php-format
+msgid "Describe yourself and your interests in %d chars"
+msgstr ""
+
+#: actions/profilesettings.php:125 actions/register.php:464
+msgid "Describe yourself and your interests"
+msgstr ""
+
+#: actions/profilesettings.php:127 actions/register.php:466
+msgid "Bio"
+msgstr "Buhezskrid"
+
+#: actions/profilesettings.php:132 actions/register.php:471
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
+#: lib/userprofile.php:164
+msgid "Location"
+msgstr "Lec'hiadur"
+
+#: actions/profilesettings.php:134 actions/register.php:473
+msgid "Where you are, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: actions/profilesettings.php:138
+msgid "Share my current location when posting notices"
+msgstr ""
+
+#: actions/profilesettings.php:145 actions/tagother.php:149
+#: actions/tagother.php:209 lib/subscriptionlist.php:106
+#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+msgid "Tags"
+msgstr "Balizennoù"
+
+#: actions/profilesettings.php:147
+msgid ""
+"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
+msgstr ""
+
+#: actions/profilesettings.php:151
+msgid "Language"
+msgstr "Yezh"
+
+#: actions/profilesettings.php:152
+msgid "Preferred language"
+msgstr "Yezh d'ober ganti da gentañ"
+
+#: actions/profilesettings.php:161
+msgid "Timezone"
+msgstr "Takad eur"
+
+#: actions/profilesettings.php:162
+msgid "What timezone are you normally in?"
+msgstr ""
+
+#: actions/profilesettings.php:167
+msgid ""
+"Automatically subscribe to whoever subscribes to me (best for non-humans)"
+msgstr ""
+
+#: actions/profilesettings.php:228 actions/register.php:223
+#, php-format
+msgid "Bio is too long (max %d chars)."
+msgstr ""
+
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
+msgid "Timezone not selected."
+msgstr "N'eo bet dibabet gwerzhid-eur ebet."
+
+#: actions/profilesettings.php:241
+msgid "Language is too long (max 50 chars)."
+msgstr ""
+
+#: actions/profilesettings.php:253 actions/tagother.php:178
+#, php-format
+msgid "Invalid tag: \"%s\""
+msgstr "Balizenn direizh : \"%s\""
+
+#: actions/profilesettings.php:306
+msgid "Couldn't update user for autosubscribe."
+msgstr ""
+
+#: actions/profilesettings.php:363
+msgid "Couldn't save location prefs."
+msgstr ""
+
+#: actions/profilesettings.php:375
+msgid "Couldn't save profile."
+msgstr "Diposubl eo enrollañ ar profil."
+
+#: actions/profilesettings.php:383
+msgid "Couldn't save tags."
+msgstr "Diposubl eo enrollañ ar balizennoù."
+
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
+msgid "Settings saved."
+msgstr "Enrollet eo bet an arventennoù."
+
+#: actions/public.php:83
+#, php-format
+msgid "Beyond the page limit (%s)"
+msgstr ""
+
+#: actions/public.php:92
+msgid "Could not retrieve public stream."
+msgstr ""
+
+#: actions/public.php:130
+#, php-format
+msgid "Public timeline, page %d"
+msgstr ""
+
+#: actions/public.php:132 lib/publicgroupnav.php:79
+msgid "Public timeline"
+msgstr ""
+
+#: actions/public.php:160
+msgid "Public Stream Feed (RSS 1.0)"
+msgstr ""
+
+#: actions/public.php:164
+msgid "Public Stream Feed (RSS 2.0)"
+msgstr ""
+
+#: actions/public.php:168
+msgid "Public Stream Feed (Atom)"
+msgstr ""
+
+#: actions/public.php:188
+#, php-format
+msgid ""
+"This is the public timeline for %%site.name%% but no one has posted anything "
+"yet."
+msgstr ""
+
+#: actions/public.php:191
+msgid "Be the first to post!"
+msgstr "Bezit an hini gentañ da bostañ !"
+
+#: actions/public.php:195
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post!"
+msgstr ""
+
+#: actions/public.php:242
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool. [Join now](%%action.register%%) to share notices about yourself with "
+"friends, family, and colleagues! ([Read more](%%doc.help%%))"
+msgstr ""
+
+#: actions/public.php:247
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool."
+msgstr ""
+
+#: actions/publictagcloud.php:57
+msgid "Public tag cloud"
+msgstr ""
+
+#: actions/publictagcloud.php:63
+#, php-format
+msgid "These are most popular recent tags on %s "
+msgstr ""
+
+#: actions/publictagcloud.php:69
+#, php-format
+msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
+msgstr ""
+
+#: actions/publictagcloud.php:72
+msgid "Be the first to post one!"
+msgstr ""
+
+#: actions/publictagcloud.php:75
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post "
+"one!"
+msgstr ""
+
+#: actions/publictagcloud.php:134
+msgid "Tag cloud"
+msgstr ""
+
+#: actions/recoverpassword.php:36
+msgid "You are already logged in!"
+msgstr "Luget oc'h dija !"
+
+#: actions/recoverpassword.php:62
+msgid "No such recovery code."
+msgstr "Kod adtapout nann-kavet."
+
+#: actions/recoverpassword.php:66
+msgid "Not a recovery code."
+msgstr "N'eo ket ur c'hod adtapout an dra-mañ."
+
+#: actions/recoverpassword.php:73
+msgid "Recovery code for unknown user."
+msgstr ""
+
+#: actions/recoverpassword.php:86
+msgid "Error with confirmation code."
+msgstr ""
+
+#: actions/recoverpassword.php:97
+msgid "This confirmation code is too old. Please start again."
+msgstr ""
+
+#: actions/recoverpassword.php:111
+msgid "Could not update user with confirmed email address."
+msgstr ""
+
+#: actions/recoverpassword.php:152
+msgid ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the email address you have stored in your account."
+msgstr ""
+
+#: actions/recoverpassword.php:158
+msgid "You have been identified. Enter a new password below. "
+msgstr ""
+
+#: actions/recoverpassword.php:188
+msgid "Password recovery"
+msgstr "Adtapout ar ger-tremen"
+
+#: actions/recoverpassword.php:191
+msgid "Nickname or email address"
+msgstr ""
+
+#: actions/recoverpassword.php:193
+msgid "Your nickname on this server, or your registered email address."
+msgstr ""
+
+#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
+msgid "Recover"
+msgstr "Adtapout"
+
+#: actions/recoverpassword.php:208
+msgid "Reset password"
+msgstr "Adderaouekaat ar ger-tremen"
+
+#: actions/recoverpassword.php:209
+msgid "Recover password"
+msgstr "Adtapout ar ger-tremen"
+
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+msgid "Password recovery requested"
+msgstr "Goulennet eo an adtapout gerioù-tremen"
+
+#: actions/recoverpassword.php:213
+msgid "Unknown action"
+msgstr "Ober dianav"
+
+#: actions/recoverpassword.php:236
+msgid "6 or more characters, and don't forget it!"
+msgstr "6 arouezenn pe muioc'h, ha n'e zisoñjit ket !"
+
+#: actions/recoverpassword.php:243
+msgid "Reset"
+msgstr "Adderaouekaat"
+
+#: actions/recoverpassword.php:252
+msgid "Enter a nickname or email address."
+msgstr "Lakait ul lesanv pe ur chomlec'h postel."
+
+#: actions/recoverpassword.php:272
+msgid "No user with that email address or username."
+msgstr ""
+
+#: actions/recoverpassword.php:287
+msgid "No registered email address for that user."
+msgstr ""
+
+#: actions/recoverpassword.php:301
+msgid "Error saving address confirmation."
+msgstr ""
+
+#: actions/recoverpassword.php:325
+msgid ""
+"Instructions for recovering your password have been sent to the email "
+"address registered to your account."
+msgstr ""
+
+#: actions/recoverpassword.php:344
+msgid "Unexpected password reset."
+msgstr ""
+
+#: actions/recoverpassword.php:352
+msgid "Password must be 6 chars or more."
+msgstr ""
+
+#: actions/recoverpassword.php:356
+msgid "Password and confirmation do not match."
+msgstr ""
+
+#: actions/recoverpassword.php:375 actions/register.php:248
+msgid "Error setting user."
+msgstr ""
+
+#: actions/recoverpassword.php:382
+msgid "New password successfully saved. You are now logged in."
+msgstr ""
+
+#: actions/register.php:85 actions/register.php:189 actions/register.php:405
+msgid "Sorry, only invited people can register."
+msgstr ""
+
+#: actions/register.php:92
+msgid "Sorry, invalid invitation code."
+msgstr "Digarezit, kod pedadenn direizh."
+
+#: actions/register.php:112
+msgid "Registration successful"
+msgstr ""
+
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
+msgid "Register"
+msgstr "Krouiñ ur gont"
+
+#: actions/register.php:135
+msgid "Registration not allowed."
+msgstr ""
+
+#: actions/register.php:198
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: actions/register.php:212
+msgid "Email address already exists."
+msgstr "Implijet eo dija ar chomlec'h postel-se."
+
+#: actions/register.php:243 actions/register.php:265
+msgid "Invalid username or password."
+msgstr ""
+
+#: actions/register.php:343
+msgid ""
+"With this form you can create a new account. You can then post notices and "
+"link up to friends and colleagues. "
+msgstr ""
+
+#: actions/register.php:425
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
+msgstr ""
+
+#: actions/register.php:430
+msgid "6 or more characters. Required."
+msgstr "6 arouezenn pe muioc'h. Rekis."
+
+#: actions/register.php:434
+msgid "Same as password above. Required."
+msgstr "Memestra hag ar ger-tremen a-us. Rekis."
+
+#: actions/register.php:438 actions/register.php:442
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
+msgid "Email"
+msgstr "Postel"
+
+#: actions/register.php:439 actions/register.php:443
+msgid "Used only for updates, announcements, and password recovery"
+msgstr ""
+
+#: actions/register.php:450
+msgid "Longer name, preferably your \"real\" name"
+msgstr ""
+
+#: actions/register.php:494
+msgid "My text and files are available under "
+msgstr ""
+
+#: actions/register.php:496
+msgid "Creative Commons Attribution 3.0"
+msgstr ""
+
+#: actions/register.php:497
+msgid ""
+" except this private data: password, email address, IM address, and phone "
+"number."
+msgstr ""
+
+#: actions/register.php:538
+#, php-format
+msgid ""
+"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
+"want to...\n"
+"\n"
+"* Go to [your profile](%2$s) and post your first message.\n"
+"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
+"notices through instant messages.\n"
+"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
+"share your interests. \n"
+"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
+"others more about you. \n"
+"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
+"missed. \n"
+"\n"
+"Thanks for signing up and we hope you enjoy using this service."
+msgstr ""
+
+#: actions/register.php:562
+msgid ""
+"(You should receive a message by email momentarily, with instructions on how "
+"to confirm your email address.)"
+msgstr ""
+
+#: actions/remotesubscribe.php:98
+#, php-format
+msgid ""
+"To subscribe, you can [login](%%action.login%%), or [register](%%action."
+"register%%) a new account. If you already have an account on a [compatible "
+"microblogging site](%%doc.openmublog%%), enter your profile URL below."
+msgstr ""
+
+#: actions/remotesubscribe.php:112
+msgid "Remote subscribe"
+msgstr ""
+
+#: actions/remotesubscribe.php:124
+msgid "Subscribe to a remote user"
+msgstr ""
+
+#: actions/remotesubscribe.php:129
+msgid "User nickname"
+msgstr ""
+
+#: actions/remotesubscribe.php:130
+msgid "Nickname of the user you want to follow"
+msgstr ""
+
+#: actions/remotesubscribe.php:133
+msgid "Profile URL"
+msgstr ""
+
+#: actions/remotesubscribe.php:134
+msgid "URL of your profile on another compatible microblogging service"
+msgstr ""
+
+#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
+#: lib/userprofile.php:394
+msgid "Subscribe"
+msgstr "En em enskrivañ"
+
+#: actions/remotesubscribe.php:159
+msgid "Invalid profile URL (bad format)"
+msgstr ""
+
+#: actions/remotesubscribe.php:168
+msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
+msgstr ""
+
+#: actions/remotesubscribe.php:176
+msgid "That’s a local profile! Login to subscribe."
+msgstr ""
+
+#: actions/remotesubscribe.php:183
+msgid "Couldn’t get a request token."
+msgstr ""
+
+#: actions/repeat.php:57
+msgid "Only logged-in users can repeat notices."
+msgstr ""
+
+#: actions/repeat.php:64 actions/repeat.php:71
+msgid "No notice specified."
+msgstr "N'eus bet diferet ali ebet."
+
+#: actions/repeat.php:76
+msgid "You can't repeat your own notice."
+msgstr "Ne c'helloc'h ket adkemer ho ali deoc'h."
+
+#: actions/repeat.php:90
+msgid "You already repeated that notice."
+msgstr "Adkemeret o peus dija an ali-mañ."
+
+#: actions/repeat.php:114 lib/noticelist.php:674
+msgid "Repeated"
+msgstr "Adlavaret"
+
+#: actions/repeat.php:119
+msgid "Repeated!"
+msgstr "Adlavaret !"
+
+#: actions/replies.php:126 actions/repliesrss.php:68
+#: lib/personalgroupnav.php:105
+#, php-format
+msgid "Replies to %s"
+msgstr "Respontoù da %s"
+
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Respontoù da %1$s, pajenn %2$d"
+
+#: actions/replies.php:145
+#, php-format
+msgid "Replies feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/replies.php:152
+#, php-format
+msgid "Replies feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/replies.php:159
+#, php-format
+msgid "Replies feed for %s (Atom)"
+msgstr ""
+
+#: actions/replies.php:199
+#, php-format
+msgid ""
+"This is the timeline showing replies to %1$s but %2$s hasn't received a "
+"notice to his attention yet."
+msgstr ""
+
+#: actions/replies.php:204
+#, php-format
+msgid ""
+"You can engage other users in a conversation, subscribe to more people or "
+"[join groups](%%action.groups%%)."
+msgstr ""
+
+#: actions/replies.php:206
+#, php-format
+msgid ""
+"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
+"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+msgstr ""
+
+#: actions/repliesrss.php:72
+#, php-format
+msgid "Replies to %1$s on %2$s!"
+msgstr ""
+
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
+#: actions/rsd.php:146 actions/version.php:157
+msgid "StatusNet"
+msgstr "StatusNet"
+
+#: actions/sandbox.php:65 actions/unsandbox.php:65
+msgid "You cannot sandbox users on this site."
+msgstr ""
+
+#: actions/sandbox.php:72
+msgid "User is already sandboxed."
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
+msgid "Sessions"
+msgstr "Dalc'hoù"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Merañ an dalc'hoù"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr ""
+
+#: actions/showapplication.php:82
+msgid "You must be logged in to view an application."
+msgstr ""
+
+#: actions/showapplication.php:157
+msgid "Application profile"
+msgstr ""
+
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
+msgid "Icon"
+msgstr ""
+
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
+msgid "Name"
+msgstr "Anv"
+
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
+msgid "Organization"
+msgstr ""
+
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
+msgid "Description"
+msgstr ""
+
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
+msgid "Statistics"
+msgstr "Stadegoù"
+
+#: actions/showapplication.php:203
+#, php-format
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr ""
+
+#: actions/showapplication.php:213
+msgid "Application actions"
+msgstr ""
+
+#: actions/showapplication.php:236
+msgid "Reset key & secret"
+msgstr ""
+
+#: actions/showapplication.php:261
+msgid "Application info"
+msgstr ""
+
+#: actions/showapplication.php:263
+msgid "Consumer key"
+msgstr ""
+
+#: actions/showapplication.php:268
+msgid "Consumer secret"
+msgstr ""
+
+#: actions/showapplication.php:273
+msgid "Request token URL"
+msgstr ""
+
+#: actions/showapplication.php:278
+msgid "Access token URL"
+msgstr ""
+
+#: actions/showapplication.php:283
+msgid "Authorize URL"
+msgstr ""
+
+#: actions/showapplication.php:288
+msgid ""
+"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
+"signature method."
+msgstr ""
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr ""
+
+#: actions/showfavorites.php:132
+msgid "Could not retrieve favorite notices."
+msgstr ""
+
+#: actions/showfavorites.php:171
+#, php-format
+msgid "Feed for favorites of %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showfavorites.php:178
+#, php-format
+msgid "Feed for favorites of %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showfavorites.php:185
+#, php-format
+msgid "Feed for favorites of %s (Atom)"
+msgstr ""
+
+#: actions/showfavorites.php:206
+msgid ""
+"You haven't chosen any favorite notices yet. Click the fave button on "
+"notices you like to bookmark them for later or shed a spotlight on them."
+msgstr ""
+
+#: actions/showfavorites.php:208
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Post something interesting "
+"they would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:212
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:243
+msgid "This is a way to share what you like."
+msgstr ""
+
+#: actions/showgroup.php:82 lib/groupnav.php:86
+#, php-format
+msgid "%s group"
+msgstr "strollad %s"
+
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr ""
+
+#: actions/showgroup.php:226
+msgid "Group profile"
+msgstr "Profil ar strollad"
+
+#: actions/showgroup.php:271 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:177
+msgid "URL"
+msgstr "URL"
+
+#: actions/showgroup.php:282 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:194
+msgid "Note"
+msgstr "Notenn"
+
+#: actions/showgroup.php:292 lib/groupeditform.php:184
+msgid "Aliases"
+msgstr "Aliasoù"
+
+#: actions/showgroup.php:301
+msgid "Group actions"
+msgstr "Oberoù ar strollad"
+
+#: actions/showgroup.php:337
+#, php-format
+msgid "Notice feed for %s group (RSS 1.0)"
+msgstr ""
+
+#: actions/showgroup.php:343
+#, php-format
+msgid "Notice feed for %s group (RSS 2.0)"
+msgstr ""
+
+#: actions/showgroup.php:349
+#, php-format
+msgid "Notice feed for %s group (Atom)"
+msgstr ""
+
+#: actions/showgroup.php:354
+#, php-format
+msgid "FOAF for %s group"
+msgstr ""
+
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+msgid "Members"
+msgstr "Izili"
+
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
+#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
+msgid "(None)"
+msgstr "(hini ebet)"
+
+#: actions/showgroup.php:401
+msgid "All members"
+msgstr "An holl izili"
+
+#: actions/showgroup.php:441
+msgid "Created"
+msgstr "Krouet"
+
+#: actions/showgroup.php:457
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showgroup.php:463
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. "
+msgstr ""
+
+#: actions/showgroup.php:491
+msgid "Admins"
+msgstr "Merourien"
+
+#: actions/showmessage.php:81
+msgid "No such message."
+msgstr "N'eus ket eus ar gemennadenn-se."
+
+#: actions/showmessage.php:98
+msgid "Only the sender and recipient may read this message."
+msgstr ""
+
+#: actions/showmessage.php:108
+#, php-format
+msgid "Message to %1$s on %2$s"
+msgstr ""
+
+#: actions/showmessage.php:113
+#, php-format
+msgid "Message from %1$s on %2$s"
+msgstr ""
+
+#: actions/shownotice.php:90
+msgid "Notice deleted."
+msgstr ""
+
+#: actions/showstream.php:73
+#, php-format
+msgid " tagged %s"
+msgstr " merket %s"
+
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr ""
+
+#: actions/showstream.php:122
+#, php-format
+msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:129
+#, php-format
+msgid "Notice feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:136
+#, php-format
+msgid "Notice feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showstream.php:143
+#, php-format
+msgid "Notice feed for %s (Atom)"
+msgstr ""
+
+#: actions/showstream.php:148
+#, php-format
+msgid "FOAF for %s"
+msgstr ""
+
+#: actions/showstream.php:200
+#, php-format
+msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
+msgstr ""
+
+#: actions/showstream.php:205
+msgid ""
+"Seen anything interesting recently? You haven't posted any notices yet, now "
+"would be a good time to start :)"
+msgstr ""
+
+#: actions/showstream.php:207
+#, php-format
+msgid ""
+"You can try to nudge %1$s or [post something to his or her attention](%%%%"
+"action.newnotice%%%%?status_textarea=%2$s)."
+msgstr ""
+
+#: actions/showstream.php:243
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
+"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showstream.php:248
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. "
+msgstr ""
+
+#: actions/showstream.php:305
+#, php-format
+msgid "Repeat of %s"
+msgstr ""
+
+#: actions/silence.php:65 actions/unsilence.php:65
+msgid "You cannot silence users on this site."
+msgstr ""
+
+#: actions/silence.php:72
+msgid "User is already silenced."
+msgstr ""
+
+#: actions/siteadminpanel.php:69
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Arventennoù design evit al lec'hienn StatusNet-mañ."
+
+#: actions/siteadminpanel.php:133
+msgid "Site name must have non-zero length."
+msgstr ""
+
+#: actions/siteadminpanel.php:141
+msgid "You must have a valid contact email address."
+msgstr ""
+
+#: actions/siteadminpanel.php:159
+#, php-format
+msgid "Unknown language \"%s\"."
+msgstr ""
+
+#: actions/siteadminpanel.php:165
+msgid "Minimum text limit is 140 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:171
+msgid "Dupe limit must 1 or more seconds."
+msgstr ""
+
+#: actions/siteadminpanel.php:221
+msgid "General"
+msgstr "Hollek"
+
+#: actions/siteadminpanel.php:224
+msgid "Site name"
+msgstr "Anv al lec'hienn"
+
+#: actions/siteadminpanel.php:225
+msgid "The name of your site, like \"Yourcompany Microblog\""
+msgstr ""
+
+#: actions/siteadminpanel.php:229
+msgid "Brought by"
+msgstr "Degaset gant"
+
+#: actions/siteadminpanel.php:230
+msgid "Text used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:234
+msgid "Brought by URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:235
+msgid "URL used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:239
+msgid "Contact email address for your site"
+msgstr ""
+
+#: actions/siteadminpanel.php:245
+msgid "Local"
+msgstr "Lec'hel"
+
+#: actions/siteadminpanel.php:256
+msgid "Default timezone"
+msgstr ""
+
+#: actions/siteadminpanel.php:257
+msgid "Default timezone for the site; usually UTC."
+msgstr ""
+
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
+msgstr "Yezh d'ober ganti da gentañ"
+
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Bevennoù"
+
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr ""
+
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ali"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Kemennadenn nevez"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Diposubl eo enrollañ an titouroù stankañ."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Eilañ an ali"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Dilemel un ali"
+
+#: actions/smssettings.php:58
+msgid "SMS settings"
+msgstr "Arventennoù SMS"
+
+#: actions/smssettings.php:69
+#, php-format
+msgid "You can receive SMS messages through email from %%site.name%%."
+msgstr ""
+
+#: actions/smssettings.php:91
+msgid "SMS is not available."
+msgstr "Dizimplijadus eo an SMS."
+
+#: actions/smssettings.php:112
+msgid "Current confirmed SMS-enabled phone number."
+msgstr ""
+
+#: actions/smssettings.php:123
+msgid "Awaiting confirmation on this phone number."
+msgstr ""
+
+#: actions/smssettings.php:130
+msgid "Confirmation code"
+msgstr "Kod kadarnaat"
+
+#: actions/smssettings.php:131
+msgid "Enter the code you received on your phone."
+msgstr ""
+
+#: actions/smssettings.php:138
+msgid "SMS phone number"
+msgstr "Niverenn bellgomz evit an SMS"
+
+#: actions/smssettings.php:140
+msgid "Phone number, no punctuation or spaces, with area code"
+msgstr ""
+
+#: actions/smssettings.php:174
+msgid ""
+"Send me notices through SMS; I understand I may incur exorbitant charges "
+"from my carrier."
+msgstr ""
+
+#: actions/smssettings.php:306
+msgid "No phone number."
+msgstr "Niverenn bellgomz ebet."
+
+#: actions/smssettings.php:311
+msgid "No carrier selected."
+msgstr ""
+
+#: actions/smssettings.php:318
+msgid "That is already your phone number."
+msgstr ""
+
+#: actions/smssettings.php:321
+msgid "That phone number already belongs to another user."
+msgstr ""
+
+#: actions/smssettings.php:347
+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 ""
+
+#: actions/smssettings.php:374
+msgid "That is the wrong confirmation number."
+msgstr ""
+
+#: actions/smssettings.php:405
+msgid "That is not your phone number."
+msgstr ""
+
+#: actions/smssettings.php:465
+msgid "Mobile carrier"
+msgstr ""
+
+#: actions/smssettings.php:469
+msgid "Select a carrier"
+msgstr ""
+
+#: actions/smssettings.php:476
+#, php-format
+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 ""
+
+#: actions/smssettings.php:498
+msgid "No code entered"
+msgstr "N'eo bet lakaet kod ebet"
+
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Stankter"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Enrollañ an arventennoù moned"
+
+#: actions/subedit.php:70
+msgid "You are not subscribed to that profile."
+msgstr ""
+
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
+msgid "Could not save subscription."
+msgstr ""
+
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr ""
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+
+#: actions/subscribe.php:145
+msgid "Subscribed"
+msgstr ""
+
+#: actions/subscribers.php:50
+#, php-format
+msgid "%s subscribers"
+msgstr ""
+
+#: actions/subscribers.php:52
+#, php-format
+msgid "%1$s subscribers, page %2$d"
+msgstr ""
+
+#: actions/subscribers.php:63
+msgid "These are the people who listen to your notices."
+msgstr ""
+
+#: actions/subscribers.php:67
+#, php-format
+msgid "These are the people who listen to %s's notices."
+msgstr ""
+
+#: actions/subscribers.php:108
+msgid ""
+"You have no subscribers. Try subscribing to people you know and they might "
+"return the favor"
+msgstr ""
+
+#: actions/subscribers.php:110
+#, php-format
+msgid "%s has no subscribers. Want to be the first?"
+msgstr ""
+
+#: actions/subscribers.php:114
+#, php-format
+msgid ""
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
+msgstr ""
+
+#: actions/subscriptions.php:52
+#, php-format
+msgid "%s subscriptions"
+msgstr ""
+
+#: actions/subscriptions.php:54
+#, php-format
+msgid "%1$s subscriptions, page %2$d"
+msgstr ""
+
+#: actions/subscriptions.php:65
+msgid "These are the people whose notices you listen to."
+msgstr ""
+
+#: actions/subscriptions.php:69
+#, php-format
+msgid "These are the people whose notices %s listens to."
+msgstr ""
+
+#: actions/subscriptions.php:126
+#, php-format
+msgid ""
+"You're not listening to anyone's notices right now, try subscribing to "
+"people you know. Try [people search](%%action.peoplesearch%%), look for "
+"members in groups you're interested in and in our [featured users](%%action."
+"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
+"automatically subscribe to people you already follow there."
+msgstr ""
+
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
+#, php-format
+msgid "%s is not listening to anyone."
+msgstr ""
+
+#: actions/subscriptions.php:199
+msgid "Jabber"
+msgstr "Jabber"
+
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
+msgid "SMS"
+msgstr "SMS"
+
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr ""
+
+#: actions/tag.php:87
+#, php-format
+msgid "Notice feed for tag %s (RSS 1.0)"
+msgstr ""
+
+#: actions/tag.php:93
+#, php-format
+msgid "Notice feed for tag %s (RSS 2.0)"
+msgstr ""
+
+#: actions/tag.php:99
+#, php-format
+msgid "Notice feed for tag %s (Atom)"
+msgstr ""
+
+#: actions/tagother.php:39
+msgid "No ID argument."
+msgstr ""
+
+#: actions/tagother.php:65
+#, php-format
+msgid "Tag %s"
+msgstr ""
+
+#: actions/tagother.php:77 lib/userprofile.php:75
+msgid "User profile"
+msgstr ""
+
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
+msgid "Photo"
+msgstr "Skeudenn"
+
+#: actions/tagother.php:141
+msgid "Tag user"
+msgstr ""
+
+#: actions/tagother.php:151
+msgid ""
+"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
+"separated"
+msgstr ""
+
+#: actions/tagother.php:193
+msgid ""
+"You can only tag people you are subscribed to or who are subscribed to you."
+msgstr ""
+
+#: actions/tagother.php:200
+msgid "Could not save tags."
+msgstr ""
+
+#: actions/tagother.php:236
+msgid "Use this form to add tags to your subscribers or subscriptions."
+msgstr ""
+
+#: actions/tagrss.php:35
+msgid "No such tag."
+msgstr ""
+
+#: actions/twitapitrends.php:85
+msgid "API method under construction."
+msgstr ""
+
+#: actions/unblock.php:59
+msgid "You haven't blocked that user."
+msgstr ""
+
+#: actions/unsandbox.php:72
+msgid "User is not sandboxed."
+msgstr ""
+
+#: actions/unsilence.php:72
+msgid "User is not silenced."
+msgstr ""
+
+#: actions/unsubscribe.php:77
+msgid "No profile id in request."
+msgstr ""
+
+#: actions/unsubscribe.php:98
+msgid "Unsubscribed"
+msgstr ""
+
+#: 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 ""
+
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
+msgid "User"
+msgstr ""
+
+#: actions/useradminpanel.php:70
+msgid "User settings for this StatusNet site."
+msgstr ""
+
+#: actions/useradminpanel.php:149
+msgid "Invalid bio limit. Must be numeric."
+msgstr ""
+
+#: actions/useradminpanel.php:155
+msgid "Invalid welcome text. Max length is 255 characters."
+msgstr ""
+
+#: actions/useradminpanel.php:165
+#, php-format
+msgid "Invalid default subscripton: '%1$s' is not user."
+msgstr ""
+
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
+#: lib/personalgroupnav.php:109
+msgid "Profile"
+msgstr "Profil"
+
+#: actions/useradminpanel.php:222
+msgid "Bio Limit"
+msgstr "Bevenn ar bio"
+
+#: actions/useradminpanel.php:223
+msgid "Maximum length of a profile bio in characters."
+msgstr ""
+
+#: actions/useradminpanel.php:231
+msgid "New users"
+msgstr "Implijerien nevez"
+
+#: actions/useradminpanel.php:235
+msgid "New user welcome"
+msgstr "Degemer an implijerien nevez"
+
+#: actions/useradminpanel.php:236
+msgid "Welcome text for new users (Max 255 chars)."
+msgstr ""
+
+#: actions/useradminpanel.php:241
+msgid "Default subscription"
+msgstr ""
+
+#: actions/useradminpanel.php:242
+msgid "Automatically subscribe new users to this user."
+msgstr ""
+
+#: actions/useradminpanel.php:251
+msgid "Invitations"
+msgstr "Pedadennoù"
+
+#: actions/useradminpanel.php:256
+msgid "Invitations enabled"
+msgstr ""
+
+#: actions/useradminpanel.php:258
+msgid "Whether to allow users to invite new users."
+msgstr ""
+
+#: actions/userauthorization.php:105
+msgid "Authorize subscription"
+msgstr ""
+
+#: actions/userauthorization.php:110
+msgid ""
+"Please check these details to make sure that you want to subscribe to this "
+"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
+"click “Rejectâ€."
+msgstr ""
+
+#: actions/userauthorization.php:196 actions/version.php:165
+msgid "License"
+msgstr "Aotre implijout"
+
+#: actions/userauthorization.php:217
+msgid "Accept"
+msgstr "Degemer"
+
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
+#: lib/subscribeform.php:139
+msgid "Subscribe to this user"
+msgstr ""
+
+#: actions/userauthorization.php:219
+msgid "Reject"
+msgstr "Disteurel"
+
+#: actions/userauthorization.php:220
+msgid "Reject this subscription"
+msgstr ""
+
+#: actions/userauthorization.php:232
+msgid "No authorization request!"
+msgstr ""
+
+#: actions/userauthorization.php:254
+msgid "Subscription authorized"
+msgstr ""
+
+#: actions/userauthorization.php:256
+msgid ""
+"The subscription has been authorized, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to authorize the "
+"subscription. Your subscription token is:"
+msgstr ""
+
+#: actions/userauthorization.php:266
+msgid "Subscription rejected"
+msgstr ""
+
+#: actions/userauthorization.php:268
+msgid ""
+"The subscription has been rejected, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to fully reject the "
+"subscription."
+msgstr ""
+
+#: actions/userauthorization.php:303
+#, php-format
+msgid "Listener URI ‘%s’ not found here."
+msgstr ""
+
+#: actions/userauthorization.php:308
+#, php-format
+msgid "Listenee URI ‘%s’ is too long."
+msgstr ""
+
+#: actions/userauthorization.php:314
+#, php-format
+msgid "Listenee URI ‘%s’ is a local user."
+msgstr ""
+
+#: actions/userauthorization.php:329
+#, php-format
+msgid "Profile URL ‘%s’ is for a local user."
+msgstr ""
+
+#: actions/userauthorization.php:345
+#, php-format
+msgid "Avatar URL ‘%s’ is not valid."
+msgstr ""
+
+#: actions/userauthorization.php:350
+#, php-format
+msgid "Can’t read avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userauthorization.php:355
+#, php-format
+msgid "Wrong image type for avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userdesignsettings.php:76 lib/designsettings.php:65
+msgid "Profile design"
+msgstr ""
+
+#: actions/userdesignsettings.php:87 lib/designsettings.php:76
+msgid ""
+"Customize the way your profile looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/userdesignsettings.php:282
+msgid "Enjoy your hotdog!"
+msgstr ""
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr ""
+
+#: actions/usergroups.php:130
+msgid "Search for more groups"
+msgstr "Klask muioc'h a strolladoù"
+
+#: actions/usergroups.php:157
+#, php-format
+msgid "%s is not a member of any group."
+msgstr ""
+
+#: actions/usergroups.php:162
+#, php-format
+msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
+msgstr ""
+
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Hizivadennoù eus %1$s e %2$s!"
+
+#: actions/version.php:73
+#, php-format
+msgid "StatusNet %s"
+msgstr "StatusNet %s"
+
+#: actions/version.php:153
+#, php-format
+msgid ""
+"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
+"Inc. and contributors."
+msgstr ""
+
+#: actions/version.php:161
+msgid "Contributors"
+msgstr "Aozerien"
+
+#: actions/version.php:168
+msgid ""
+"StatusNet 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. "
+msgstr ""
+
+#: actions/version.php:174
+msgid ""
+"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. "
+msgstr ""
+
+#: actions/version.php:180
+#, php-format
+msgid ""
+"You should have received a copy of the GNU Affero General Public License "
+"along with this program. If not, see %s."
+msgstr ""
+
+#: actions/version.php:189
+msgid "Plugins"
+msgstr "Pluginoù"
+
+#: actions/version.php:196 lib/action.php:767
+msgid "Version"
+msgstr "Stumm"
+
+#: actions/version.php:197
+msgid "Author(s)"
+msgstr "Aozer(ien)"
+
+#: classes/File.php:144
+#, php-format
+msgid ""
+"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
+"to upload a smaller version."
+msgstr ""
+
+#: classes/File.php:154
+#, php-format
+msgid "A file this large would exceed your user quota of %d bytes."
+msgstr ""
+
+#: classes/File.php:161
+#, php-format
+msgid "A file this large would exceed your monthly quota of %d bytes."
+msgstr ""
+
+#: classes/Group_member.php:41
+msgid "Group join failed."
+msgstr "C'hwitet eo bet an enskrivadur d'ar strollad."
+
+#: classes/Group_member.php:53
+msgid "Not part of group."
+msgstr "N'eo ezel eus strollad ebet."
+
+#: classes/Group_member.php:60
+msgid "Group leave failed."
+msgstr "C'hwitet eo bet an disenskrivadur d'ar strollad."
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr ""
+
+#: classes/Login_token.php:76
+#, php-format
+msgid "Could not create login token for %s"
+msgstr ""
+
+#: classes/Message.php:45
+msgid "You are banned from sending direct messages."
+msgstr ""
+
+#: classes/Message.php:61
+msgid "Could not insert message."
+msgstr "Diposubl eo ensoc'hañ ur gemenadenn"
+
+#: classes/Message.php:71
+msgid "Could not update message with new URI."
+msgstr ""
+
+#: classes/Notice.php:172
+#, php-format
+msgid "DB error inserting hashtag: %s"
+msgstr ""
+
+#: classes/Notice.php:241
+msgid "Problem saving notice. Too long."
+msgstr ""
+
+#: classes/Notice.php:245
+msgid "Problem saving notice. Unknown user."
+msgstr ""
+
+#: classes/Notice.php:250
+msgid ""
+"Too many notices too fast; take a breather and post again in a few minutes."
+msgstr ""
+
+#: classes/Notice.php:256
+msgid ""
+"Too many duplicate messages too quickly; take a breather and post again in a "
+"few minutes."
+msgstr ""
+
+#: classes/Notice.php:262
+msgid "You are banned from posting notices on this site."
+msgstr ""
+
+#: classes/Notice.php:328 classes/Notice.php:354
+msgid "Problem saving notice."
+msgstr ""
+
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr ""
+
+#: classes/Notice.php:1459
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Diposubl eo dilemel ar postel kadarnadur."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr ""
+
+#: classes/User.php:373
+#, php-format
+msgid "Welcome to %1$s, @%2$s!"
+msgstr ""
+
+#: classes/User_group.php:477
+msgid "Could not create group."
+msgstr ""
+
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr ""
+
+#: classes/User_group.php:507
+msgid "Could not set group membership."
+msgstr ""
+
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr ""
+
+#: lib/accountsettingsaction.php:108
+msgid "Change your profile settings"
+msgstr ""
+
+#: lib/accountsettingsaction.php:112
+msgid "Upload an avatar"
+msgstr ""
+
+#: lib/accountsettingsaction.php:116
+msgid "Change your password"
+msgstr "Cheñch ar ger-tremen"
+
+#: lib/accountsettingsaction.php:120
+msgid "Change email handling"
+msgstr ""
+
+#: lib/accountsettingsaction.php:124
+msgid "Design your profile"
+msgstr ""
+
+#: lib/accountsettingsaction.php:128
+msgid "Other"
+msgstr "All"
+
+#: lib/accountsettingsaction.php:128
+msgid "Other options"
+msgstr ""
+
+#: lib/action.php:144
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s - %2$s"
+
+#: lib/action.php:159
+msgid "Untitled page"
+msgstr ""
+
+#: lib/action.php:424
+msgid "Primary site navigation"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
+msgid "Personal profile and friends timeline"
+msgstr ""
+
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr ""
+
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Endalc'h"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
+msgid "Change site configuration"
+msgstr ""
+
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
+msgid "Logout from the site"
+msgstr ""
+
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
+msgid "Create an account"
+msgstr ""
+
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr ""
+
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr ""
+
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
+msgid "Site notice"
+msgstr ""
+
+#: lib/action.php:579
+msgid "Local views"
+msgstr ""
+
+#: lib/action.php:645
+msgid "Page notice"
+msgstr ""
+
+#: lib/action.php:747
+msgid "Secondary site navigation"
+msgstr ""
+
+#: lib/action.php:752
+msgid "Help"
+msgstr "Skoazell"
+
+#: lib/action.php:754
+msgid "About"
+msgstr "Diwar-benn"
+
+#: lib/action.php:756
+msgid "FAQ"
+msgstr "FAG"
+
+#: lib/action.php:760
+msgid "TOS"
+msgstr ""
+
+#: lib/action.php:763
+msgid "Privacy"
+msgstr "Prevezded"
+
+#: lib/action.php:765
+msgid "Source"
+msgstr "Mammenn"
+
+#: lib/action.php:769
+msgid "Contact"
+msgstr "Darempred"
+
+#: lib/action.php:771
+msgid "Badge"
+msgstr ""
+
+#: lib/action.php:799
+msgid "StatusNet software license"
+msgstr ""
+
+#: lib/action.php:802
+#, php-format
+msgid ""
+"**%%site.name%%** is a microblogging service brought to you by [%%site."
+"broughtby%%](%%site.broughtbyurl%%). "
+msgstr ""
+
+#: lib/action.php:804
+#, php-format
+msgid "**%%site.name%%** is a microblogging service. "
+msgstr ""
+
+#: lib/action.php:806
+#, php-format
+msgid ""
+"It runs the [StatusNet](http://status.net/) microblogging software, version %"
+"s, available under the [GNU Affero General Public License](http://www.fsf."
+"org/licensing/licenses/agpl-3.0.html)."
+msgstr ""
+
+#: lib/action.php:821
+msgid "Site content license"
+msgstr ""
+
+#: lib/action.php:826
+#, php-format
+msgid "Content and data of %1$s are private and confidential."
+msgstr ""
+
+#: lib/action.php:831
+#, php-format
+msgid "Content and data copyright by %1$s. All rights reserved."
+msgstr ""
+
+#: lib/action.php:834
+msgid "Content and data copyright by contributors. All rights reserved."
+msgstr ""
+
+#: lib/action.php:847
+msgid "All "
+msgstr "Pep tra "
+
+#: lib/action.php:853
+msgid "license."
+msgstr "aotre implijout."
+
+#: lib/action.php:1152
+msgid "Pagination"
+msgstr "Pajennadur"
+
+#: lib/action.php:1161
+msgid "After"
+msgstr "War-lerc'h"
+
+#: lib/action.php:1169
+msgid "Before"
+msgstr "Kent"
+
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
+msgid "You cannot make changes to this site."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
+msgid "Changes to that panel are not allowed."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
+msgid "showForm() not implemented."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
+msgid "saveSettings() not implemented."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
+msgid "Unable to delete design setting."
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
+msgid "Basic site configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
+msgid "Design configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
+msgid "User configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Implijer"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
+msgid "Access configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
+msgid "Paths configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Eilañ an ali"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr ""
+
+#: lib/apiauth.php:94
+msgid "API resource requires read-write access, but you only have read access."
+msgstr ""
+
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Kemmañ an arload"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr ""
+
+#: lib/applicationeditform.php:204
+#, php-format
+msgid "Describe your application in %d characters"
+msgstr ""
+
+#: lib/applicationeditform.php:207
+msgid "Describe your application"
+msgstr ""
+
+#: lib/applicationeditform.php:216
+msgid "Source URL"
+msgstr "Mammenn URL"
+
+#: lib/applicationeditform.php:218
+msgid "URL of the homepage of this application"
+msgstr ""
+
+#: lib/applicationeditform.php:224
+msgid "Organization responsible for this application"
+msgstr ""
+
+#: lib/applicationeditform.php:230
+msgid "URL for the homepage of the organization"
+msgstr ""
+
+#: lib/applicationeditform.php:236
+msgid "URL to redirect to after authentication"
+msgstr ""
+
+#: lib/applicationeditform.php:258
+msgid "Browser"
+msgstr "Merdeer"
+
+#: lib/applicationeditform.php:274
+msgid "Desktop"
+msgstr ""
+
+#: lib/applicationeditform.php:275
+msgid "Type of application, browser or desktop"
+msgstr ""
+
+#: lib/applicationeditform.php:297
+msgid "Read-only"
+msgstr ""
+
+#: lib/applicationeditform.php:315
+msgid "Read-write"
+msgstr ""
+
+#: lib/applicationeditform.php:316
+msgid "Default access for this application: read-only, or read-write"
+msgstr ""
+
+#: lib/applicationlist.php:154
+msgid "Revoke"
+msgstr ""
+
+#: lib/attachmentlist.php:87
+msgid "Attachments"
+msgstr ""
+
+#: lib/attachmentlist.php:265
+msgid "Author"
+msgstr "Aozer"
+
+#: lib/attachmentlist.php:278
+msgid "Provider"
+msgstr "Pourvezer"
+
+#: lib/attachmentnoticesection.php:67
+msgid "Notices where this attachment appears"
+msgstr ""
+
+#: lib/attachmenttagcloudsection.php:48
+msgid "Tags for this attachment"
+msgstr ""
+
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
+msgid "Password changing failed"
+msgstr ""
+
+#: lib/authenticationplugin.php:235
+msgid "Password changing is not allowed"
+msgstr ""
+
+#: lib/channel.php:138 lib/channel.php:158
+msgid "Command results"
+msgstr ""
+
+#: lib/channel.php:210 lib/mailhandler.php:142
+msgid "Command complete"
+msgstr ""
+
+#: lib/channel.php:221
+msgid "Command failed"
+msgstr ""
+
+#: lib/command.php:44
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:88
+#, php-format
+msgid "Could not find a user with nickname %s"
+msgstr ""
+
+#: lib/command.php:92
+msgid "It does not make a lot of sense to nudge yourself!"
+msgstr ""
+
+#: lib/command.php:99
+#, php-format
+msgid "Nudge sent to %s"
+msgstr ""
+
+#: lib/command.php:126
+#, php-format
+msgid ""
+"Subscriptions: %1$s\n"
+"Subscribers: %2$s\n"
+"Notices: %3$s"
+msgstr ""
+
+#: lib/command.php:152 lib/command.php:390 lib/command.php:451
+msgid "Notice with that id does not exist"
+msgstr ""
+
+#: lib/command.php:168 lib/command.php:406 lib/command.php:467
+#: lib/command.php:523
+msgid "User has no last notice"
+msgstr ""
+
+#: lib/command.php:190
+msgid "Notice marked as fave."
+msgstr ""
+
+#: lib/command.php:217
+msgid "You are already a member of that group"
+msgstr ""
+
+#: lib/command.php:231
+#, php-format
+msgid "Could not join user %s to group %s"
+msgstr ""
+
+#: lib/command.php:236
+#, php-format
+msgid "%s joined group %s"
+msgstr "%s zo emezelet er strollad %s"
+
+#: lib/command.php:275
+#, php-format
+msgid "Could not remove user %s to group %s"
+msgstr ""
+
+#: lib/command.php:280
+#, php-format
+msgid "%s left group %s"
+msgstr "%s {{Gender:.|en|he}} deus kuitaet ar strollad %s"
+
+#: lib/command.php:309
+#, php-format
+msgid "Fullname: %s"
+msgstr "Anv klok : %s"
+
+#: lib/command.php:312 lib/mail.php:254
+#, php-format
+msgid "Location: %s"
+msgstr ""
+
+#: lib/command.php:315 lib/mail.php:256
+#, php-format
+msgid "Homepage: %s"
+msgstr ""
+
+#: lib/command.php:318
+#, php-format
+msgid "About: %s"
+msgstr "Diwar-benn : %s"
+
+#: lib/command.php:349
+#, php-format
+msgid "Message too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:367
+#, php-format
+msgid "Direct message to %s sent"
+msgstr ""
+
+#: lib/command.php:369
+msgid "Error sending direct message."
+msgstr ""
+
+#: lib/command.php:413
+msgid "Cannot repeat your own notice"
+msgstr ""
+
+#: lib/command.php:418
+msgid "Already repeated that notice"
+msgstr ""
+
+#: lib/command.php:426
+#, php-format
+msgid "Notice from %s repeated"
+msgstr ""
+
+#: lib/command.php:428
+msgid "Error repeating notice."
+msgstr ""
+
+#: lib/command.php:482
+#, php-format
+msgid "Notice too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:491
+#, php-format
+msgid "Reply to %s sent"
+msgstr ""
+
+#: lib/command.php:493
+msgid "Error saving notice."
+msgstr ""
+
+#: lib/command.php:547
+msgid "Specify the name of the user to subscribe to"
+msgstr ""
+
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr ""
+
+#: lib/command.php:561
+#, php-format
+msgid "Subscribed to %s"
+msgstr ""
+
+#: lib/command.php:582 lib/command.php:685
+msgid "Specify the name of the user to unsubscribe from"
+msgstr ""
+
+#: lib/command.php:595
+#, php-format
+msgid "Unsubscribed from %s"
+msgstr ""
+
+#: lib/command.php:613 lib/command.php:636
+msgid "Command not yet implemented."
+msgstr ""
+
+#: lib/command.php:616
+msgid "Notification off."
+msgstr ""
+
+#: lib/command.php:618
+msgid "Can't turn off notification."
+msgstr ""
+
+#: lib/command.php:639
+msgid "Notification on."
+msgstr ""
+
+#: lib/command.php:641
+msgid "Can't turn on notification."
+msgstr ""
+
+#: lib/command.php:654
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:665
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr ""
+
+#: lib/command.php:709
+msgid "You are not subscribed to anyone."
+msgstr ""
+
+#: lib/command.php:711
+#, fuzzy
+msgid "You are subscribed to this person:"
+msgid_plural "You are subscribed to these people:"
+msgstr[0] "You are subscribed to this person:"
+msgstr[1] "You are subscribed to these people:"
+
+#: lib/command.php:731
+msgid "No one is subscribed to you."
+msgstr ""
+
+#: lib/command.php:733
+#, fuzzy
+msgid "This person is subscribed to you:"
+msgid_plural "These people are subscribed to you:"
+msgstr[0] "This person is subscribed to you:"
+msgstr[1] "These people are subscribed to you:"
+
+#: lib/command.php:753
+msgid "You are not a member of any groups."
+msgstr ""
+
+#: lib/command.php:755
+#, fuzzy
+msgid "You are a member of this group:"
+msgid_plural "You are a member of these groups:"
+msgstr[0] "You are a member of this group:"
+msgstr[1] "You are a member of these groups:"
+
+#: lib/command.php:769
+msgid ""
+"Commands:\n"
+"on - turn on notifications\n"
+"off - turn off notifications\n"
+"help - show this help\n"
+"follow <nickname> - subscribe to user\n"
+"groups - lists the groups you have joined\n"
+"subscriptions - list the people you follow\n"
+"subscribers - list the people that follow you\n"
+"leave <nickname> - unsubscribe from user\n"
+"d <nickname> <text> - direct message to user\n"
+"get <nickname> - get last notice from user\n"
+"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
+"fav <nickname> - add user's last notice as a 'fave'\n"
+"fav #<notice_id> - add notice with the given id as a 'fave'\n"
+"repeat #<notice_id> - repeat a notice with a given id\n"
+"repeat <nickname> - repeat the last notice from user\n"
+"reply #<notice_id> - reply to notice with a given id\n"
+"reply <nickname> - reply to the last notice from user\n"
+"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
+"drop <group> - leave group\n"
+"stats - get your stats\n"
+"stop - same as 'off'\n"
+"quit - same as 'off'\n"
+"sub <nickname> - same as 'follow'\n"
+"unsub <nickname> - same as 'leave'\n"
+"last <nickname> - same as 'get'\n"
+"on <nickname> - not yet implemented.\n"
+"off <nickname> - not yet implemented.\n"
+"nudge <nickname> - remind a user to update.\n"
+"invite <phone number> - not yet implemented.\n"
+"track <word> - not yet implemented.\n"
+"untrack <word> - not yet implemented.\n"
+"track off - not yet implemented.\n"
+"untrack all - not yet implemented.\n"
+"tracks - not yet implemented.\n"
+"tracking - not yet implemented.\n"
+msgstr ""
+
+#: lib/common.php:148
+msgid "No configuration file found. "
+msgstr ""
+
+#: lib/common.php:149
+msgid "I looked for configuration files in the following places: "
+msgstr ""
+
+#: lib/common.php:151
+msgid "You may wish to run the installer to fix this."
+msgstr ""
+
+#: lib/common.php:152
+msgid "Go to the installer."
+msgstr ""
+
+#: lib/connectsettingsaction.php:110
+msgid "IM"
+msgstr "IM"
+
+#: lib/connectsettingsaction.php:111
+msgid "Updates by instant messenger (IM)"
+msgstr ""
+
+#: lib/connectsettingsaction.php:116
+msgid "Updates by SMS"
+msgstr ""
+
+#: lib/connectsettingsaction.php:120
+msgid "Connections"
+msgstr ""
+
+#: lib/connectsettingsaction.php:121
+msgid "Authorized connected applications"
+msgstr ""
+
+#: lib/dberroraction.php:60
+msgid "Database error"
+msgstr ""
+
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr ""
+
+#: lib/designsettings.php:109
+msgid ""
+"You can upload your personal background image. The maximum file size is 2MB."
+msgstr ""
+
+#: lib/designsettings.php:418
+msgid "Design defaults restored."
+msgstr ""
+
+#: lib/disfavorform.php:114 lib/disfavorform.php:140
+msgid "Disfavor this notice"
+msgstr ""
+
+#: lib/favorform.php:114 lib/favorform.php:140
+msgid "Favor this notice"
+msgstr ""
+
+#: lib/favorform.php:140
+msgid "Favor"
+msgstr ""
+
+#: lib/feed.php:85
+msgid "RSS 1.0"
+msgstr "RSS 1.0"
+
+#: lib/feed.php:87
+msgid "RSS 2.0"
+msgstr "RSS 2.0"
+
+#: lib/feed.php:89
+msgid "Atom"
+msgstr "Atom"
+
+#: lib/feed.php:91
+msgid "FOAF"
+msgstr "Mignon ur mignon (FOAF)"
+
+#: lib/feedlist.php:64
+msgid "Export data"
+msgstr ""
+
+#: lib/galleryaction.php:121
+msgid "Filter tags"
+msgstr "Silañ ar balizennoù"
+
+#: lib/galleryaction.php:131
+msgid "All"
+msgstr "An holl"
+
+#: lib/galleryaction.php:139
+msgid "Select tag to filter"
+msgstr ""
+
+#: lib/galleryaction.php:140
+msgid "Tag"
+msgstr "Merk"
+
+#: lib/galleryaction.php:141
+msgid "Choose a tag to narrow list"
+msgstr ""
+
+#: lib/galleryaction.php:143
+msgid "Go"
+msgstr "Mont"
+
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
+
+#: lib/groupeditform.php:168
+msgid "Describe the group or topic"
+msgstr ""
+
+#: lib/groupeditform.php:170
+#, php-format
+msgid "Describe the group or topic in %d characters"
+msgstr ""
+
+#: lib/groupeditform.php:179
+msgid ""
+"Location for the group, if any, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: lib/groupeditform.php:187
+#, php-format
+msgid "Extra nicknames for the group, comma- or space- separated, max %d"
+msgstr ""
+
+#: lib/groupnav.php:85
+msgid "Group"
+msgstr "Strollad"
+
+#: lib/groupnav.php:101
+msgid "Blocked"
+msgstr "Stanket"
+
+#: lib/groupnav.php:102
+#, php-format
+msgid "%s blocked users"
+msgstr "%s implijer stanket"
+
+#: lib/groupnav.php:108
+#, php-format
+msgid "Edit %s group properties"
+msgstr ""
+
+#: lib/groupnav.php:113
+msgid "Logo"
+msgstr "Logo"
+
+#: lib/groupnav.php:114
+#, php-format
+msgid "Add or edit %s logo"
+msgstr ""
+
+#: lib/groupnav.php:120
+#, php-format
+msgid "Add or edit %s design"
+msgstr ""
+
+#: lib/groupsbymemberssection.php:71
+msgid "Groups with most members"
+msgstr ""
+
+#: lib/groupsbypostssection.php:71
+msgid "Groups with most posts"
+msgstr ""
+
+#: lib/grouptagcloudsection.php:56
+#, php-format
+msgid "Tags in %s group's notices"
+msgstr ""
+
+#: lib/htmloutputter.php:103
+msgid "This page is not available in a media type you accept"
+msgstr ""
+
+#: lib/imagefile.php:75
+#, php-format
+msgid "That file is too big. The maximum file size is %s."
+msgstr ""
+
+#: lib/imagefile.php:80
+msgid "Partial upload."
+msgstr ""
+
+#: lib/imagefile.php:88 lib/mediafile.php:170
+msgid "System error uploading file."
+msgstr ""
+
+#: lib/imagefile.php:96
+msgid "Not an image or corrupt file."
+msgstr ""
+
+#: lib/imagefile.php:109
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:122
+msgid "Lost our file."
+msgstr ""
+
+#: lib/imagefile.php:166 lib/imagefile.php:231
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/imagefile.php:251
+msgid "MB"
+msgstr "Mo"
+
+#: lib/imagefile.php:253
+msgid "kB"
+msgstr "Ko"
+
+#: lib/jabber.php:220
+#, php-format
+msgid "[%s]"
+msgstr "[%s]"
+
+#: lib/jabber.php:400
+#, php-format
+msgid "Unknown inbox source %d."
+msgstr ""
+
+#: lib/joinform.php:114
+msgid "Join"
+msgstr "Stagañ"
+
+#: lib/leaveform.php:114
+msgid "Leave"
+msgstr "Kuitañ"
+
+#: lib/logingroupnav.php:80
+msgid "Login with a username and password"
+msgstr ""
+
+#: lib/logingroupnav.php:86
+msgid "Sign up for a new account"
+msgstr ""
+
+#: lib/mail.php:172
+msgid "Email address confirmation"
+msgstr ""
+
+#: lib/mail.php:174
+#, php-format
+msgid ""
+"Hey, %s.\n"
+"\n"
+"Someone just entered this email address on %s.\n"
+"\n"
+"If it was you, and you want to confirm your entry, use the URL below:\n"
+"\n"
+"\t%s\n"
+"\n"
+"If not, just ignore this message.\n"
+"\n"
+"Thanks for your time, \n"
+"%s\n"
+msgstr ""
+
+#: lib/mail.php:236
+#, php-format
+msgid "%1$s is now listening to your notices on %2$s."
+msgstr ""
+
+#: lib/mail.php:241
+#, php-format
+msgid ""
+"%1$s is now listening to your notices on %2$s.\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Faithfully yours,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Change your email address or notification options at %8$s\n"
+msgstr ""
+
+#: lib/mail.php:258
+#, php-format
+msgid "Bio: %s"
+msgstr ""
+
+#: lib/mail.php:286
+#, php-format
+msgid "New email address for posting to %s"
+msgstr ""
+
+#: lib/mail.php:289
+#, php-format
+msgid ""
+"You have a new posting address on %1$s.\n"
+"\n"
+"Send email to %2$s to post new messages.\n"
+"\n"
+"More email instructions at %3$s.\n"
+"\n"
+"Faithfully yours,\n"
+"%4$s"
+msgstr ""
+
+#: lib/mail.php:413
+#, php-format
+msgid "%s status"
+msgstr "Statud %s"
+
+#: lib/mail.php:439
+msgid "SMS confirmation"
+msgstr ""
+
+#: lib/mail.php:463
+#, php-format
+msgid "You've been nudged by %s"
+msgstr ""
+
+#: lib/mail.php:467
+#, php-format
+msgid ""
+"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
+"to post some news.\n"
+"\n"
+"So let's hear from you :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%4$s\n"
+msgstr ""
+
+#: lib/mail.php:510
+#, php-format
+msgid "New private message from %s"
+msgstr "Kemenadenn personel nevez a-berzh %s"
+
+#: lib/mail.php:514
+#, php-format
+msgid ""
+"%1$s (%2$s) sent you a private message:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"You can reply to their message here:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%5$s\n"
+msgstr ""
+
+#: lib/mail.php:559
+#, php-format
+msgid "%s (@%s) added your notice as a favorite"
+msgstr ""
+
+#: lib/mail.php:561
+#, php-format
+msgid ""
+"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
+"\n"
+"The URL of your notice is:\n"
+"\n"
+"%3$s\n"
+"\n"
+"The text of your notice is:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see the list of %1$s's favorites here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Faithfully yours,\n"
+"%6$s\n"
+msgstr ""
+
+#: lib/mail.php:624
+#, php-format
+msgid "%s (@%s) sent a notice to your attention"
+msgstr ""
+
+#: lib/mail.php:626
+#, php-format
+msgid ""
+"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
+"\n"
+"The notice is here:\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"It reads:\n"
+"\n"
+"\t%4$s\n"
+"\n"
+msgstr ""
+
+#: lib/mailbox.php:89
+msgid "Only the user can read their own mailboxes."
+msgstr ""
+
+#: lib/mailbox.php:139
+msgid ""
+"You have no private messages. You can send private message to engage other "
+"users in conversation. People can send you messages for your eyes only."
+msgstr ""
+
+#: lib/mailbox.php:227 lib/noticelist.php:482
+msgid "from"
+msgstr "eus"
+
+#: lib/mailhandler.php:37
+msgid "Could not parse message."
+msgstr ""
+
+#: lib/mailhandler.php:42
+msgid "Not a registered user."
+msgstr ""
+
+#: lib/mailhandler.php:46
+msgid "Sorry, that is not your incoming email address."
+msgstr ""
+
+#: lib/mailhandler.php:50
+msgid "Sorry, no incoming email allowed."
+msgstr ""
+
+#: lib/mailhandler.php:228
+#, php-format
+msgid "Unsupported message type: %s"
+msgstr ""
+
+#: lib/mediafile.php:98 lib/mediafile.php:123
+msgid "There was a database error while saving your file. Please try again."
+msgstr ""
+
+#: lib/mediafile.php:142
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
+msgstr ""
+
+#: lib/mediafile.php:147
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form."
+msgstr ""
+
+#: lib/mediafile.php:152
+msgid "The uploaded file was only partially uploaded."
+msgstr ""
+
+#: lib/mediafile.php:159
+msgid "Missing a temporary folder."
+msgstr ""
+
+#: lib/mediafile.php:162
+msgid "Failed to write file to disk."
+msgstr ""
+
+#: lib/mediafile.php:165
+msgid "File upload stopped by extension."
+msgstr ""
+
+#: lib/mediafile.php:179 lib/mediafile.php:216
+msgid "File exceeds user's quota."
+msgstr ""
+
+#: lib/mediafile.php:196 lib/mediafile.php:233
+msgid "File could not be moved to destination directory."
+msgstr ""
+
+#: lib/mediafile.php:201 lib/mediafile.php:237
+msgid "Could not determine file's MIME type."
+msgstr ""
+
+#: lib/mediafile.php:270
+#, php-format
+msgid " Try using another %s format."
+msgstr ""
+
+#: lib/mediafile.php:275
+#, php-format
+msgid "%s is not a supported file type on this server."
+msgstr ""
+
+#: lib/messageform.php:120
+msgid "Send a direct notice"
+msgstr ""
+
+#: lib/messageform.php:146
+msgid "To"
+msgstr "Da"
+
+#: lib/messageform.php:159 lib/noticeform.php:185
+msgid "Available characters"
+msgstr ""
+
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr ""
+
+#: lib/noticeform.php:160
+msgid "Send a notice"
+msgstr "Kas un ali"
+
+#: lib/noticeform.php:173
+#, php-format
+msgid "What's up, %s?"
+msgstr "Penaos 'mañ kont, %s ?"
+
+#: lib/noticeform.php:192
+msgid "Attach"
+msgstr "Stagañ"
+
+#: lib/noticeform.php:196
+msgid "Attach a file"
+msgstr "Stagañ ur restr"
+
+#: lib/noticeform.php:212
+msgid "Share my location"
+msgstr ""
+
+#: lib/noticeform.php:215
+msgid "Do not share my location"
+msgstr ""
+
+#: lib/noticeform.php:216
+msgid ""
+"Sorry, retrieving your geo location is taking longer than expected, please "
+"try again later"
+msgstr ""
+
+#: lib/noticelist.php:429
+#, php-format
+msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
+msgstr ""
+
+#: lib/noticelist.php:430
+msgid "N"
+msgstr "N"
+
+#: lib/noticelist.php:430
+msgid "S"
+msgstr "S"
+
+#: lib/noticelist.php:431
+msgid "E"
+msgstr "R"
+
+#: lib/noticelist.php:431
+msgid "W"
+msgstr "K"
+
+#: lib/noticelist.php:438
+msgid "at"
+msgstr "e"
+
+#: lib/noticelist.php:566
+msgid "in context"
+msgstr ""
+
+#: lib/noticelist.php:601
+msgid "Repeated by"
+msgstr ""
+
+#: lib/noticelist.php:628
+msgid "Reply to this notice"
+msgstr ""
+
+#: lib/noticelist.php:629
+msgid "Reply"
+msgstr "Respont"
+
+#: lib/noticelist.php:673
+msgid "Notice repeated"
+msgstr ""
+
+#: lib/nudgeform.php:116
+msgid "Nudge this user"
+msgstr "Kas ur blinkadenn d'an implijer-mañ"
+
+#: lib/nudgeform.php:128
+msgid "Nudge"
+msgstr "Blinkadenn"
+
+#: lib/nudgeform.php:128
+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 ""
+
+#: lib/oauthstore.php:345
+msgid "Duplicate notice"
+msgstr "Eilañ an ali"
+
+#: lib/oauthstore.php:490
+msgid "Couldn't insert new subscription."
+msgstr ""
+
+#: lib/personalgroupnav.php:99
+msgid "Personal"
+msgstr "Hiniennel"
+
+#: lib/personalgroupnav.php:104
+msgid "Replies"
+msgstr "Respontoù"
+
+#: lib/personalgroupnav.php:114
+msgid "Favorites"
+msgstr "Pennrolloù"
+
+#: lib/personalgroupnav.php:125
+msgid "Inbox"
+msgstr "Boest resev"
+
+#: lib/personalgroupnav.php:126
+msgid "Your incoming messages"
+msgstr "ar gemennadennoù o peus resevet"
+
+#: lib/personalgroupnav.php:130
+msgid "Outbox"
+msgstr "Boest kas"
+
+#: lib/personalgroupnav.php:131
+msgid "Your sent messages"
+msgstr "Ar c'hemenadennoù kaset ganeoc'h"
+
+#: lib/personaltagcloudsection.php:56
+#, php-format
+msgid "Tags in %s's notices"
+msgstr ""
+
+#: lib/plugin.php:114
+msgid "Unknown"
+msgstr "Dianav"
+
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
+msgid "Subscriptions"
+msgstr "Koumanantoù"
+
+#: lib/profileaction.php:126
+msgid "All subscriptions"
+msgstr ""
+
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
+msgid "Subscribers"
+msgstr "Ar re koumanantet"
+
+#: lib/profileaction.php:159
+msgid "All subscribers"
+msgstr "An holl re koumanantet"
+
+#: lib/profileaction.php:180
+msgid "User ID"
+msgstr "ID an implijer"
+
+#: lib/profileaction.php:185
+msgid "Member since"
+msgstr "Ezel abaoe"
+
+#: lib/profileaction.php:247
+msgid "All groups"
+msgstr "An holl strolladoù"
+
+#: lib/profileformaction.php:123
+msgid "No return-to arguments."
+msgstr ""
+
+#: lib/profileformaction.php:137
+msgid "Unimplemented method."
+msgstr ""
+
+#: lib/publicgroupnav.php:78
+msgid "Public"
+msgstr "Foran"
+
+#: lib/publicgroupnav.php:82
+msgid "User groups"
+msgstr "Strolladoù implijerien"
+
+#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
+msgid "Recent tags"
+msgstr ""
+
+#: lib/publicgroupnav.php:88
+msgid "Featured"
+msgstr ""
+
+#: lib/publicgroupnav.php:92
+msgid "Popular"
+msgstr "Poblek"
+
+#: lib/repeatform.php:107
+msgid "Repeat this notice?"
+msgstr "Adkregiñ gant an ali-mañ ?"
+
+#: lib/repeatform.php:132
+msgid "Repeat this notice"
+msgstr "Adkregiñ gant an ali-mañ"
+
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Stankañ an implijer-mañ eus ar strollad-se"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr ""
+
+#: lib/sandboxform.php:67
+msgid "Sandbox"
+msgstr "Poull-traezh"
+
+#: lib/sandboxform.php:78
+msgid "Sandbox this user"
+msgstr ""
+
+#: lib/searchaction.php:120
+msgid "Search site"
+msgstr "Klask el lec'hienn"
+
+#: lib/searchaction.php:126
+msgid "Keyword(s)"
+msgstr "Ger(ioù) alc'hwez"
+
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Klask"
+
+#: lib/searchaction.php:162
+msgid "Search help"
+msgstr "Skoazell diwar-benn ar c'hlask"
+
+#: lib/searchgroupnav.php:80
+msgid "People"
+msgstr "Tud"
+
+#: lib/searchgroupnav.php:81
+msgid "Find people on this site"
+msgstr "Klask tud el lec'hienn-mañ"
+
+#: lib/searchgroupnav.php:83
+msgid "Find content of notices"
+msgstr "Klask alioù en danvez"
+
+#: lib/searchgroupnav.php:85
+msgid "Find groups on this site"
+msgstr "Klask strolladoù el lec'hienn-mañ"
+
+#: lib/section.php:89
+msgid "Untitled section"
+msgstr ""
+
+#: lib/section.php:106
+msgid "More..."
+msgstr "Muioc'h..."
+
+#: lib/silenceform.php:67
+msgid "Silence"
+msgstr "Didrouz"
+
+#: lib/silenceform.php:78
+msgid "Silence this user"
+msgstr ""
+
+#: lib/subgroupnav.php:83
+#, php-format
+msgid "People %s subscribes to"
+msgstr ""
+
+#: lib/subgroupnav.php:91
+#, php-format
+msgid "People subscribed to %s"
+msgstr ""
+
+#: lib/subgroupnav.php:99
+#, php-format
+msgid "Groups %s is a member of"
+msgstr ""
+
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Pediñ"
+
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+
+#: lib/subscriberspeopleselftagcloudsection.php:48
+#: lib/subscriptionspeopleselftagcloudsection.php:48
+msgid "People Tagcloud as self-tagged"
+msgstr ""
+
+#: lib/subscriberspeopletagcloudsection.php:48
+#: lib/subscriptionspeopletagcloudsection.php:48
+msgid "People Tagcloud as tagged"
+msgstr ""
+
+#: lib/tagcloudsection.php:56
+msgid "None"
+msgstr "Hini ebet"
+
+#: lib/topposterssection.php:74
+msgid "Top posters"
+msgstr ""
+
+#: lib/unsandboxform.php:69
+msgid "Unsandbox"
+msgstr ""
+
+#: lib/unsandboxform.php:80
+msgid "Unsandbox this user"
+msgstr ""
+
+#: lib/unsilenceform.php:67
+msgid "Unsilence"
+msgstr ""
+
+#: lib/unsilenceform.php:78
+msgid "Unsilence this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
+msgid "Unsubscribe from this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:137
+msgid "Unsubscribe"
+msgstr ""
+
+#: lib/userprofile.php:116
+msgid "Edit Avatar"
+msgstr "Kemmañ an Avatar"
+
+#: lib/userprofile.php:236
+msgid "User actions"
+msgstr "Obererezh an implijer"
+
+#: lib/userprofile.php:251
+msgid "Edit profile settings"
+msgstr ""
+
+#: lib/userprofile.php:252
+msgid "Edit"
+msgstr "Aozañ"
+
+#: lib/userprofile.php:275
+msgid "Send a direct message to this user"
+msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ"
+
+#: lib/userprofile.php:276
+msgid "Message"
+msgstr "Kemennadenn"
+
+#: lib/userprofile.php:314
+msgid "Moderate"
+msgstr "Habaskaat"
+
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Strolladoù implijerien"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Merourien"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Habaskaat"
+
+#: lib/util.php:1015
+msgid "a few seconds ago"
+msgstr "un nebeud eilennoù zo"
+
+#: lib/util.php:1017
+msgid "about a minute ago"
+msgstr "1 vunutenn zo well-wazh"
+
+#: lib/util.php:1019
+#, php-format
+msgid "about %d minutes ago"
+msgstr "%d munutenn zo well-wazh"
+
+#: lib/util.php:1021
+msgid "about an hour ago"
+msgstr "1 eurvezh zo well-wazh"
+
+#: lib/util.php:1023
+#, php-format
+msgid "about %d hours ago"
+msgstr "%d eurvezh zo well-wazh"
+
+#: lib/util.php:1025
+msgid "about a day ago"
+msgstr "1 devezh zo well-wazh"
+
+#: lib/util.php:1027
+#, php-format
+msgid "about %d days ago"
+msgstr "%d devezh zo well-wazh"
+
+#: lib/util.php:1029
+msgid "about a month ago"
+msgstr "miz zo well-wazh"
+
+#: lib/util.php:1031
+#, php-format
+msgid "about %d months ago"
+msgstr "%d miz zo well-wazh"
+
+#: lib/util.php:1033
+msgid "about a year ago"
+msgstr "bloaz zo well-wazh"
+
+#: lib/webcolor.php:82
+#, php-format
+msgid "%s is not a valid color!"
+msgstr ""
+
+#: lib/webcolor.php:123
+#, php-format
+msgid "%s is not a valid color! Use 3 or 6 hex chars."
+msgstr ""
+
+#: lib/xmppmanager.php:402
+#, php-format
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
+"Re hir eo ar gemennadenn - ar ment brasañ a zo %1$d arouezenn, %2$d "
+"arouezenn o peus lakaet."
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index d0b228c08..f38b97ccf 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -10,80 +10,88 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:20+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:02+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accés"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Desa els paràmetres del lloc"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Registre"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privat"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Voleu prohibir als usuaris anònims (que no han iniciat cap sessió) "
"visualitzar el lloc?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Només invitació"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Fes que el registre sigui només amb invitacions."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Tancat"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Només invitació"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Inhabilita els nous registres."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Guardar"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Tancat"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Desa els paràmetres del lloc"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Guardar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "No existeix la pàgina."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -97,46 +105,53 @@ msgstr "No existeix la pàgina."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "No existeix aquest usuari."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s perfils blocats, pàgina %d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s i amics"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Canal dels amics de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Canal dels amics de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Canal dels amics de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -144,33 +159,35 @@ msgstr ""
"Aquesta és la línia temporal de %s i amics, però ningú hi ha enviat res "
"encara."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Un mateix i amics"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Actualitzacions de %1$s i amics a %2$s!"
@@ -183,20 +200,20 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "No s'ha trobat el mètode API!"
@@ -230,8 +247,9 @@ msgstr "No s'ha pogut actualitzar l'usuari."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "L'usuari no té perfil."
@@ -256,7 +274,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -377,7 +395,7 @@ msgstr "No s'ha pogut determinar l'usuari d'origen."
msgid "Could not find target user."
msgstr "No es pot trobar cap estatus."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -385,62 +403,62 @@ msgstr ""
"El sobrenom ha de tenir només lletres minúscules i números i no pot tenir "
"espais."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Aquest sobrenom ja existeix. Prova un altre. "
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Sobrenom no vàlid."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "La pàgina personal no és un URL vàlid."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "El teu nom és massa llarg (màx. 255 caràcters)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "La descripció és massa llarga (màx. %d caràcters)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "La ubicació és massa llarga (màx. 255 caràcters)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Hi ha massa àlies! Màxim %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "L'àlies no és vàlid «%s»"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "L'àlies «%s» ja està en ús. Proveu-ne un altre."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "L'àlies no pot ser el mateix que el sobrenom."
@@ -451,15 +469,15 @@ msgstr "L'àlies no pot ser el mateix que el sobrenom."
msgid "Group not found!"
msgstr "No s'ha trobat el grup!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Ja sou membre del grup."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "L'administrador us ha blocat del grup."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "No s'ha pogut afegir l'usuari %s al grup %s."
@@ -468,7 +486,7 @@ msgstr "No s'ha pogut afegir l'usuari %s al grup %s."
msgid "You are not a member of this group."
msgstr "No sou un membre del grup."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "No s'ha pogut suprimir l'usuari %s del grup %s."
@@ -500,7 +518,7 @@ msgstr "Mida invàlida."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -509,7 +527,7 @@ msgstr "Mida invàlida."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -546,7 +564,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -569,13 +587,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Compte"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -655,23 +673,11 @@ msgstr "El format no està implementat."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Preferits de %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s actualitzacions favorites per %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s línia temporal"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualitzacions de %1$s a %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -697,17 +703,17 @@ msgstr "%s notificacions de tots!"
msgid "Repeated to %s"
msgstr "Respostes a %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repeticions de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Aviso etiquetats amb %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualitzacions etiquetades amb %1$s el %2$s!"
@@ -723,8 +729,7 @@ msgstr "No existeix l'adjunció."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Cap sobrenom."
@@ -736,7 +741,7 @@ msgstr "Cap mida."
msgid "Invalid size."
msgstr "Mida invàlida."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -754,30 +759,30 @@ msgid "User without matching profile"
msgstr "Usuari sense perfil coincident"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Configuració de l'avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Vista prèvia"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Suprimeix"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Puja"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Retalla"
@@ -787,7 +792,7 @@ msgstr ""
"Selecciona un quadrat de l'àrea de la imatge que vols que sigui el teu "
"avatar."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "S'ha perdut el nostre fitxer de dades."
@@ -819,22 +824,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "No bloquis l'usuari"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Sí"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquejar aquest usuari"
@@ -842,40 +847,44 @@ msgstr "Bloquejar aquest usuari"
msgid "Failed to save block information."
msgstr "Error al guardar la informació del block."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "No s'ha trobat el grup."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s perfils blocats"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s perfils blocats, pàgina %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
#, fuzzy
msgid "A list of the users blocked from joining this group."
msgstr "La llista dels usuaris d'aquest grup."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Desbloca l'usuari del grup"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloca"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Desbloca l'usuari"
@@ -932,7 +941,7 @@ msgid "Conversation"
msgstr "Conversa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avisos"
@@ -954,7 +963,7 @@ msgstr "No sou un membre del grup."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ha ocorregut algun problema amb la teva sessió."
@@ -980,12 +989,13 @@ msgstr "No es pot esborrar la notificació."
msgid "Delete this application"
msgstr "Eliminar aquesta nota"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "No heu iniciat una sessió."
@@ -1016,7 +1026,7 @@ msgstr "N'estàs segur que vols eliminar aquesta notificació?"
msgid "Do not delete this notice"
msgstr "No es pot esborrar la notificació."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Eliminar aquesta nota"
@@ -1033,18 +1043,18 @@ msgstr "No pots eliminar l'estatus d'un altre usuari."
msgid "Delete user"
msgstr "Suprimeix l'usuari"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Suprimeix l'usuari"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Disseny"
@@ -1145,6 +1155,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Guardar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Desa el disseny"
@@ -1247,30 +1269,30 @@ msgstr "Editar el grup %s"
msgid "You must be logged in to create a group."
msgstr "Has d'haver entrat per crear un grup."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Has de ser admin per editar aquest grup"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Utilitza aquest formulari per editar el grup."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "la descripció és massa llarga (màx. %d caràcters)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "No s'ha pogut actualitzar el grup."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "No s'han pogut crear els àlies."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Configuració guardada."
@@ -1395,7 +1417,7 @@ msgid "Cannot normalize that email address"
msgstr "No es pot normalitzar l'adreça electrònica."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adreça de correu electrònic no vàlida."
@@ -1584,6 +1606,25 @@ msgstr "No existeix el fitxer."
msgid "Cannot read file."
msgstr "No es pot llegir el fitxer."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Mida invàlida."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "No pots enviar un missatge a aquest usuari."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "L'usuari ja està silenciat."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1614,7 +1655,7 @@ msgstr "Un usuari t'ha bloquejat."
msgid "User is not a member of group."
msgstr "L'usuari no és membre del grup."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloca l'usuari del grup"
@@ -1649,11 +1690,11 @@ msgstr "No ID"
msgid "You must be logged in to edit a group."
msgstr "Heu d'iniciar una sessió per editar un grup."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Disseny de grup"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1661,82 +1702,88 @@ msgstr ""
"Personalitzeu l'aspecte del vostre grup amb una imatge de fons i una paleta "
"de colors de la vostra elecció."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "No s'ha pogut actualitzar el vostre disseny."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "S'han desat les preferències de disseny."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo del grup"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, fuzzy, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "Pots pujar una imatge de logo per al grup."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Usuari sense perfil coincident"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Trieu una àrea quadrada de la imatge perquè en sigui el logotip."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo actualitzat."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Error en actualitzar logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s membre/s en el grup"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "%s membre/s en el grup, pàgina %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "La llista dels usuaris d'aquest grup."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloca"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Fes l'usuari un administrador del grup"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Fes-lo administrador"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Fes l'usuari administrador"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s línia temporal"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualitzacions dels membres de %1$s el %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grups"
@@ -1990,16 +2037,19 @@ msgstr "Missatge personal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalment pots afegir un missatge a la invitació."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Envia"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, fuzzy, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s t'ha convidat us ha convidat a unir-te al grup %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2060,7 +2110,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Has d'haver entrat per participar en un grup."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Cap sobrenom."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s s'ha unit al grup %2$s"
@@ -2069,11 +2124,11 @@ msgstr "%1$s s'ha unit al grup %2$s"
msgid "You must be logged in to leave a group."
msgstr "Has d'haver entrat per a poder marxar d'un grup."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "No ets membre d'aquest grup."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s ha abandonat el grup %s"
@@ -2091,8 +2146,7 @@ msgstr "Nom d'usuari o contrasenya incorrectes."
msgid "Error setting user. You are probably not authorized."
msgstr "No autoritzat."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inici de sessió"
@@ -2214,9 +2268,9 @@ msgid "Message sent"
msgstr "S'ha enviat el missatge"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Missatge directe per a %s enviat"
+msgstr "S'ha enviat un missatge directe a %s."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2294,9 +2348,8 @@ msgid "You must be logged in to list your applications."
msgstr "Heu d'iniciar una sessió per editar un grup."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Altres opcions"
+msgstr "Aplicacions OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2316,9 +2369,8 @@ msgid "You have allowed the following applications to access you account."
msgstr ""
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "No ets membre d'aquest grup."
+msgstr "No sou usuari de l'aplicació."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
@@ -2350,8 +2402,8 @@ msgstr "tipus de contingut "
msgid "Only "
msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@@ -2364,9 +2416,8 @@ msgid "Notice Search"
msgstr "Cerca de notificacions"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
-msgstr "Altres configuracions"
+msgstr "Altres paràmetres"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2398,9 +2449,8 @@ msgstr ""
"El servei d'auto-escurçament d'URL és massa llarga (màx. 50 caràcters)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "No s'ha especificat cap grup."
+msgstr "No s'ha especificat cap ID d'usuari."
#: actions/otp.php:83
#, fuzzy
@@ -2499,7 +2549,8 @@ msgstr "No es pot guardar la nova contrasenya."
msgid "Password saved."
msgstr "Contrasenya guardada."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camins"
@@ -2532,7 +2583,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Lloc"
@@ -2620,7 +2670,7 @@ msgstr "Directori de fons"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
@@ -2677,11 +2727,11 @@ msgstr "Etiqueta no vàlida per a la gent: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuaris que s'han etiquetat %s - pàgina %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "El contingut de l'avís és invàlid"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2707,7 +2757,7 @@ msgstr ""
"1-64 lletres en minúscula o números, sense signes de puntuació o espais"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nom complet"
@@ -2736,7 +2786,7 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2763,7 +2813,7 @@ msgstr ""
"Etiquetes per a tu mateix (lletres, números, -, ., i _), per comes o separat "
"por espais"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2791,7 +2841,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografia és massa llarga (màx. %d caràcters)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Franja horària no seleccionada."
@@ -2804,23 +2854,24 @@ msgstr "L'idioma és massa llarg (màx 50 caràcters)."
msgid "Invalid tag: \"%s\""
msgstr "Etiqueta no vàlida: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "No es pot actualitzar l'usuari per autosubscriure."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "No s'han pogut desar les preferències d'ubicació."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "No s'ha pogut guardar el perfil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "No s'han pogut guardar les etiquetes."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Configuració guardada."
@@ -2833,28 +2884,28 @@ msgstr "Més enllà del límit de la pàgina (%s)"
msgid "Could not retrieve public stream."
msgstr "No s'ha pogut recuperar la conversa pública."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Línia temporal pública, pàgina %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Línia temporal pública"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Flux de canal públic (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Flux de canal públic (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Flux de canal públic (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2863,11 +2914,11 @@ msgstr ""
"Aquesta és la línia temporal pública de %%site.name%%, però ningú no hi ha "
"enviat res encara."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Sigueu el primer en escriure-hi!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2875,7 +2926,7 @@ msgstr ""
"Per què no [registreu un compte](%%action.register%%) i sou el primer en "
"escriure-hi!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2884,7 +2935,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3061,8 +3112,7 @@ msgstr "El codi d'invitació no és vàlid."
msgid "Registration successful"
msgstr "Registre satisfactori"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registre"
@@ -3104,7 +3154,7 @@ msgid "Same as password above. Required."
msgstr "Igual a la contrasenya de dalt. Requerit."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correu electrònic"
@@ -3210,7 +3260,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del teu perfil en un altre servei de microblogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscriure's"
@@ -3253,7 +3303,7 @@ msgstr "No pots registrar-te si no estàs d'acord amb la llicència."
msgid "You already repeated that notice."
msgstr "Ja heu blocat l'usuari."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetit"
@@ -3261,33 +3311,33 @@ msgstr "Repetit"
msgid "Repeated!"
msgstr "Repetit!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Respostes a %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Respostes a %1$s el %2$s!"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Feed d'avisos de %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Feed d'avisos de %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Feed d'avisos de %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3296,14 +3346,14 @@ msgstr ""
"Aquesta és la línia temporal de %s i amics, però ningú hi ha enviat res "
"encara."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3315,6 +3365,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostes a %1$s el %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "No podeu silenciar els usuaris d'aquest lloc."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuari sense perfil coincident"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3330,8 +3390,9 @@ msgstr "No pots enviar un missatge a aquest usuari."
msgid "User is already sandboxed."
msgstr "Un usuari t'ha bloquejat."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessions"
@@ -3356,8 +3417,8 @@ msgstr "Depuració de la sessió"
msgid "Turn on debugging output for sessions."
msgstr "Activa la sortida de depuració per a les sessions."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Desa els paràmetres del lloc"
@@ -3390,8 +3451,8 @@ msgstr "Paginació"
msgid "Description"
msgstr "Descripció"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadístiques"
@@ -3453,35 +3514,35 @@ msgstr "%s's notes favorites"
msgid "Could not retrieve favorite notices."
msgstr "No s'han pogut recuperar els avisos preferits."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed per a amics de %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed per a amics de %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed per a amics de %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3489,7 +3550,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "És una forma de compartir allò que us agrada."
@@ -3503,67 +3564,67 @@ msgstr "%s grup"
msgid "%1$s group, page %2$d"
msgstr "%s membre/s en el grup, pàgina %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil del grup"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Avisos"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Àlies"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Accions del grup"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Safata de sortida per %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Cap)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tots els membres"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "S'ha creat"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3573,7 +3634,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3584,7 +3645,7 @@ msgstr ""
"**%s** és un grup d'usuaris a %%%%site.name%%%%, un servei de [microblogging]"
"(http://ca.wikipedia.org/wiki/Microblogging)"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradors"
@@ -3699,149 +3760,140 @@ msgid "User is already silenced."
msgstr "L'usuari ja està silenciat."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Paràmetres bàsic d'aquest lloc basat en l'StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "El nom del lloc ha de tenir una longitud superior a zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Heu de tenir una adreça electrònica de contacte vàlida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, fuzzy, php-format
msgid "Unknown language \"%s\"."
msgstr "Llengua desconeguda «%s»"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom del lloc"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "El nom del vostre lloc, com ara «El microblog de l'empresa»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "El text que s'utilitza a l'enllaç dels crèdits al peu de cada pàgina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adreça electrònica de contacte del vostre lloc"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fus horari per defecte"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fus horari per defecte del lloc; normalment UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Llengua per defecte del lloc"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantànies"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "En una tasca planificada"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantànies de dades"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Freqüència"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Les instantànies s'enviaran a aquest URL"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Límits"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Límits del text"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Límit de duplicats"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quant de temps cal que esperin els usuaris (en segons) per enviar el mateix "
"de nou."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Avís del lloc"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nou missatge"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "No s'ha pogut guardar la teva configuració de Twitter!"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Avís del lloc"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Avís del lloc"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Paràmetres de l'SMS"
@@ -3945,19 +3997,90 @@ msgstr ""
msgid "No code entered"
msgstr "No hi ha cap codi entrat"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantànies"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Canvia la configuració del lloc"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "En una tasca planificada"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantànies de dades"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Freqüència"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Les instantànies s'enviaran a aquest URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Desa els paràmetres del lloc"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "No estàs subscrit a aquest perfil."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "No s'ha pogut guardar la subscripció."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "No existeix aquest usuari."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "No existeix el fitxer."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "No estàs subscrit a aquest perfil."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscrit"
@@ -4021,7 +4144,7 @@ msgstr "Aquestes són les persones que escoltes."
msgid "These are the people whose notices %s listens to."
msgstr "Aquestes són les persones que %s escolta."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4031,35 +4154,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s no escolta a ningú."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Usuaris que s'han etiquetat %s - pàgina %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Feed d'avisos de %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Feed d'avisos de %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Feed d'avisos de %s"
@@ -4116,7 +4239,7 @@ msgstr ""
msgid "No such tag."
msgstr "No existeix aquesta etiqueta."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Mètode API en construcció."
@@ -4141,76 +4264,78 @@ msgstr "No id en el perfil sol·licitat."
msgid "Unsubscribed"
msgstr "No subscrit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Usuari"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Perfil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Límit de la biografia"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Límit màxim de la biografia d'un perfil (en caràcters)."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Usuaris nous"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Benvinguda als usuaris nous"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Subscripció per defecte"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Subscriviu automàticament els usuaris nous a aquest usuari."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Invitacions"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "S'han habilitat les invitacions"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4343,16 +4468,22 @@ msgstr "%s membre/s en el grup, pàgina %d"
msgid "Search for more groups"
msgstr "Cerca més grups"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s no és membre de cap grup."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualitzacions de %1$s a %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4396,7 +4527,7 @@ msgstr ""
msgid "Plugins"
msgstr "Connectors"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sessions"
@@ -4438,6 +4569,11 @@ msgstr "No s'ha pogut actualitzar el grup."
msgid "Group leave failed."
msgstr "Perfil del grup"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "No s'ha pogut actualitzar el grup."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4455,28 +4591,28 @@ msgstr "No s'ha pogut inserir el missatge."
msgid "Could not update message with new URI."
msgstr "No s'ha pogut inserir el missatge amb la nova URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Hashtag de l'error de la base de dades:%s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema al guardar la notificació. Usuari desconegut."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4485,42 +4621,78 @@ msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Ha estat bandejat de publicar notificacions en aquest lloc."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Error de BD en inserir resposta: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Se us ha banejat la subscripció."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Ja hi esteu subscrit!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Un usuari t'ha bloquejat."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "No estàs subscrit!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "No s'ha pogut eliminar la subscripció."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "No s'ha pogut eliminar la subscripció."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "No s'ha pogut eliminar la subscripció."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Us donem la benvinguda a %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "No s'ha pogut crear el grup."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "No s'ha pogut establir la pertinença d'aquest grup."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "No s'ha pogut guardar la subscripció."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Canvieu els paràmetres del vostre perfil"
@@ -4559,125 +4731,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Pàgina sense titol"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegació primària del lloc"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Inici"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil personal i línia temporal dels amics"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Canviar correu electrònic, avatar, contrasenya, perfil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Connexió"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "No s'ha pogut redirigir al servidor: %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Connexió"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Canvia la configuració del lloc"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convida"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convidar amics i companys perquè participin a %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Finalitza la sessió"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convida"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Finalitza la sessió del lloc"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Finalitza la sessió"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crea un compte"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registre"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Inicia una sessió al lloc"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inici de sessió"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajuda'm"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Cerca"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cerca gent o text"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Cerca"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Avís del lloc"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistes locals"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notificació pàgina"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegació del lloc secundària"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Quant a"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntes més freqüents"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privadesa"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Font"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacte"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Insígnia"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Llicència del programari StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4686,12 +4921,12 @@ msgstr ""
"**%%site.name%%** és un servei de microblogging de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** és un servei de microblogging."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4702,100 +4937,154 @@ msgstr ""
"%s, disponible sota la [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Llicència de contingut del lloc"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Tot "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "llicència."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginació"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriors"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Anteriors"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "No podeu fer canvis al lloc."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Registre no permès."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Comanda encara no implementada."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Comanda encara no implementada."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "No s'ha pogut guardar la teva configuració de Twitter!"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuració bàsica del lloc"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Lloc"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuració del disseny"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Disseny"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Configuració dels camins"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usuari"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Configuració del disseny"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuració dels camins"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Configuració del disseny"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Avís del lloc"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuració dels camins"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4890,11 +5179,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "Etiquetes de l'adjunció"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "El canvi de contrasenya ha fallat"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Contrasenya canviada."
@@ -5048,82 +5337,91 @@ msgstr "Problema en guardar l'avís."
msgid "Specify the name of the user to subscribe to"
msgstr "Especifica el nom de l'usuari a que vols subscriure't"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "No existeix aquest usuari."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Subscrit a %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifica el nom de l'usuari del que vols deixar d'estar subscrit"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Has deixat d'estar subscrit a %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Comanda encara no implementada."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificacions off."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "No es poden posar en off les notificacions."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificacions on."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "No es poden posar en on les notificacions."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Has deixat d'estar subscrit a %s"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "No estàs subscrit a aquest perfil."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ja estàs subscrit a aquests usuaris:"
msgstr[1] "Ja estàs subscrit a aquests usuaris:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "No pots subscriure a un altre a tu mateix."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "No pots subscriure a un altre a tu mateix."
msgstr[1] "No pots subscriure a un altre a tu mateix."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "No sou membre de cap grup."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5137,6 +5435,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5164,19 +5463,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "No s'ha trobat cap fitxer de configuració. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Podeu voler executar l'instal·lador per a corregir-ho."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Vés a l'instal·lador."
@@ -5274,6 +5573,11 @@ msgstr "Elegeix una etiqueta para reduir la llista"
msgid "Go"
msgstr "Vés-hi"
+#: lib/grantroleform.php:91
+#, php-format
+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 del teu web, blog del grup u tema"
@@ -5364,23 +5668,23 @@ msgstr "Error del sistema en pujar el fitxer."
msgid "Not an image or corrupt file."
msgstr "No és una imatge o és un fitxer corrupte."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Format d'imatge no suportat."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Hem perdut el nostre arxiu."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tipus de fitxer desconegut"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5600,7 +5904,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "de"
@@ -5690,6 +5994,12 @@ msgstr "A"
msgid "Available characters"
msgstr "Caràcters disponibles"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Envia"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Enviar notificació"
@@ -5723,49 +6033,49 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "No"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "en context"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetit per"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "respondre a aquesta nota"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Respon"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Notificació publicada"
@@ -5799,10 +6109,6 @@ msgstr "Error en inserir perfil remot"
msgid "Duplicate notice"
msgstr "Eliminar nota."
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Se us ha banejat la subscripció."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "No s'ha pogut inserir una nova subscripció."
@@ -5845,7 +6151,7 @@ msgstr "Etiquetes en les notificacions de %s's"
msgid "Unknown"
msgstr "Acció desconeguda"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscripcions"
@@ -5853,23 +6159,23 @@ msgstr "Subscripcions"
msgid "All subscriptions"
msgstr "Totes les subscripcions"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscriptors"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tots els subscriptors"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de l'usuari"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membre des de"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tots els grups"
@@ -5911,7 +6217,12 @@ msgstr "Repeteix l'avís"
msgid "Repeat this notice"
msgstr "Repeteix l'avís"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloca l'usuari del grup"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5933,6 +6244,10 @@ msgstr "Cerca al lloc"
msgid "Keyword(s)"
msgstr "Paraules clau"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Cerca"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Ajuda de la cerca"
@@ -5984,35 +6299,14 @@ msgstr "Persones subscrites a %s"
msgid "Groups %s is a member of"
msgstr "%s grups són membres de"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Ja hi esteu subscrit!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Un usuari t'ha bloquejat."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "No pots subscriure."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "No pots subscriure a un altre a tu mateix."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "No estàs subscrit!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "No s'ha pogut eliminar la subscripció."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Convida"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "No s'ha pogut eliminar la subscripció."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Convidar amics i companys perquè participin a %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6065,67 +6359,84 @@ msgstr "Edita l'avatar"
msgid "User actions"
msgstr "Accions de l'usuari"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Edita la configuració del perfil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Edita"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Enviar un missatge directe a aquest usuari"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Missatge"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil de l'usuari"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradors"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modera"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fa pocs segons"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fa un any"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index a5d6db600..f4d284ee9 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,82 +9,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:05+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n< =4) ? 1 : 2 ;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Přijmout"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Nastavení"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Registrovat"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Soukromí"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
msgid "Invite only"
msgstr ""
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Žádný takový uživatel."
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Uložit"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Nastavení"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Uložit"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Žádné takové oznámení."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -98,79 +105,88 @@ msgstr "Žádné takové oznámení."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Žádný takový uživatel."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s a přátelé"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s a přátelé"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed přítel uživatele: %s"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed přítel uživatele: %s"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed přítel uživatele: %s"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s a přátelé"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -183,20 +199,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Potvrzující kód nebyl nalezen"
@@ -230,8 +246,9 @@ msgstr "Nelze aktualizovat uživatele"
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Uživatel nemá profil."
@@ -256,7 +273,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -373,68 +390,68 @@ msgstr "Nelze aktualizovat uživatele"
msgid "Could not find target user."
msgstr "Nelze aktualizovat uživatele"
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "PÅ™ezdívka může obsahovat pouze malá písmena a Äísla bez mezer"
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Přezdívku již někdo používá. Zkuste jinou"
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Není platnou přezdívkou."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Stránka není platnou URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Jméno je moc dlouhé (maximální délka je 255 znaků)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Umístění příliš dlouhé (maximálně 255 znaků)"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "Neplatná adresa '%s'"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Přezdívku již někdo používá. Zkuste jinou"
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -446,16 +463,16 @@ msgstr ""
msgid "Group not found!"
msgstr "Žádný požadavek nebyl nalezen!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "Již jste přihlášen"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Nelze přesměrovat na server: %s"
@@ -465,7 +482,7 @@ msgstr "Nelze přesměrovat na server: %s"
msgid "You are not a member of this group."
msgstr "Neodeslal jste nám profil"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Nelze vytvořit OpenID z: %s"
@@ -497,7 +514,7 @@ msgstr "Neplatná velikost"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -506,7 +523,7 @@ msgstr "Neplatná velikost"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -541,7 +558,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -564,14 +581,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "O nás"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -652,23 +669,11 @@ msgstr "Nepodporovaný formát obrázku."
msgid "%1$s / Favorites from %2$s"
msgstr "%1 statusů na %2"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Mikroblog od %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -694,17 +699,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr "Odpovědi na %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Odpovědi na %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mikroblog od %s"
@@ -722,8 +727,7 @@ msgstr "Žádný takový dokument."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Žádná přezdívka."
@@ -735,7 +739,7 @@ msgstr "Žádná velikost"
msgid "Invalid size."
msgstr "Neplatná velikost"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Obrázek"
@@ -752,31 +756,31 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
#, fuzzy
msgid "Avatar settings"
msgstr "Nastavení"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Odstranit"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Upload"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -784,7 +788,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -818,23 +822,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Ne"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Žádný takový uživatel."
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Ano"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Zablokovat tohoto uživatele"
@@ -842,41 +846,45 @@ msgstr "Zablokovat tohoto uživatele"
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "Žádné takové oznámení."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "Uživatel nemá profil."
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s a přátelé"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "Žádný takový uživatel."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "Žádný takový uživatel."
@@ -935,7 +943,7 @@ msgid "Conversation"
msgstr "Umístění"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Sdělení"
@@ -957,7 +965,7 @@ msgstr "Neodeslal jste nám profil"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -983,12 +991,13 @@ msgstr "Žádné takové oznámení."
msgid "Delete this application"
msgstr "Odstranit toto oznámení"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Nepřihlášen"
@@ -1016,7 +1025,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Žádné takové oznámení."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Odstranit toto oznámení"
@@ -1034,18 +1043,18 @@ msgstr "Můžete použít místní odebírání."
msgid "Delete user"
msgstr ""
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Odstranit tohoto uživatele"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Vzhled"
@@ -1152,6 +1161,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Uložit"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1251,31 +1272,31 @@ msgstr "Upravit %s skupinu"
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "Nelze aktualizovat uživatele"
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Nelze uložin informace o obrázku"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Nastavení uloženo."
@@ -1393,7 +1414,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Není platnou mailovou adresou."
@@ -1588,6 +1609,25 @@ msgstr "Žádné takové oznámení."
msgid "Cannot read file."
msgstr "Žádné takové oznámení."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Neplatná velikost"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Neodeslal jste nám profil"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Uživatel nemá profil."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1619,7 +1659,7 @@ msgstr "Uživatel nemá profil."
msgid "User is not a member of group."
msgstr "Neodeslal jste nám profil"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Žádný takový uživatel."
@@ -1655,96 +1695,102 @@ msgstr "Žádné id"
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Nelze aktualizovat uživatele"
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Nastavení uloženo"
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo skupiny"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Uživatel nemá profil."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "Obrázek nahrán"
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "Nahrávání obrázku selhalo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Mikroblog od %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Skupiny"
@@ -1993,16 +2039,19 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Odeslat"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2037,7 +2086,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Žádná přezdívka."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2046,12 +2100,12 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "Neodeslal jste nám profil"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%1 statusů na %2"
@@ -2069,8 +2123,7 @@ msgstr "Neplatné jméno nebo heslo"
msgid "Error setting user. You are probably not authorized."
msgstr "Neautorizován."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Přihlásit"
@@ -2319,8 +2372,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2468,7 +2521,8 @@ msgstr "Nelze uložit nové heslo"
msgid "Password saved."
msgstr "Heslo uloženo"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2501,7 +2555,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2595,7 +2648,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Obnovit"
@@ -2654,11 +2707,11 @@ msgstr "Není platnou mailovou adresou."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Mikroblog od %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Neplatný obsah sdělení"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2684,7 +2737,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 znaků nebo Äísel, bez teÄek, Äárek a mezer"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Celé jméno"
@@ -2712,7 +2765,7 @@ msgid "Bio"
msgstr "O mÄ›"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2737,7 +2790,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Jazyk"
@@ -2763,7 +2816,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2776,25 +2829,26 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "Neplatná adresa '%s'"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Nelze uložit profil"
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Nelze uložit profil"
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "Nelze uložit profil"
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Nastavení uloženo"
@@ -2807,48 +2861,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "Veřejné zprávy"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Veřejné zprávy"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2857,7 +2911,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3030,8 +3084,7 @@ msgstr "Chyba v ověřovacím kódu"
msgid "Registration successful"
msgstr "Registrace úspěšná"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrovat"
@@ -3070,7 +3123,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3161,7 +3214,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Adresa profilu na jiných kompatibilních mikroblozích."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Odebírat"
@@ -3202,7 +3255,7 @@ msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
msgid "You already repeated that notice."
msgstr "Již jste přihlášen"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Vytvořit"
@@ -3212,47 +3265,47 @@ msgstr "Vytvořit"
msgid "Repeated!"
msgstr "Vytvořit"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Odpovědi na %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Odpovědi na %s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Feed sdělení pro %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Feed sdělení pro %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Feed sdělení pro %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3264,6 +3317,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Odpovědi na %s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Neodeslal jste nám profil"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Uživatel nemá profil."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3279,8 +3342,9 @@ msgstr "Neodeslal jste nám profil"
msgid "User is already sandboxed."
msgstr "Uživatel nemá profil."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3304,8 +3368,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Nastavení"
@@ -3340,8 +3404,8 @@ msgstr "Umístění"
msgid "Description"
msgstr "Odběry"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiky"
@@ -3401,35 +3465,35 @@ msgstr "%s a přátelé"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed přítel uživatele: %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed přítel uživatele: %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed přítel uživatele: %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3437,7 +3501,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3451,70 +3515,70 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Všechny odběry"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Žádné takové oznámení."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Poznámka"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "ÄŒlenem od"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Vytvořit"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3524,7 +3588,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3533,7 +3597,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3645,149 +3709,137 @@ msgid "User is already silenced."
msgstr "Uživatel nemá profil."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Není platnou mailovou adresou."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Žádný registrovaný email pro tohoto uživatele."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Umístění"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Problém při ukládání sdělení"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Nové sdělení"
#: actions/smssettings.php:58
#, fuzzy
@@ -3885,22 +3937,92 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Odběry"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Nastavení"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
msgstr "Neodeslal jste nám profil"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "Nelze vytvořit odebírat"
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "Žádný takový uživatel."
+msgid "No such profile."
+msgstr "Žádné takové oznámení."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Neodeslal jste nám profil"
+
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "Odebírat"
@@ -3961,7 +4083,7 @@ msgstr "Toto jsou lidé, jejiž sdělením nasloucháte"
msgid "These are the people whose notices %s listens to."
msgstr "Toto jsou lidé, jejiž sdělením %s naslouchá"
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3971,36 +4093,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1 od teÄ naslouchá tvým sdÄ›lením v %2"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "Žádné Jabber ID."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Mikroblog od %s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Feed sdělení pro %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Feed sdělení pro %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Feed sdělení pro %s"
@@ -4054,7 +4176,7 @@ msgstr ""
msgid "No such tag."
msgstr "Žádné takové oznámení."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -4083,79 +4205,80 @@ msgstr "Nebylo vráceno žádné URL profilu od servu."
msgid "Unsubscribed"
msgstr "Odhlásit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr ""
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Všechny odběry"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "Odběr autorizován"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Umístění"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4289,16 +4412,22 @@ msgstr "Všechny odběry"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Neodeslal jste nám profil"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4342,7 +4471,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Osobní"
@@ -4383,6 +4512,11 @@ msgstr "Nelze aktualizovat uživatele"
msgid "Group leave failed."
msgstr "Žádné takové oznámení."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Nelze aktualizovat uživatele"
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4400,70 +4534,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Chyba v DB při vkládání odpovědi: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+#, fuzzy
+msgid "User has blocked you."
+msgstr "Uživatel nemá profil."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Nepřihlášen!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Nelze smazat odebírání"
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Nelze smazat odebírání"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Nelze smazat odebírání"
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Nelze uložin informace o obrázku"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Nelze vytvořit odebírat"
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Nelze vytvořit odebírat"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Nelze vytvořit odebírat"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4503,130 +4674,186 @@ msgstr "%1 statusů na %2"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Domů"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Osobní"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Připojit"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Změnit heslo"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Nelze přesměrovat na server: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "Připojit"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Odběry"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Odhlásit"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Neplatná velikost"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Odhlásit"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "VytvoÅ™it nový úÄet"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrovat"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Nápověda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Přihlásit"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomoci mi!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Hledat"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Nápověda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Hledat"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Nové sdělení"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Nové sdělení"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Odběry"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Nápověda"
+
+#: lib/action.php:754
msgid "About"
msgstr "O nás"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Soukromí"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Zdroj"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4635,12 +4862,12 @@ msgstr ""
"**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** je služba mikroblogů."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4651,102 +4878,156 @@ msgstr ""
"dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Nové sdělení"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Novější"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Starší »"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Nové sdělení"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Vzhled"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Nové sdělení"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Potvrzení emailové adresy"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4841,12 +5122,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Heslo uloženo"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Heslo uloženo"
@@ -5002,86 +5283,96 @@ msgstr "Problém při ukládání sdělení"
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Žádný takový uživatel."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Odhlásit"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Neodeslal jste nám profil"
msgstr[1] "Neodeslal jste nám profil"
msgstr[2] ""
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Vzdálený odběr"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Vzdálený odběr"
msgstr[1] "Vzdálený odběr"
msgstr[2] ""
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Neodeslal jste nám profil"
msgstr[1] "Neodeslal jste nám profil"
msgstr[2] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5095,6 +5386,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5122,20 +5414,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Žádný potvrzující kód."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5236,6 +5528,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5329,24 +5626,24 @@ msgstr "Chyba systému při nahrávání souboru"
msgid "Not an image or corrupt file."
msgstr "Není obrázkem, nebo jde o poškozený soubor."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Nepodporovaný formát obrázku."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "Žádné takové oznámení."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5559,7 +5856,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " od "
@@ -5651,6 +5948,12 @@ msgstr ""
msgid "Available characters"
msgstr "6 a více znaků"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Odeslat"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5685,51 +5988,51 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Žádný obsah!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Vytvořit"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "odpovÄ›Ä"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Sdělení"
@@ -5763,10 +6066,6 @@ msgstr "Chyba při vkládaní vzdáleného profilu"
msgid "Duplicate notice"
msgstr "Nové sdělení"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Nelze vložit odebírání"
@@ -5808,7 +6107,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Odběry"
@@ -5816,23 +6115,23 @@ msgstr "Odběry"
msgid "All subscriptions"
msgstr "Všechny odběry"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Odběratelé"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Všichni odběratelé"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "ÄŒlenem od"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5876,7 +6175,12 @@ msgstr "Odstranit toto oznámení"
msgid "Repeat this notice"
msgstr "Odstranit toto oznámení"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Žádný takový uživatel."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5898,6 +6202,10 @@ msgstr "Hledat"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Hledat"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5952,37 +6260,15 @@ msgstr "Vzdálený odběr"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Uživatel nemá profil."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Nepřihlášen!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Nelze smazat odebírání"
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Nelze smazat odebírání"
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -6035,68 +6321,83 @@ msgstr "Upravit avatar"
msgid "User actions"
msgstr "Akce uživatele"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Nastavené Profilu"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Zpráva"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Uživatel nemá profil."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "před pár sekundami"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "asi před rokem"
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index b9e53e254..f71b407d5 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -4,6 +4,7 @@
# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
# Author@translatewiki.net: McDutchie
+# Author@translatewiki.net: Michi
# Author@translatewiki.net: Pill
# Author@translatewiki.net: Umherirrender
# --
@@ -13,81 +14,84 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:26+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:08+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
-#, fuzzy
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
-msgstr "Akzeptieren"
+msgstr "Zugang"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Zugangseinstellungen speichern"
-#: actions/accessadminpanel.php:158
-#, fuzzy
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registrieren"
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Private"
-msgstr "Privatsphäre"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+"Anonymen (nicht eingeloggten) Nutzern das Betrachten der Seite verbieten?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
#, fuzzy
-msgid "Invite only"
-msgstr "Einladen"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
-msgstr ""
+msgstr "Registrierung nur bei vorheriger Einladung erlauben."
-#: actions/accessadminpanel.php:173
-#, fuzzy
-msgid "Closed"
-msgstr "Blockieren"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Nur auf Einladung"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
-msgstr ""
+msgstr "Neuregistrierungen deaktivieren."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Speichern"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Geschlossen"
-#: actions/accessadminpanel.php:189
-#, fuzzy
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
-msgstr "Site-Einstellungen speichern"
+msgstr "Zugangs-Einstellungen speichern"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Speichern"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Seite nicht vorhanden"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -101,46 +105,53 @@ msgstr "Seite nicht vorhanden"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Unbekannter Benutzer."
-#: actions/all.php:84
-#, fuzzy, php-format
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
+#, php-format
msgid "%1$s and friends, page %2$d"
-msgstr "%s blockierte Benutzerprofile, Seite %d"
+msgstr "%1$s und Freunde, Seite% 2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s und Freunde"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed der Freunde von %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed der Freunde von %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed der Freunde von %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -148,7 +159,7 @@ msgstr ""
"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
"gepostet."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -157,7 +168,8 @@ msgstr ""
"Abonniere doch mehr Leute, [tritt einer Gruppe bei](%%action.groups%%) oder "
"poste selber etwas."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -167,7 +179,7 @@ msgstr ""
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -177,12 +189,13 @@ msgstr ""
"gibst %s dann einen Stups oder postest ihm etwas, um seine Aufmerksamkeit zu "
"erregen?"
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du und Freunde"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
@@ -195,20 +208,20 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-Methode nicht gefunden."
@@ -240,8 +253,9 @@ msgstr "Konnte Benutzerdaten nicht aktualisieren."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Benutzer hat kein Profil."
@@ -265,7 +279,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -378,7 +392,7 @@ msgstr "Konnte öffentlichen Stream nicht abrufen."
msgid "Could not find target user."
msgstr "Konnte keine Statusmeldungen finden."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -386,63 +400,63 @@ msgstr ""
"Der Nutzername darf nur aus Kleinbuchstaben und Ziffern bestehen. "
"Leerzeichen sind nicht erlaubt."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Nutzername wird bereits verwendet. Suche dir einen anderen aus."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ungültiger Nutzername."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr ""
"Homepage ist keine gültige URL. URL’s müssen ein Präfix wie http enthalten."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Der vollständige Name ist zu lang (maximal 255 Zeichen)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Die Beschreibung ist zu lang (max. %d Zeichen)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Der eingegebene Aufenthaltsort ist zu lang (maximal 255 Zeichen)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Zu viele Pseudonyme! Maximale Anzahl ist %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ungültiger Tag: „%s“"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Nutzername „%s“ wird bereits verwendet. Suche dir einen anderen aus."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias kann nicht das gleiche wie der Spitznamen sein."
@@ -453,15 +467,15 @@ msgstr "Alias kann nicht das gleiche wie der Spitznamen sein."
msgid "Group not found!"
msgstr "Gruppe nicht gefunden!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Du bist bereits Mitglied dieser Gruppe"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Der Admin dieser Gruppe hat dich gesperrt."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen."
@@ -470,10 +484,10 @@ msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen."
msgid "You are not a member of this group."
msgstr "Du bist kein Mitglied dieser Gruppe."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
-#, fuzzy, php-format
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
+#, php-format
msgid "Could not remove user %1$s from group %2$s."
-msgstr "Konnte Benutzer %s nicht aus der Gruppe %s entfernen."
+msgstr "Konnte Benutzer %1$s nicht aus der Gruppe %2$s entfernen."
#: actions/apigrouplist.php:95
#, php-format
@@ -502,7 +516,7 @@ msgstr "Ungültige Größe."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -511,7 +525,7 @@ msgstr "Ungültige Größe."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -545,7 +559,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -568,13 +582,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -654,23 +668,11 @@ msgstr "Bildformat wird nicht unterstützt."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Favoriten von %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s Aktualisierung in den Favoriten von %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s Zeitleiste"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Aktualisierungen von %1$s auf %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -696,17 +698,17 @@ msgstr "%s Nachrichten von allen!"
msgid "Repeated to %s"
msgstr "Antworten an %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Antworten an %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Nachrichten, die mit %s getagt sind"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualisierungen mit %1$s getagt auf %2$s!"
@@ -722,8 +724,7 @@ msgstr "Kein solcher Anhang."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Kein Nutzername."
@@ -735,7 +736,7 @@ msgstr "Keine Größe."
msgid "Invalid size."
msgstr "Ungültige Größe."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -753,30 +754,30 @@ msgid "User without matching profile"
msgstr "Benutzer ohne passendes Profil"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Avatar-Einstellungen"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Vorschau"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Löschen"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Hochladen"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Zuschneiden"
@@ -785,7 +786,7 @@ msgid "Pick a square area of the image to be your avatar"
msgstr ""
"Wähle eine quadratische Fläche aus dem Bild, um dein Avatar zu speichern"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Daten verloren."
@@ -817,22 +818,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nein"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Diesen Benutzer freigeben"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Diesen Benutzer blockieren"
@@ -840,39 +841,43 @@ msgstr "Diesen Benutzer blockieren"
msgid "Failed to save block information."
msgstr "Konnte Blockierungsdaten nicht speichern."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Keine derartige Gruppe."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s blockierte Benutzerprofile"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s blockierte Benutzerprofile, Seite %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Liste der blockierten Benutzer in dieser Gruppe."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Sperrung des Nutzers für die Gruppe aufheben."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Freigeben"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Diesen Benutzer freigeben"
@@ -929,7 +934,7 @@ msgid "Conversation"
msgstr "Unterhaltung"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Nachrichten"
@@ -951,7 +956,7 @@ msgstr "Du bist kein Mitglied dieser Gruppe."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Es gab ein Problem mit deinem Sessiontoken."
@@ -977,12 +982,13 @@ msgstr "Diese Nachricht nicht löschen"
msgid "Delete this application"
msgstr "Nachricht löschen"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Nicht angemeldet."
@@ -1011,7 +1017,7 @@ msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
msgid "Do not delete this notice"
msgstr "Diese Nachricht nicht löschen"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Nachricht löschen"
@@ -1027,18 +1033,18 @@ msgstr "Du kannst nur lokale Benutzer löschen."
msgid "Delete user"
msgstr "Benutzer löschen"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Diesen Benutzer löschen"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1141,6 +1147,18 @@ msgstr "Standard-Design wiederherstellen"
msgid "Reset back to default"
msgstr "Standard wiederherstellen"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Speichern"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Design speichern"
@@ -1159,68 +1177,58 @@ msgid "No such document \"%s\""
msgstr "Unbekanntes Dokument."
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
-msgstr "Sonstige Optionen"
+msgstr "Anwendung bearbeiten"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
+msgstr "Du musst angemeldet sein, um eine Anwendung zu bearbeiten."
#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Unbekannte Nachricht."
+msgstr "Anwendung nicht bekannt."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Benutze dieses Formular, um die Gruppe zu bearbeiten."
+msgstr "Benutze dieses Formular, um die Anwendung zu bearbeiten."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Gleiches Passwort wie zuvor. Pflichteingabe."
+msgstr "Name ist erforderlich."
#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
msgid "Name is too long (max 255 chars)."
-msgstr "Der vollständige Name ist zu lang (maximal 255 Zeichen)."
+msgstr "Der Name ist zu lang (maximal 255 Zeichen)."
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
-msgstr "Nutzername wird bereits verwendet. Suche dir einen anderen aus."
+msgstr "Der Name wird bereits verwendet. Suche dir einen anderen aus."
#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
msgid "Description is required."
-msgstr "Beschreibung"
+msgstr "Beschreibung ist erforderlich."
#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "Homepage ist zu lang."
#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
msgid "Source URL is not valid."
msgstr ""
"Homepage ist keine gültige URL. URL’s müssen ein Präfix wie http enthalten."
#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Organisation ist erforderlich. (Pflichtangabe)"
#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
msgid "Organization is too long (max 255 chars)."
-msgstr "Der eingegebene Aufenthaltsort ist zu lang (maximal 255 Zeichen)."
+msgstr "Die angegebene Organisation ist zu lang (maximal 255 Zeichen)."
#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Homepage der Organisation ist erforderlich (Pflichtangabe)."
#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
@@ -1244,35 +1252,34 @@ msgstr "Gruppe %s bearbeiten"
msgid "You must be logged in to create a group."
msgstr "Du musst angemeldet sein, um eine Gruppe zu erstellen."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Du musst ein Administrator sein, um die Gruppe zu bearbeiten"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Benutze dieses Formular, um die Gruppe zu bearbeiten."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "Die Beschreibung ist zu lang (max. %d Zeichen)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Konnte Gruppe nicht aktualisieren."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Konnte keinen Favoriten erstellen."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Einstellungen gespeichert."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
msgstr "E-Mail-Einstellungen"
@@ -1311,9 +1318,8 @@ msgid "Cancel"
msgstr "Abbrechen"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "E-Mail-Adressen"
+msgstr "E-Mail-Adresse"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1391,7 +1397,7 @@ msgid "Cannot normalize that email address"
msgstr "Konnte diese E-Mail-Adresse nicht normalisieren"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ungültige E-Mail-Adresse."
@@ -1578,6 +1584,25 @@ msgstr "Datei nicht gefunden."
msgid "Cannot read file."
msgstr "Datei konnte nicht gelesen werden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ungültige Größe."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Nutzer ist bereits ruhig gestellt."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1607,7 +1632,7 @@ msgstr "Dieser Nutzer ist bereits von der Gruppe gesperrt"
msgid "User is not a member of group."
msgstr "Nutzer ist kein Mitglied dieser Gruppe."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Benutzerzugang zu der Gruppe blockieren"
@@ -1640,30 +1665,30 @@ msgstr "Keine ID"
msgid "You must be logged in to edit a group."
msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Gruppen-Design"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Konnte dein Design nicht aktualisieren."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Design-Einstellungen gespeichert."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Gruppen-Logo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1671,63 +1696,69 @@ msgstr ""
"Du kannst ein Logo für Deine Gruppe hochladen. Die maximale Dateigröße ist %"
"s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Benutzer ohne passendes Profil"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Wähle eine quadratische Fläche aus dem Bild, um das Logo zu speichern."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo aktualisiert."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Aktualisierung des Logos fehlgeschlagen."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s Gruppen-Mitglieder"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "%s Gruppen-Mitglieder, Seite %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Liste der Benutzer in dieser Gruppe."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blockieren"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Benutzer zu einem Admin dieser Gruppe ernennen"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Zum Admin ernennen"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Diesen Benutzer zu einem Admin ernennen"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s Zeitleiste"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Aktualisierungen von %1$s auf %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppen"
@@ -1990,16 +2021,19 @@ msgstr ""
"Wenn du möchtest kannst du zu der Einladung eine persönliche Nachricht "
"anfügen."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Senden"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s hat Dich eingeladen, auch bei %2$s mitzumachen."
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2059,7 +2093,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Du musst angemeldet sein, um Mitglied einer Gruppe zu werden."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Kein Nutzername."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s ist der Gruppe %s beigetreten"
@@ -2068,11 +2107,11 @@ msgstr "%s ist der Gruppe %s beigetreten"
msgid "You must be logged in to leave a group."
msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Du bist kein Mitglied dieser Gruppe."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s hat die Gruppe %s verlassen"
@@ -2090,8 +2129,7 @@ msgid "Error setting user. You are probably not authorized."
msgstr ""
"Fehler beim setzen des Benutzers. Du bist vermutlich nicht autorisiert."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Anmelden"
@@ -2291,9 +2329,8 @@ msgid "You must be logged in to list your applications."
msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Sonstige Optionen"
+msgstr "OAuth-Anwendungen"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2347,8 +2384,8 @@ msgstr "Content-Typ "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@@ -2386,7 +2423,7 @@ msgstr "Profil-Einstellungen ansehen"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Prifil-Designs anzeigen oder verstecken."
#: actions/othersettings.php:153
msgid "URL shortening service is too long (max 50 chars)."
@@ -2492,7 +2529,8 @@ msgstr "Konnte neues Passwort nicht speichern"
msgid "Password saved."
msgstr "Passwort gespeichert."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2525,7 +2563,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ungültiger SSL-Server. Die maximale Länge ist 255 Zeichen."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Seite"
@@ -2535,7 +2572,7 @@ msgstr "Server"
#: actions/pathsadminpanel.php:238
msgid "Site's server hostname."
-msgstr ""
+msgstr "Server Name der Seite"
#: actions/pathsadminpanel.php:242
msgid "Path"
@@ -2595,15 +2632,15 @@ msgstr "Avatarverzeichnis"
#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
-msgstr ""
+msgstr "Hintergrundbilder"
#: actions/pathsadminpanel.php:305
msgid "Background server"
-msgstr ""
+msgstr "Server für Hintergrundbilder"
#: actions/pathsadminpanel.php:309
msgid "Background path"
-msgstr ""
+msgstr "Pfad zu den Hintergrundbildern"
#: actions/pathsadminpanel.php:313
msgid "Background directory"
@@ -2613,7 +2650,7 @@ msgstr "Hintergrund Verzeichnis"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nie"
@@ -2665,20 +2702,20 @@ msgid "Not a valid people tag: %s"
msgstr "Ungültiger Personen-Tag: %s"
#: actions/peopletag.php:144
-#, fuzzy, php-format
+#, php-format
msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Benutzer die sich selbst mit %s getagged haben - Seite %d"
+msgstr "Benutzer die sich selbst mit %1$s getagged haben - Seite %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ungültiger Nachrichteninhalt"
-#: actions/postnotice.php:90
-#, fuzzy, php-format
+#: actions/postnotice.php:101
+#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
-"Die Nachrichtenlizenz '%s' ist nicht kompatibel mit der Lizenz der Seite '%"
-"s'."
+"Die Nachrichtenlizenz '%1$s' ist nicht kompatibel mit der Lizenz der Seite '%"
+"2$s'."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2700,7 +2737,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 Kleinbuchstaben oder Ziffern, keine Sonder- oder Leerzeichen"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Vollständiger Name"
@@ -2729,7 +2766,7 @@ msgid "Bio"
msgstr "Biografie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2741,7 +2778,7 @@ msgstr "Wo du bist, beispielsweise „Stadt, Gebiet, Land“"
#: actions/profilesettings.php:138
msgid "Share my current location when posting notices"
-msgstr ""
+msgstr "Teile meine aktuelle Position wenn ich Nachrichten sende"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
@@ -2756,7 +2793,7 @@ msgstr ""
"Tags über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas oder "
"Leerzeichen getrennt"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Sprache"
@@ -2784,7 +2821,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Die Biografie ist zu lang (max. %d Zeichen)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Keine Zeitzone ausgewählt."
@@ -2797,75 +2834,77 @@ msgstr "Die eingegebene Sprache ist zu lang (maximal 50 Zeichen)"
msgid "Invalid tag: \"%s\""
msgstr "Ungültiger Tag: „%s“"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Autosubscribe konnte nicht aktiviert werden."
-#: actions/profilesettings.php:359
-#, fuzzy
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
-msgstr "Konnte Tags nicht speichern."
+msgstr "Konnte Positions-Einstellungen nicht speichern."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Konnte Profil nicht speichern."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Konnte Tags nicht speichern."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Einstellungen gespeichert."
#: actions/public.php:83
#, php-format
msgid "Beyond the page limit (%s)"
-msgstr ""
+msgstr "Jenseits des Seitenlimits (%s)"
#: actions/public.php:92
msgid "Could not retrieve public stream."
msgstr "Konnte öffentlichen Stream nicht abrufen."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Öffentliche Zeitleiste, Seite %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Öffentliche Zeitleiste"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed des öffentlichen Streams (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed des öffentlichen Streams (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Feed des öffentlichen Streams (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
+"Dies ist die öffentliche Zeitlinie von %%site.name%% es wurde allerdings "
+"noch nichts gepostet."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
-msgstr ""
+msgstr "Sei der erste der etwas schreibt!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2874,7 +2913,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2898,6 +2937,8 @@ msgstr "Das sind die beliebtesten Tags auf %s "
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
msgstr ""
+"Bis jetzt hat noch niemand eine Nachricht mit dem Tag [hashtag](%%doc.tags%"
+"%) gepostet."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
@@ -3048,8 +3089,7 @@ msgstr "Entschuldigung, ungültiger Bestätigungscode."
msgid "Registration successful"
msgstr "Registrierung erfolgreich"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrieren"
@@ -3091,7 +3131,7 @@ msgid "Same as password above. Required."
msgstr "Gleiches Passwort wie zuvor. Pflichteingabe."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-Mail"
@@ -3200,7 +3240,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Profil-URL bei einem anderen kompatiblen Microbloggingdienst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonnieren"
@@ -3238,7 +3278,7 @@ msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
msgid "You already repeated that notice."
msgstr "Du hast diesen Benutzer bereits blockiert."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Erstellt"
@@ -3248,33 +3288,33 @@ msgstr "Erstellt"
msgid "Repeated!"
msgstr "Erstellt"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Antworten an %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Antworten an %1$s, Seite %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Feed der Antworten an %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Feed der Antworten an %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Feed der Nachrichten von %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3283,14 +3323,14 @@ msgstr ""
"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
"gepostet."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3305,6 +3345,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Antworten an %1$s auf %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kannst Nutzer dieser Seite nicht ruhig stellen."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Benutzer ohne passendes Profil"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3319,8 +3369,9 @@ msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
msgid "User is already sandboxed."
msgstr "Dieser Benutzer hat dich blockiert."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3345,8 +3396,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Site-Einstellungen speichern"
@@ -3366,9 +3417,8 @@ msgstr ""
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
-#, fuzzy
msgid "Name"
-msgstr "Nutzername"
+msgstr "Name"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
@@ -3380,8 +3430,8 @@ msgstr "Seitenerstellung"
msgid "Description"
msgstr "Beschreibung"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiken"
@@ -3443,35 +3493,35 @@ msgstr "%ss favorisierte Nachrichten"
msgid "Could not retrieve favorite notices."
msgstr "Konnte Favoriten nicht abrufen."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed der Freunde von %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed der Freunde von %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed der Freunde von %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3479,9 +3529,9 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
-msgstr ""
+msgstr "Dies ist ein Weg Dinge zu teilen die dir gefallen."
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
@@ -3493,67 +3543,67 @@ msgstr "%s Gruppe"
msgid "%1$s group, page %2$d"
msgstr "%s Gruppen-Mitglieder, Seite %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Gruppenprofil"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Nachricht"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Gruppenaktionen"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Nachrichtenfeed der Gruppe %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Postausgang von %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Mitglieder"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Kein)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle Mitglieder"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Erstellt"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3563,7 +3613,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3576,7 +3626,7 @@ msgstr ""
"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
"kurze Nachrichten über Ihr Leben und Interessen. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratoren"
@@ -3681,164 +3731,150 @@ msgstr ""
"Software [StatusNet](http://status.net/). "
#: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Antworten an %s"
+msgstr "Wiederholung von %s"
#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
msgid "You cannot silence users on this site."
-msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+msgstr "Du kannst Nutzer dieser Seite nicht ruhig stellen."
#: actions/silence.php:72
-#, fuzzy
msgid "User is already silenced."
-msgstr "Dieser Benutzer hat dich blockiert."
+msgstr "Nutzer ist bereits ruhig gestellt."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Grundeinstellungen für diese StatusNet Seite."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "Der Seiten Name darf nicht leer sein."
-#: actions/siteadminpanel.php:140
-#, fuzzy
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
-msgstr "Du musst eine gültige E-Mail-Adresse haben"
+msgstr "Du musst eine gültige E-Mail-Adresse haben."
-#: actions/siteadminpanel.php:158
-#, fuzzy, php-format
+#: actions/siteadminpanel.php:159
+#, php-format
msgid "Unknown language \"%s\"."
msgstr "Unbekannte Sprache „%s“"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Minimale Textlänge ist 140 Zeichen."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
-#, fuzzy
+#: actions/siteadminpanel.php:224
msgid "Site name"
-msgstr "Seitennachricht"
+msgstr "Seitenname"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "Der Name deiner Seite, sowas wie \"DeinUnternehmen Mircoblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakt-E-Mail-Adresse für Deine Site."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale Ansichten"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Bevorzugte Sprache"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequenz"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Seitennachricht"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Neue Nachricht"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Konnte Twitter-Einstellungen nicht speichern."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Seitennachricht"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Seitennachricht"
#: actions/smssettings.php:58
#, fuzzy
@@ -3943,19 +3979,90 @@ msgstr ""
msgid "No code entered"
msgstr "Kein Code eingegeben"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Hauptnavigation"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequenz"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Site-Einstellungen speichern"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du hast dieses Profil nicht abonniert."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Konnte Abonnement nicht erstellen."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Kein lokaler Benutzer."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Datei nicht gefunden."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Du hast dieses Profil nicht abonniert."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonniert"
@@ -3965,9 +4072,9 @@ msgid "%s subscribers"
msgstr "%s Abonnenten"
#: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "%s Abonnenten, Seite %d"
+msgstr "%1$s Abonnenten, Seite %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
@@ -4006,9 +4113,9 @@ msgid "%s subscriptions"
msgstr "%s Abonnements"
#: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "%s Abonnements, Seite %d"
+msgstr "%1$s Abonnements, Seite %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
@@ -4019,7 +4126,7 @@ msgstr "Dies sind die Leute, deren Nachrichten du liest."
msgid "These are the people whose notices %s listens to."
msgstr "Dies sind die Leute, deren Nachrichten %s liest."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4029,38 +4136,38 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
-#, fuzzy, php-format
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
+#, php-format
msgid "%s is not listening to anyone."
-msgstr "%1$s liest ab sofort "
+msgstr "%s hat niemanden abonniert."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
-#, fuzzy, php-format
+#: actions/tag.php:69
+#, php-format
msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Benutzer die sich selbst mit %s getagged haben - Seite %d"
+msgstr "Mit %1$s gekennzeichnete Nachrichten, Seite %2$d"
-#: actions/tag.php:86
-#, fuzzy, php-format
+#: actions/tag.php:87
+#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Feed der Nachrichten von %s"
+msgstr "Nachrichten Feed für Tag %s (RSS 1.0)"
-#: actions/tag.php:92
-#, fuzzy, php-format
+#: actions/tag.php:93
+#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Feed der Nachrichten von %s"
+msgstr "Nachrichten Feed für Tag %s (RSS 2.0)"
-#: actions/tag.php:98
-#, fuzzy, php-format
+#: actions/tag.php:99
+#, php-format
msgid "Notice feed for tag %s (Atom)"
-msgstr "Feed der Nachrichten von %s"
+msgstr "Nachrichten Feed für Tag %s (Atom)"
#: actions/tagother.php:39
#, fuzzy
@@ -4114,7 +4221,7 @@ msgstr ""
msgid "No such tag."
msgstr "Tag nicht vorhanden."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-Methode im Aufbau."
@@ -4128,9 +4235,8 @@ msgid "User is not sandboxed."
msgstr "Dieser Benutzer hat dich blockiert."
#: actions/unsilence.php:72
-#, fuzzy
msgid "User is not silenced."
-msgstr "Benutzer hat kein Profil."
+msgstr "Der Benutzer ist nicht ruhig gestellt."
#: actions/unsubscribe.php:77
msgid "No profile id in request."
@@ -4140,7 +4246,7 @@ msgstr "Keine Profil-ID in der Anfrage."
msgid "Unsubscribed"
msgstr "Abbestellt"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, fuzzy, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4148,78 +4254,74 @@ msgstr ""
"Die Nachrichtenlizenz '%s' ist nicht kompatibel mit der Lizenz der Seite '%"
"s'."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Benutzer"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Nutzer Einstellungen dieser StatusNet Seite."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Das Zeichenlimit der Biografie muss numerisch sein!"
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Willkommens-Nachricht ungültig. Maximale Länge sind 255 Zeichen."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Neue Nutzer"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Willkommens-Nachricht für neue Nutzer (maximal 255 Zeichen)."
-#: actions/useradminpanel.php:240
-#, fuzzy
+#: actions/useradminpanel.php:241
msgid "Default subscription"
-msgstr "Alle Abonnements"
+msgstr "Standard Abonnement"
-#: actions/useradminpanel.php:241
-#, fuzzy
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Abonniere automatisch alle Kontakte, die mich abonnieren (sinnvoll für Nicht-"
-"Menschen)"
+msgstr "Neue Nutzer abonnieren automatisch diesen Nutzer"
-#: actions/useradminpanel.php:250
-#, fuzzy
+#: actions/useradminpanel.php:251
msgid "Invitations"
-msgstr "Einladung(en) verschickt"
+msgstr "Einladungen"
-#: actions/useradminpanel.php:255
-#, fuzzy
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
-msgstr "Einladung(en) verschickt"
+msgstr "Einladungen aktivieren"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "Ist es Nutzern erlaubt neue Nutzer einzuladen."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
@@ -4245,7 +4347,6 @@ msgstr "Akzeptieren"
#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
-#, fuzzy
msgid "Subscribe to this user"
msgstr "Abonniere diesen Benutzer"
@@ -4350,16 +4451,22 @@ msgstr "%s Gruppen-Mitglieder, Seite %d"
msgid "Search for more groups"
msgstr "Suche nach weiteren Gruppen"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s ist in keiner Gruppe Mitglied."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Aktualisierungen von %1$s auf %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4403,7 +4510,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Eigene"
@@ -4445,6 +4552,11 @@ msgstr "Konnte Gruppe nicht aktualisieren."
msgid "Group leave failed."
msgstr "Gruppenprofil"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Konnte Gruppe nicht aktualisieren."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4463,27 +4575,27 @@ msgstr "Konnte Nachricht nicht einfügen."
msgid "Could not update message with new URI."
msgstr "Konnte Nachricht nicht mit neuer URI versehen."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4492,43 +4604,79 @@ msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
"Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Datenbankfehler beim Einfügen der Antwort: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Bereits abonniert!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Dieser Benutzer hat dich blockiert."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Nicht abonniert!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Konnte Abonnement nicht löschen."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Konnte Abonnement nicht löschen."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Konnte Abonnement nicht löschen."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Herzlich willkommen bei %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Konnte Gruppe nicht erstellen."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Konnte Abonnement nicht erstellen."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Ändern der Profileinstellungen"
@@ -4567,127 +4715,189 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Seite ohne Titel"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Hauptnavigation"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Startseite"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persönliches Profil und Freundes-Zeitleiste"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Eigene"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Ändere deine E-Mail, dein Avatar, Passwort, Profil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Verbinden"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Konnte nicht zum Server umleiten: %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Verbinden"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Hauptnavigation"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Einladen"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Lade Freunde und Kollegen ein dir auf %s zu folgen"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Abmelden"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Einladen"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Von der Seite abmelden"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Abmelden"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Neues Konto erstellen"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrieren"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Auf der Seite anmelden"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hilfe"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Anmelden"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hilf mir!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Suchen"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hilfe"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Suche nach Leuten oder Text"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Suchen"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Seitennachricht"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale Ansichten"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Neue Nachricht"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Unternavigation"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hilfe"
+
+#: lib/action.php:754
msgid "About"
msgstr "Ãœber"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "AGB"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privatsphäre"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Quellcode"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Stups"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4696,12 +4906,12 @@ msgstr ""
"**%%site.name%%** ist ein Microbloggingdienst von [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ist ein Microbloggingdienst."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4712,102 +4922,156 @@ msgstr ""
"(Version %s) betrieben, die unter der [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
#, fuzzy
msgid "All "
msgstr "Alle "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "Lizenz."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Seitenerstellung"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Später"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Vorher"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Registrierung nicht gestattet"
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() noch nicht implementiert."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() noch nicht implementiert."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Konnte die Design Einstellungen nicht löschen."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Bestätigung der E-Mail-Adresse"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Seite"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS-Konfiguration"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Eigene"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS-Konfiguration"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Benutzer"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS-Konfiguration"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS-Konfiguration"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS-Konfiguration"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Seitennachricht"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS-Konfiguration"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4902,12 +5166,12 @@ msgstr "Nachrichten in denen dieser Anhang erscheint"
msgid "Tags for this attachment"
msgstr "Tags für diesen Anhang"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Passwort geändert"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Passwort geändert"
@@ -5057,81 +5321,90 @@ msgstr "Problem beim Speichern der Nachricht."
msgid "Specify the name of the user to subscribe to"
msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Unbekannter Benutzer."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "%s abonniert"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Gib den Namen des Benutzers ein, den du nicht mehr abonnieren möchtest"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s nicht mehr abonniert"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Befehl noch nicht implementiert."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Benachrichtigung deaktiviert."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Konnte Benachrichtigung nicht deaktivieren."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Benachrichtigung aktiviert."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Konnte Benachrichtigung nicht aktivieren."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "%s nicht mehr abonniert"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Du hast dieses Profil nicht abonniert."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du hast diese Benutzer bereits abonniert:"
msgstr[1] "Du hast diese Benutzer bereits abonniert:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Niemand hat Dich abonniert."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren."
msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Du bist in keiner Gruppe Mitglied."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du bist Mitglied dieser Gruppe:"
msgstr[1] "Du bist Mitglied dieser Gruppen:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5145,6 +5418,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5172,19 +5446,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Keine Konfigurationsdatei gefunden."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Auf der Seite anmelden"
@@ -5245,19 +5519,19 @@ msgstr "Zu Favoriten hinzufügen"
#: 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"
@@ -5289,6 +5563,11 @@ msgstr "Wähle einen Tag, um die Liste einzuschränken"
msgid "Go"
msgstr "Los geht's"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5324,12 +5603,12 @@ msgid "Blocked"
msgstr "Blockiert"
#: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked users"
-msgstr "Benutzer blockieren"
+msgstr "in %s blockierte Nutzer"
#: lib/groupnav.php:108
-#, fuzzy, php-format
+#, php-format
msgid "Edit %s group properties"
msgstr "%s Gruppeneinstellungen bearbeiten"
@@ -5338,14 +5617,14 @@ msgid "Logo"
msgstr "Logo"
#: lib/groupnav.php:114
-#, fuzzy, php-format
+#, php-format
msgid "Add or edit %s logo"
msgstr "%s Logo hinzufügen oder bearbeiten"
#: lib/groupnav.php:120
-#, fuzzy, php-format
+#, php-format
msgid "Add or edit %s design"
-msgstr "%s Logo hinzufügen oder bearbeiten"
+msgstr "%s Design hinzufügen oder bearbeiten"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
@@ -5356,7 +5635,7 @@ msgid "Groups with most posts"
msgstr "Gruppen mit den meisten Beiträgen"
#: lib/grouptagcloudsection.php:56
-#, fuzzy, php-format
+#, php-format
msgid "Tags in %s group's notices"
msgstr "Tags in den Nachrichten der Gruppe %s"
@@ -5381,30 +5660,30 @@ msgstr "Systemfehler beim hochladen der Datei."
msgid "Not an image or corrupt file."
msgstr "Kein Bild oder defekte Datei."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Bildformat wird nicht unterstützt."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Daten verloren."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Unbekannter Dateityp"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
-msgstr ""
+msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
-msgstr ""
+msgstr "kB"
#: lib/jabber.php:220
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
#: lib/jabber.php:400
#, fuzzy, php-format
@@ -5420,14 +5699,12 @@ msgid "Leave"
msgstr "Verlassen"
#: lib/logingroupnav.php:80
-#, fuzzy
msgid "Login with a username and password"
-msgstr "Anmelden mit einem Benutzernamen und Passwort"
+msgstr "Mit Nutzernamen und Passwort anmelden"
#: lib/logingroupnav.php:86
-#, fuzzy
msgid "Sign up for a new account"
-msgstr "Für ein neues Konto registrieren"
+msgstr "Registriere ein neues Nutzerkonto"
#: lib/mail.php:172
msgid "Email address confirmation"
@@ -5495,11 +5772,9 @@ msgstr ""
"$s ändern.\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr ""
-"Biografie: %s\n"
-"\n"
+msgstr "Biografie: %s"
#: lib/mail.php:286
#, php-format
@@ -5665,8 +5940,7 @@ msgstr ""
"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir "
"Nachrichten schicken, die nur Du sehen kannst."
-#: lib/mailbox.php:227 lib/noticelist.php:477
-#, fuzzy
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "von"
@@ -5687,39 +5961,45 @@ msgid "Sorry, no incoming email allowed."
msgstr "Sorry, keinen eingehenden E-Mails gestattet."
#: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
msgid "Unsupported message type: %s"
-msgstr "Bildformat wird nicht unterstützt."
+msgstr "Nachrichten-Typ %s wird nicht unterstützt."
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
msgstr ""
+"Beim Speichern der Datei trat ein Datenbank Fehler auf. Bitte versuche es "
+"noch einmal."
#: lib/mediafile.php:142
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
msgstr ""
+"Die Größe der hoch geladenen Datei überschreitet die upload_max_filesize "
+"Angabe in der php.ini."
#: lib/mediafile.php:147
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form."
msgstr ""
+"Die Größe der hoch geladenen Datei überschreitet die MAX_FILE_SIZE Angabe, "
+"die im HTML Formular angegeben wurde."
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "Die Datei wurde nur teilweise auf den Server geladen."
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "Kein temporäres Verzeichnis gefunden."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr ""
+msgstr "Konnte die Datei nicht auf die Festplatte schreiben."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
-msgstr ""
+msgstr "Upload der Datei wurde wegen der Dateiendung gestoppt."
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota."
@@ -5745,7 +6025,6 @@ msgid "%s is not a supported file type on this server."
msgstr ""
#: lib/messageform.php:120
-#, fuzzy
msgid "Send a direct notice"
msgstr "Versende eine direkte Nachricht"
@@ -5754,14 +6033,18 @@ msgid "To"
msgstr "An"
#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
msgid "Available characters"
msgstr "Verfügbare Zeichen"
-#: lib/noticeform.php:160
+#: lib/messageform.php:178 lib/noticeform.php:236
#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Senden"
+
+#: lib/noticeform.php:160
msgid "Send a notice"
-msgstr "Nachricht versenden"
+msgstr "Nachricht senden"
#: lib/noticeform.php:173
#, php-format
@@ -5777,14 +6060,12 @@ msgid "Attach a file"
msgstr ""
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
-msgstr "Konnte Tags nicht speichern."
+msgstr "Teile meinen Aufenthaltsort"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
-msgstr "Konnte Tags nicht speichern."
+msgstr "Teile meinen Aufenthaltsort nicht"
#: lib/noticeform.php:216
msgid ""
@@ -5792,53 +6073,50 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
-#, fuzzy
+#: lib/noticelist.php:430
msgid "N"
-msgstr "Nein"
+msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
-msgstr ""
+msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
-msgstr ""
+msgstr "O"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
-msgstr ""
+msgstr "W"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "im Zusammenhang"
-#: lib/noticelist.php:572
-#, fuzzy
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Erstellt"
+msgstr "Wiederholt von"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Auf diese Nachricht antworten"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Antworten"
-#: lib/noticelist.php:641
-#, fuzzy
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Nachricht gelöscht."
+msgstr "Nachricht wiederholt"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5869,11 +6147,6 @@ msgstr "Fehler beim Einfügen des entfernten Profils"
msgid "Duplicate notice"
msgstr "Notiz löschen"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Konnte neues Abonnement nicht eintragen."
@@ -5907,7 +6180,7 @@ msgid "Your sent messages"
msgstr "Deine gesendeten Nachrichten"
#: lib/personaltagcloudsection.php:56
-#, fuzzy, php-format
+#, php-format
msgid "Tags in %s's notices"
msgstr "Tags in %ss Nachrichten"
@@ -5916,7 +6189,7 @@ msgstr "Tags in %ss Nachrichten"
msgid "Unknown"
msgstr "Unbekannter Befehl"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnements"
@@ -5924,23 +6197,23 @@ msgstr "Abonnements"
msgid "All subscriptions"
msgstr "Alle Abonnements"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnenten"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alle Abonnenten"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Nutzer ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Mitglied seit"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle Gruppen"
@@ -5974,28 +6247,29 @@ msgid "Popular"
msgstr "Beliebt"
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "Auf diese Nachricht antworten"
+msgstr "Diese Nachricht wiederholen?"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Auf diese Nachricht antworten"
+msgstr "Diese Nachricht wiederholen"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Diesen Nutzer von der Gruppe sperren"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
#: lib/sandboxform.php:67
-#, fuzzy
msgid "Sandbox"
-msgstr "Posteingang"
+msgstr "Spielwiese"
#: lib/sandboxform.php:78
-#, fuzzy
msgid "Sandbox this user"
-msgstr "Benutzer freigeben"
+msgstr "Diesen Nutzer auf die Spielwiese setzen"
#: lib/searchaction.php:120
msgid "Search site"
@@ -6005,6 +6279,10 @@ msgstr "Site durchsuchen"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Suchen"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6035,14 +6313,12 @@ msgid "More..."
msgstr ""
#: lib/silenceform.php:67
-#, fuzzy
msgid "Silence"
-msgstr "Seitennachricht"
+msgstr "Stummschalten"
#: lib/silenceform.php:78
-#, fuzzy
msgid "Silence this user"
-msgstr "Benutzer blockieren"
+msgstr "Nutzer verstummen lassen"
#: lib/subgroupnav.php:83
#, php-format
@@ -6059,35 +6335,14 @@ msgstr "Leute, die %s abonniert haben"
msgid "Groups %s is a member of"
msgstr "Gruppen in denen %s Mitglied ist"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Bereits abonniert!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Dieser Benutzer hat dich blockiert."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Konnte nicht abbonieren."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Die Gegenseite konnte Dich nicht abonnieren."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Nicht abonniert!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Konnte Abonnement nicht löschen."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Einladen"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Konnte Abonnement nicht löschen."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Lade Freunde und Kollegen ein dir auf %s zu folgen"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6109,19 +6364,17 @@ msgstr "Top-Schreiber"
#: lib/unsandboxform.php:69
msgid "Unsandbox"
-msgstr ""
+msgstr "Von Spielwiese freigeben"
#: lib/unsandboxform.php:80
-#, fuzzy
msgid "Unsandbox this user"
msgstr "Benutzer freigeben"
#: lib/unsilenceform.php:67
msgid "Unsilence"
-msgstr ""
+msgstr "Stummschalten aufheben"
#: lib/unsilenceform.php:78
-#, fuzzy
msgid "Unsilence this user"
msgstr "Benutzer freigeben"
@@ -6141,67 +6394,84 @@ msgstr "Avatar bearbeiten"
msgid "User actions"
msgstr "Benutzeraktionen"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Profil Einstellungen ändern"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
-msgstr ""
+msgstr "Bearbeiten"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Direkte Nachricht an Benutzer verschickt"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Nachricht"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
-msgstr ""
+msgstr "Moderieren"
+
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Benutzerprofil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratoren"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderieren"
-#: lib/util.php:870
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "vor einem Jahr"
@@ -6216,6 +6486,7 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s ist keine gültige Farbe! Verwenden Sie 3 oder 6 Hex-Zeichen."
#: lib/xmppmanager.php:402
-#, fuzzy, php-format
+#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Nachricht zu lang - maximal %d Zeichen erlaubt, du hast %d gesendet"
+msgstr ""
+"Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet."
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index 20365e04a..6b5c3973f 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -9,78 +9,85 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:30+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:10+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "ΠÏόσβαση"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Ρυθμίσεις OpenID"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "ΠεÏιγÏαφή"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr ""
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
+msgctxt "LABEL"
+msgid "Private"
msgstr ""
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-msgid "Closed"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
msgstr ""
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
msgstr ""
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Ρυθμίσεις OpenID"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "ΑποχώÏηση"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Δεν υπάÏχει τέτοια σελίδα"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -94,78 +101,87 @@ msgstr "Δεν υπάÏχει τέτοια σελίδα"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Κανένας τέτοιος χÏήστης."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s και οι φίλοι του/της"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s και οι φίλοι του/της"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Ροή φίλων του/της %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Ροή φίλων του/της %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Ροή φίλων του/της %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Εσείς και οι φίλοι σας"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -178,20 +194,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!"
@@ -225,8 +241,9 @@ msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr ""
@@ -251,7 +268,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -367,68 +384,68 @@ msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
msgid "Could not find target user."
msgstr "Απέτυχε η εÏÏεση οποιασδήποτε κατάστασης."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Το ψευδώνυμο Ï€Ïέπει να έχει μόνο πεζοÏÏ‚ χαÏακτήÏες και χωÏίς κενά."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Το ψευδώνυμο είναι ήδη σε χÏήση. Δοκιμάστε κάποιο άλλο."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr ""
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Η αÏχική σελίδα δεν είναι έγκυÏο URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Το ονοματεπώνυμο είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστο 255 χαÏακτ.)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Η πεÏιγÏαφή είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î· (μέγιστο %d χαÏακτ.)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Η τοποθεσία είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î· (μέγιστο 255 χαÏακτ.)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr ""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Το ψευδώνυμο είναι ήδη σε χÏήση. Δοκιμάστε κάποιο άλλο."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -439,15 +456,15 @@ msgstr ""
msgid "Group not found!"
msgstr "Η ομάδα δεν βÏέθηκε!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
@@ -456,7 +473,7 @@ msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏÎ
msgid "You are not a member of this group."
msgstr ""
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -488,7 +505,7 @@ msgstr "Μήνυμα"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -497,7 +514,7 @@ msgstr "Μήνυμα"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -531,7 +548,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -554,13 +571,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "ΛογαÏιασμός"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -638,23 +655,11 @@ msgstr ""
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "χÏονοδιάγÏαμμα του χÏήστη %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -680,17 +685,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr ""
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -706,8 +711,7 @@ msgstr ""
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr ""
@@ -719,7 +723,7 @@ msgstr ""
msgid "Invalid size."
msgstr ""
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr ""
@@ -736,30 +740,30 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Ρυθμίσεις του άβαταÏ"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "ΔιαγÏαφή"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr ""
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -767,7 +771,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -801,23 +805,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Όχι"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Îαι"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -825,40 +829,44 @@ msgstr ""
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s και οι φίλοι του/της"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr ""
@@ -915,7 +923,7 @@ msgid "Conversation"
msgstr "Συζήτηση"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -937,7 +945,7 @@ msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -963,12 +971,13 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
msgid "Delete this application"
msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr ""
@@ -997,7 +1006,7 @@ msgstr "Είσαι σίγουÏος ότι θες να διαγÏάψεις αυ
msgid "Do not delete this notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -1014,18 +1023,18 @@ msgstr ""
msgid "Delete user"
msgstr "ΔιαγÏαφή χÏήστη"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "ΔιαγÏάψτε αυτόν τον χÏήστη"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1129,6 +1138,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr ""
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1228,31 +1249,31 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "Το βιογÏαφικό είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστο 140 χαÏακτ.)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr ""
@@ -1373,7 +1394,7 @@ msgid "Cannot normalize that email address"
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεÏθυνσης"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1565,6 +1586,24 @@ msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
msgid "Cannot read file."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Μήνυμα"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1594,7 +1633,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1626,95 +1665,101 @@ msgstr ""
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Οι Ï€Ïοτιμήσεις αποθηκεÏτηκαν"
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr ""
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "ΑποσÏνδεση"
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr ""
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "χÏονοδιάγÏαμμα του χÏήστη %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -1954,16 +1999,18 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr ""
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1998,7 +2045,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Μήνυμα"
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2007,11 +2059,11 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr ""
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr ""
@@ -2028,8 +2080,7 @@ msgstr "Λάθος όνομα χÏήστη ή κωδικός"
msgid "Error setting user. You are probably not authorized."
msgstr ""
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ΣÏνδεση"
@@ -2277,8 +2328,8 @@ msgstr "ΣÏνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2424,7 +2475,8 @@ msgstr "ΑδÏνατη η αποθήκευση του νέου κωδικοÏ"
msgid "Password saved."
msgstr "Ο κωδικός αποθηκεÏτηκε."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2457,7 +2509,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2550,7 +2601,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "ΑποχώÏηση"
@@ -2605,11 +2656,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2632,7 +2683,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 μικÏά γÏάμματα ή αÏιθμοί, χωÏίς σημεία στίξης ή κενά"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Ονοματεπώνυμο"
@@ -2661,7 +2712,7 @@ msgid "Bio"
msgstr "ΒιογÏαφικό"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2686,7 +2737,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2715,7 +2766,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Το βιογÏαφικό είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστο 140 χαÏακτ.)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2728,25 +2779,26 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr ""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Απέτυχε η ενημέÏωση του χÏήστη για την αυτόματη συνδÏομή."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Απέτυχε η αποθήκευση του Ï€Ïοφίλ."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr ""
@@ -2759,46 +2811,46 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr ""
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Δημόσια Ïοή %s"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2807,7 +2859,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2978,8 +3030,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -3018,7 +3069,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3123,7 +3174,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3162,7 +3213,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "ΔημιουÏγία"
@@ -3172,47 +3223,47 @@ msgstr "ΔημιουÏγία"
msgid "Repeated!"
msgstr "ΔημιουÏγία"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr ""
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr ""
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Ροή φίλων του/της %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Ροή φίλων του/της %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Ροή φίλων του/της %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3224,6 +3275,15 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3237,8 +3297,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3262,8 +3323,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Ρυθμίσεις OpenID"
@@ -3296,8 +3357,8 @@ msgstr "ΠÏοσκλήσεις"
msgid "Description"
msgstr "ΠεÏιγÏαφή"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3358,35 +3419,35 @@ msgstr "%s και οι φίλοι του/της"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Ροή φίλων του/της %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Ροή φίλων του/της %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Ροή φίλων του/της %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3394,7 +3455,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3408,68 +3469,68 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Μέλη"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "ΔημιουÏγημένος"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3479,7 +3540,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3488,7 +3549,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ΔιαχειÏιστές"
@@ -3599,147 +3660,134 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεÏθυνσης"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Η διεÏθυνση του εισεÏχόμενου email αφαιÏέθηκε."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Τοπικός"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "ΔιαγÏαφή μηνÏματος"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "ΔιαγÏαφή μηνÏματος"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ρυθμίσεις OpenID"
#: actions/smssettings.php:58
#, fuzzy
@@ -3839,20 +3887,90 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Επιβεβαίωση διεÏθυνσης email"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Ρυθμίσεις OpenID"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: actions/subscribe.php:55
-msgid "Not a local user."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr ""
@@ -3912,7 +4030,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3922,35 +4040,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr ""
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr ""
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Ροή φίλων του/της %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -4001,7 +4119,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Η μέθοδος του ΑΡΙ είναι υπό κατασκευή."
@@ -4026,80 +4144,81 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr ""
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Îέοι χÏήστες"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Όλες οι συνδÏομές"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Αυτόματα γίνε συνδÏομητής σε όσους γίνονται συνδÏομητές σε μένα (χÏήση "
"κυÏίως από λογισμικό και όχι ανθÏώπους)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "ΠÏοσκλήσεις"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4220,16 +4339,22 @@ msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏÎ
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4273,7 +4398,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "ΠÏοσωπικά"
@@ -4314,6 +4439,11 @@ msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
msgid "Group leave failed."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4331,66 +4461,102 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Σφάλμα βάσης δεδομένων κατά την εισαγωγή απάντησης: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Απέτυχε η συνδÏομή."
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Δεν ήταν δυνατή η δημιουÏγία ομάδας."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Αλλάξτε τις Ïυθμίσεις του Ï€Ïοφίλ σας"
@@ -4428,125 +4594,183 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "ΑÏχή"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "ΠÏοσωπικά"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "ΣÏνδεση"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Αλλάξτε τον κωδικό σας"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Αδυναμία ανακατεÏθηνσης στο διακομιστή: %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "ΣÏνδεση"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr ""
+msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ΔιαχειÏιστής"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "ΠÏοσκάλεσε φίλους και συναδέλφους σου να γίνουν μέλη στο %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "ΑποσÏνδεση"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Μήνυμα"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "ΑποσÏνδεση"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "ΔημιουÏγία ενός λογαÏιασμοÏ"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "ΠεÏιγÏαφή"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Βοήθεια"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ΣÏνδεση"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Βοηθήστε με!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr ""
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Βοήθεια"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Βοήθεια"
+
+#: lib/action.php:754
msgid "About"
msgstr "ΠεÏί"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Συχνές εÏωτήσεις"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Επικοινωνία"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, fuzzy, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4555,13 +4779,13 @@ msgstr ""
"To **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου) που "
"έφεÏε κοντά σας το [%%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, fuzzy, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
"Το **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου). "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4569,99 +4793,152 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "ΠÏοσωπικά"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "ΔιαγÏαφή μηνÏματος"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Επιβεβαίωση διεÏθυνσης email"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4752,12 +5029,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Ο κωδικός αποθηκεÏτηκε."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Ο κωδικός αποθηκεÏτηκε."
@@ -4909,82 +5186,92 @@ msgstr ""
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Κανένας τέτοιος χÏήστης."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Απέτυχε η συνδÏομή."
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Δεν είστε μέλος καμίας ομάδας."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ομάδες με τα πεÏισσότεÏα μέλη"
msgstr[1] "Ομάδες με τα πεÏισσότεÏα μέλη"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4998,6 +5285,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5025,20 +5313,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Ο κωδικός επιβεβαίωσης δεν βÏέθηκε."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5137,6 +5425,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5226,24 +5519,24 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5449,7 +5742,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "από"
@@ -5539,6 +5832,11 @@ msgstr ""
msgid "Available characters"
msgstr "Διαθέσιμοι χαÏακτήÏες"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr ""
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr ""
@@ -5572,48 +5870,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Επαναλαμβάνεται από"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Ρυθμίσεις OpenID"
@@ -5647,10 +5945,6 @@ msgstr ""
msgid "Duplicate notice"
msgstr "ΔιαγÏαφή μηνÏματος"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Απέτυχε η εισαγωγή νέας συνδÏομής."
@@ -5692,7 +5986,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5700,23 +5994,23 @@ msgstr ""
msgid "All subscriptions"
msgstr "Όλες οι συνδÏομές"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr ""
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Μέλος από"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5758,7 +6052,12 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
msgid "Repeat this notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5779,6 +6078,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5831,35 +6134,14 @@ msgstr ""
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Απέτυχε η συνδÏομή."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Απέτυχε η συνδÏομή."
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "ΠÏοσκάλεσε φίλους και συναδέλφους σου να γίνουν μέλη στο %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -5913,67 +6195,83 @@ msgstr ""
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "ΕπεξεÏγασία Ïυθμίσεων Ï€Ïοφίλ"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "ΕπεξεÏγασία"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Μήνυμα"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ΠÏοφίλ χÏήστη"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "ΔιαχειÏιστές"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index 0e7acedc0..cac1893e8 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -2,7 +2,6 @@
#
# Author@translatewiki.net: Bruce89
# Author@translatewiki.net: CiaranG
-# Author@translatewiki.net: Lockal
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -10,75 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:06:20+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:13+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Access"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Site access settings"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registration"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Private"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Invite only"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Private"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Make registration invitation only."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Closed"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Invite only"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Disable new registrations."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Save"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Closed"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Save access settings"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Save"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "No such page"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -92,53 +99,60 @@ msgstr "No such page"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "No such user."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s and friends, page %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s and friends"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed for friends of %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed for friends of %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed for friends of %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
"This is the timeline for %s and friends but no one has posted anything yet."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -147,7 +161,8 @@ msgstr ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -156,7 +171,7 @@ msgstr ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -165,7 +180,8 @@ msgstr ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "You and friends"
@@ -183,20 +199,20 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API method not found."
@@ -231,8 +247,9 @@ msgstr "Couldn't update user."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "User has no profile."
@@ -259,7 +276,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -369,68 +386,68 @@ msgstr "Could not determine source user."
msgid "Could not find target user."
msgstr "Could not find target user."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Nickname must have only lowercase letters and numbers, and no spaces."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Nickname already in use. Try another one."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Not a valid nickname."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Homepage is not a valid URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Full name is too long (max 255 chars)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Description is too long (max %d chars)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Location is too long (max 255 chars)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Too many aliases! Maximum %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Invalid alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias \"%s\" already in use. Try another one."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias can't be the same as nickname."
@@ -441,15 +458,15 @@ msgstr "Alias can't be the same as nickname."
msgid "Group not found!"
msgstr "Group not found!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "You are already a member of that group."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "You have been blocked from that group by the admin."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Could not join user %1$s to group %2$s."
@@ -458,7 +475,7 @@ msgstr "Could not join user %1$s to group %2$s."
msgid "You are not a member of this group."
msgstr "You are not a member of this group."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Could not remove user %1$s to group %2$s."
@@ -489,7 +506,7 @@ msgstr "Invalid token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -498,7 +515,7 @@ msgstr "Invalid token."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -532,7 +549,7 @@ msgstr "The request token %s has been denied and revoked."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -558,13 +575,13 @@ msgstr ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -645,18 +662,6 @@ msgstr "%1$s / Favourites from %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates favourited by %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s timeline"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Updates from %1$s on %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -667,12 +672,12 @@ msgstr "%1$s / Updates mentioning %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s updates that reply to updates from %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s public timeline"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates from everyone!"
@@ -687,7 +692,7 @@ msgstr "Repeated to %s"
msgid "Repeats of %s"
msgstr "Repeats of %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notices tagged with %s"
@@ -708,8 +713,7 @@ msgstr "No such attachment."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "No nickname."
@@ -721,7 +725,7 @@ msgstr "No size."
msgid "Invalid size."
msgstr "Invalid size."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -738,30 +742,30 @@ msgid "User without matching profile"
msgstr "User without matching profile"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Avatar settings"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Preview"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Delete"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Upload"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Crop"
@@ -769,7 +773,7 @@ msgstr "Crop"
msgid "Pick a square area of the image to be your avatar"
msgstr "Pick a square area of the image to be your avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Lost our file data."
@@ -804,22 +808,22 @@ msgstr ""
"will not be notified of any @-replies from them."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Do not block this user"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Yes"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Block this user"
@@ -827,39 +831,43 @@ msgstr "Block this user"
msgid "Failed to save block information."
msgstr "Failed to save block information."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "No such group."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s blocked profiles"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s blocked profiles, page %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "A list of the users blocked from joining this group."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Unblock user from group"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Unblock"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Unblock this user"
@@ -915,7 +923,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notices"
@@ -934,7 +942,7 @@ msgstr "You are not the owner of this application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "There was a problem with your session token."
@@ -960,12 +968,13 @@ msgstr "Do not delete this application"
msgid "Delete this application"
msgstr "Delete this application"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Not logged in."
@@ -994,7 +1003,7 @@ msgstr "Are you sure you want to delete this notice?"
msgid "Do not delete this notice"
msgstr "Do not delete this notice"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Delete this notice"
@@ -1010,7 +1019,7 @@ msgstr "You can only delete local users."
msgid "Delete user"
msgstr "Delete user"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1018,12 +1027,12 @@ msgstr ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Delete this user"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Design"
@@ -1126,6 +1135,18 @@ msgstr "Restore default designs"
msgid "Reset back to default"
msgstr "Reset back to default"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Save"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Save design"
@@ -1217,29 +1238,29 @@ msgstr "Edit %s group"
msgid "You must be logged in to create a group."
msgstr "You must be logged in to create a group."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "You must be an admin to edit the group."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Use this form to edit the group."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "description is too long (max %d chars)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Could not update group."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Could not create aliases"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Options saved."
@@ -1357,7 +1378,7 @@ msgid "Cannot normalize that email address"
msgstr "Cannot normalise that e-mail address"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Not a valid e-mail address."
@@ -1533,23 +1554,39 @@ msgid "Could not convert request token to access token."
msgstr "Couldn't convert request tokens to access tokens."
#: actions/finishremotesubscribe.php:118
-#, fuzzy
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Unknown version of OMB protocol."
+msgstr "Remote service uses unknown version of OMB protocol."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
msgstr "Error updating remote profile."
#: actions/getfile.php:79
-#, fuzzy
msgid "No such file."
-msgstr "No such notice."
+msgstr "No such file."
#: actions/getfile.php:83
-#, fuzzy
msgid "Cannot read file."
-msgstr "Lost our file."
+msgstr "Cannot read file."
+
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Invalid token."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "You cannot sandbox users on this site."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "User is already silenced."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1565,9 +1602,8 @@ msgstr "No profile with that ID."
#: actions/groupblock.php:81 actions/groupunblock.php:81
#: actions/makeadmin.php:81
-#, fuzzy
msgid "No group specified."
-msgstr "No profile specified."
+msgstr "No group specified."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
@@ -1581,10 +1617,9 @@ msgstr "User is already blocked from group."
msgid "User is not a member of group."
msgstr "User is not a member of group."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
-#, fuzzy
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
-msgstr "Block user"
+msgstr "Block user from group"
#: actions/groupblock.php:162
#, php-format
@@ -1610,21 +1645,18 @@ msgid "Database error blocking user from group."
msgstr "Database error blocking user from group."
#: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "No ID"
+msgstr "No ID."
#: actions/groupdesignsettings.php:68
-#, fuzzy
msgid "You must be logged in to edit a group."
-msgstr "You must be logged in to create a group."
+msgstr "You must be logged in to edit a group."
-#: actions/groupdesignsettings.php:141
-#, fuzzy
+#: actions/groupdesignsettings.php:144
msgid "Group design"
-msgstr "Groups"
+msgstr "Group design"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1632,87 +1664,88 @@ msgstr ""
"Customise the way your group looks with a background image and a colour "
"palette of your choice."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
msgid "Couldn't update your design."
-msgstr "Couldn't update user."
+msgstr "Couldn't update your design."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
-#, fuzzy
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr "Sync preferences saved."
+msgstr "Design preferences saved."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Group logo"
-#: actions/grouplogo.php:150
-#, fuzzy, php-format
+#: actions/grouplogo.php:153
+#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
-msgstr "You can upload a logo image for your group."
+msgstr ""
+"You can upload a logo image for your group. The maximum file size is %s."
-#: actions/grouplogo.php:178
-#, fuzzy
+#: actions/grouplogo.php:181
msgid "User without matching profile."
-msgstr "User without matching profile"
+msgstr "User without matching profile."
-#: actions/grouplogo.php:362
-#, fuzzy
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
-msgstr "Pick a square area of the image to be your avatar"
+msgstr "Pick a square area of the image to be the logo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo updated."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Failed updating logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s group members"
-#: actions/groupmembers.php:96
-#, fuzzy, php-format
+#: actions/groupmembers.php:103
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "%s group members, page %d"
+msgstr "%1$s group members, page %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "A list of the users in this group."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Block"
-#: actions/groupmembers.php:443
-#, fuzzy
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr "You must be an admin to edit the group"
+msgstr "Make user an admin of the group"
-#: actions/groupmembers.php:475
-#, fuzzy
+#: actions/groupmembers.php:482
msgid "Make Admin"
-msgstr "Admin"
+msgstr "Make admin"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
-msgstr ""
+msgstr "Make this user an admin"
-#: actions/grouprss.php:133
-#, fuzzy, php-format
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s timeline"
+
+#: actions/grouprss.php:140
+#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr "Updates from %1$s on %2$s!"
+msgstr "Updates from members of %1$s on %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groups"
@@ -1742,12 +1775,12 @@ msgid "Create a new group"
msgstr "Create a new group"
#: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Search for people on %%site.name%% by their name, location, or interests. "
+"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
#: actions/groupsearch.php:58
@@ -1756,9 +1789,8 @@ msgstr "Group search"
#: actions/groupsearch.php:79 actions/noticesearch.php:117
#: actions/peoplesearch.php:83
-#, fuzzy
msgid "No results."
-msgstr "No results"
+msgstr "No results."
#: actions/groupsearch.php:82
#, php-format
@@ -1787,9 +1819,8 @@ msgid "Error removing the block."
msgstr "Error removing the block."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
-msgstr "I.M. Settings"
+msgstr "IM settings"
#: actions/imsettings.php:70
#, php-format
@@ -1881,9 +1912,9 @@ msgid "That is not your Jabber ID."
msgstr "That is not your Jabber ID."
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "Inbox for %s"
+msgstr "Inbox for %1$s - page %2$d"
#: actions/inbox.php:62
#, php-format
@@ -1965,16 +1996,19 @@ msgstr "Personal message"
msgid "Optionally add a personal message to the invitation."
msgstr "Optionally add a personal message to the invitation."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Send"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s has invited you to join them on %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2035,23 +2069,27 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "You must be logged in to join a group."
-#: actions/joingroup.php:131
-#, fuzzy, php-format
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "No nickname or ID."
+
+#: actions/joingroup.php:141
+#, php-format
msgid "%1$s joined group %2$s"
-msgstr "%s joined group %s"
+msgstr "%1$s joined group %2$s"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
msgstr "You must be logged in to leave a group."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "You are not a member of that group."
-#: actions/leavegroup.php:127
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s left group %s"
+msgstr "%1$s left group %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -2065,8 +2103,7 @@ msgstr "Incorrect username or password."
msgid "Error setting user. You are probably not authorized."
msgstr "Error setting user. You are probably not authorised."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Login"
@@ -2108,47 +2145,43 @@ msgid "Only an admin can make another user an admin."
msgstr ""
#: actions/makeadmin.php:96
-#, fuzzy, php-format
+#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "User is already blocked from group."
+msgstr "%1$s is already an admin for group \"%2$s\"."
#: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Could not remove user %s to group %s"
+msgstr "Can't get membership record for %1$s in group %2$s."
#: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "You must be an admin to edit the group"
+msgstr "Can't make %1$s an admin for group %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "No current status"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "No such notice."
+msgstr "New Application"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "You must be logged in to create a group."
+msgstr "You must be logged in to register an application."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Use this form to create a new group."
+msgstr "Use this form to register a new application."
#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Source URL is required."
#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
msgid "Could not create application."
-msgstr "Could not create aliases"
+msgstr "Could not create application."
#: actions/newgroup.php:53
msgid "New group"
@@ -2186,9 +2219,9 @@ msgid "Message sent"
msgstr "Message sent"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Direct message to %s sent"
+msgstr "Could not create application."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2216,9 +2249,9 @@ msgid "Text search"
msgstr "Text search"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Search results for \"%s\" on %s"
+msgstr "Search results for \"%1$s\" on %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2226,6 +2259,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2261,14 +2296,12 @@ msgid "Nudge sent!"
msgstr "Nudge sent!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "You must be logged in to create a group."
+msgstr "You must be logged in to list your applications."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Other options"
+msgstr "OAuth applications"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2288,9 +2321,8 @@ msgid "You have allowed the following applications to access you account."
msgstr ""
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "You are not a member of that group."
+msgstr "You are not a user of that application."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
@@ -2315,16 +2347,15 @@ msgid "%1$s's status on %2$s"
msgstr "%1$s's status on %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Connect"
+msgstr "content type "
#: actions/oembed.php:160
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Not a supported data format."
@@ -2337,9 +2368,8 @@ msgid "Notice Search"
msgstr "Notice Search"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
-msgstr "Other Settings"
+msgstr "Other settings"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2358,9 +2388,8 @@ msgid "Automatic shortening service to use."
msgstr "Automatic shortening service to use."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Profile settings"
+msgstr "View profile designs"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
@@ -2371,34 +2400,29 @@ msgid "URL shortening service is too long (max 50 chars)."
msgstr "URL shortening service is too long (max 50 chars)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "No profile specified."
+msgstr "No user ID specified."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "No profile specified."
+msgstr "No login token specified."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
-msgstr "No profile id in request."
+msgstr "No login token requested."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "Invalid notice content"
+msgstr "Invalid login token specified."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "Login to site"
+msgstr "Login token expired."
#: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
msgid "Outbox for %1$s - page %2$d"
-msgstr "Outbox for %s"
+msgstr "Outbox for %1$s - page %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2470,7 +2494,8 @@ msgstr "Can't save new password."
msgid "Password saved."
msgstr "Password saved."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2503,10 +2528,8 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
-#, fuzzy
msgid "Site"
-msgstr "Invite"
+msgstr "Site"
#: actions/pathsadminpanel.php:238
msgid "Server"
@@ -2557,24 +2580,20 @@ msgid "Theme directory"
msgstr ""
#: actions/pathsadminpanel.php:279
-#, fuzzy
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatars"
#: actions/pathsadminpanel.php:284
-#, fuzzy
msgid "Avatar server"
-msgstr "Avatar settings"
+msgstr "Avatar server"
#: actions/pathsadminpanel.php:288
-#, fuzzy
msgid "Avatar path"
-msgstr "Avatar updated."
+msgstr "Avatar path"
#: actions/pathsadminpanel.php:292
-#, fuzzy
msgid "Avatar directory"
-msgstr "Avatar updated."
+msgstr "Avatar directory"
#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
@@ -2596,7 +2615,7 @@ msgstr ""
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Never"
@@ -2617,9 +2636,8 @@ msgid "When to use SSL"
msgstr ""
#: actions/pathsadminpanel.php:335
-#, fuzzy
msgid "SSL server"
-msgstr "Server"
+msgstr "SSL server"
#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
@@ -2648,15 +2666,15 @@ msgid "Not a valid people tag: %s"
msgstr "Not a valid people tag: %s"
#: actions/peopletag.php:144
-#, fuzzy, php-format
+#, php-format
msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Users self-tagged with %s - page %d"
+msgstr "Users self-tagged with %1$s - page %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Invalid notice content"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Notice licence ‘1%$s’ is not compatible with site licence ‘%2$s’."
@@ -2680,7 +2698,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 lowercase letters or numbers, no punctuation or spaces"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Full name"
@@ -2708,7 +2726,7 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2734,7 +2752,7 @@ msgid ""
msgstr ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Language"
@@ -2761,7 +2779,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Bio is too long (max %d chars)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Timezone not selected."
@@ -2774,24 +2792,24 @@ msgstr "Language is too long (max 50 chars)."
msgid "Invalid tag: \"%s\""
msgstr "Invalid tag: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Couldn't update user for autosubscribe."
-#: actions/profilesettings.php:359
-#, fuzzy
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
-msgstr "Couldn't save tags."
+msgstr "Couldn't save location prefs."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Couldn't save profile."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Couldn't save tags."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Settings saved."
@@ -2804,48 +2822,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Could not retrieve public stream."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Public timeline, page %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Public timeline"
-#: actions/public.php:159
-#, fuzzy
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Public Stream Feed"
+msgstr "Public Stream Feed (RSS 1.0)"
-#: actions/public.php:163
-#, fuzzy
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Public Stream Feed"
+msgstr "Public Stream Feed (RSS 2.0)"
-#: actions/public.php:167
-#, fuzzy
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
-msgstr "Public Stream Feed"
+msgstr "Public Stream Feed (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2858,7 +2873,7 @@ msgstr ""
"tool. [Join now](%%action.register%%) to share notices about yourself with "
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3027,16 +3042,14 @@ msgid "Sorry, only invited people can register."
msgstr "Sorry, only invited people can register."
#: actions/register.php:92
-#, fuzzy
msgid "Sorry, invalid invitation code."
-msgstr "Error with confirmation code."
+msgstr "Sorry, invalid invitation code."
#: actions/register.php:112
msgid "Registration successful"
msgstr "Registration successful"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Register"
@@ -3075,7 +3088,7 @@ msgid "Same as password above. Required."
msgstr "Same as password above. Required."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3096,12 +3109,11 @@ msgid "Creative Commons Attribution 3.0"
msgstr ""
#: actions/register.php:497
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-" except this private data: password, e-mail address, IM address, phone "
+" except this private data: password, email address, IM address, and phone "
"number."
#: actions/register.php:538
@@ -3161,9 +3173,8 @@ msgid "Remote subscribe"
msgstr "Remote subscribe"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
-msgstr "Subscribe to this user"
+msgstr "Subscribe to a remote user"
#: actions/remotesubscribe.php:129
msgid "User nickname"
@@ -3182,7 +3193,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL of your profile on another compatible microblogging service"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscribe"
@@ -3191,108 +3202,110 @@ msgid "Invalid profile URL (bad format)"
msgstr "Invalid profile URL (bad format)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Not a valid profile URL (no YADIS document)."
+msgstr "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
#: actions/remotesubscribe.php:176
-#, fuzzy
msgid "That’s a local profile! Login to subscribe."
-msgstr "That's a local profile! Login to subscribe."
+msgstr "That’s a local profile! Login to subscribe."
#: actions/remotesubscribe.php:183
-#, fuzzy
msgid "Couldn’t get a request token."
-msgstr "Couldn't get a request token."
+msgstr "Couldn’t get a request token."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Only the user can read their own mailboxes."
+msgstr "Only logged-in users can repeat notices."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "No profile specified."
+msgstr "No notice specified."
#: actions/repeat.php:76
msgid "You can't repeat your own notice."
msgstr "You can't repeat your own notice."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "You have already blocked this user."
+msgstr "You already repeated that notice."
-#: actions/repeat.php:114 lib/noticelist.php:642
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "Created"
+msgstr "Repeated"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Created"
+msgstr "Repeated!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Replies to %s"
-#: actions/replies.php:127
-#, fuzzy, php-format
+#: actions/replies.php:128
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "Replies to %1$s on %2$s!"
+msgstr "Replies to %1$s, page %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Replies feed for %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Replies feed for %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Notice feed for %s"
-#: actions/replies.php:198
-#, fuzzy, php-format
+#: actions/replies.php:199
+#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-"This is the timeline for %s and friends but no one has posted anything yet."
+"This is the timeline showing replies to %1$s but %2$s hasn't received a "
+"notice to his attention yet."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
-#, fuzzy, php-format
+#: actions/replies.php:206
+#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-"You can try to [nudge %s](../%s) from his profile or [post something to his "
-"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
+"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#: actions/repliesrss.php:72
#, php-format
msgid "Replies to %1$s on %2$s!"
msgstr "Replies to %1$s on %2$s!"
-#: actions/rsd.php:146 actions/version.php:157
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "You cannot silence users on this site."
+
+#: actions/revokerole.php:82
#, fuzzy
+msgid "User doesn't have this role."
+msgstr "User without matching profile."
+
+#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
-msgstr "Status deleted."
+msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
@@ -3302,15 +3315,15 @@ msgstr "You cannot sandbox users on this site."
msgid "User is already sandboxed."
msgstr "User is already sandboxed."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
#: actions/sessionsadminpanel.php:65
-#, fuzzy
msgid "Session settings for this StatusNet site."
-msgstr "Design settings for this StausNet site."
+msgstr "Session settings for this StatusNet site."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
@@ -3328,20 +3341,18 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Save site settings"
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "You must be logged in to leave a group."
+msgstr "You must be logged in to view an application."
#: actions/showapplication.php:157
-#, fuzzy
msgid "Application profile"
-msgstr "Notice has no profile"
+msgstr "Application profile"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
@@ -3349,22 +3360,20 @@ msgstr ""
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
-#, fuzzy
msgid "Name"
-msgstr "Nickname"
+msgstr "Name"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
-#, fuzzy
msgid "Organization"
-msgstr "Pagination"
+msgstr "Organization"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistics"
@@ -3412,35 +3421,34 @@ msgid ""
msgstr ""
#: actions/showapplication.php:309
-#, fuzzy
msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Are you sure you want to delete this notice?"
+msgstr "Are you sure you want to reset your consumer key and secret?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s's favourite notices"
+msgstr "%1$s's favorite notices, page %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
msgstr "Could not retrieve favourite notices."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed for friends of %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed for friends of %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed for friends of %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3448,7 +3456,7 @@ msgstr ""
"You haven't chosen any favourite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3457,7 +3465,7 @@ msgstr ""
"%s hasn't added any notices to his favourites yet. Post something "
"interesting they would add to their favourites :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3468,7 +3476,7 @@ msgstr ""
"account](%%%%action.register%%%%) and then post something interesting they "
"would add to their favourites :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3478,71 +3486,71 @@ msgid "%s group"
msgstr "%s group"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "%s group members, page %d"
+msgstr "%1$s group, page %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Group profile"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Note"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Group actions"
-#: actions/showgroup.php:328
-#, fuzzy, php-format
+#: actions/showgroup.php:337
+#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Notice feed for %s group"
+msgstr "Notice feed for %s group (RSS 1.0)"
-#: actions/showgroup.php:334
-#, fuzzy, php-format
+#: actions/showgroup.php:343
+#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Notice feed for %s group"
+msgstr "Notice feed for %s group (RSS 2.0)"
-#: actions/showgroup.php:340
-#, fuzzy, php-format
+#: actions/showgroup.php:349
+#, php-format
msgid "Notice feed for %s group (Atom)"
-msgstr "Notice feed for %s group"
+msgstr "Notice feed for %s group (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Outbox for %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Members"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(None)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "All members"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Created"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3557,8 +3565,8 @@ msgstr ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
-#, fuzzy, php-format
+#: actions/showgroup.php:463
+#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
@@ -3566,12 +3574,13 @@ msgid ""
"their life and interests. "
msgstr ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service "
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. "
-#: actions/showgroup.php:482
-#, fuzzy
+#: actions/showgroup.php:491
msgid "Admins"
-msgstr "Admin"
+msgstr "Admins"
#: actions/showmessage.php:81
msgid "No such message."
@@ -3601,29 +3610,29 @@ msgid " tagged %s"
msgstr " tagged %s"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%1$s and friends, page %2$d"
+msgstr "%1$s, page %2$d"
#: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Notice feed for %s tagged %s (RSS 1.0)"
+msgstr "Notice feed for %1$s tagged %2$s (RSS 1.0)"
#: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for %s (RSS 1.0)"
#: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for %s (RSS 2.0)"
#: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (Atom)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for %s (Atom)"
#: actions/showstream.php:148
#, php-format
@@ -3631,10 +3640,9 @@ msgid "FOAF for %s"
msgstr "FOAF for %s"
#: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr ""
-"This is the timeline for %s and friends but no one has posted anything yet."
+msgstr "This is the timeline for %1$s but %2$s hasn't posted anything yet."
#: actions/showstream.php:205
msgid ""
@@ -3643,13 +3651,13 @@ msgid ""
msgstr ""
#: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
msgstr ""
-"You can try to [nudge %s](../%s) from his profile or [post something to his "
-"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+"You can try to nudge %1$s or [post something to his or her attention](%%%%"
+"action.newnotice%%%%?status_textarea=%2$s)."
#: actions/showstream.php:243
#, php-format
@@ -3672,167 +3680,153 @@ msgstr ""
"[StatusNet](http://status.net/) tool. "
#: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Replies to %s"
+msgstr "Repeat of %s"
#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
msgid "You cannot silence users on this site."
-msgstr "You can't send a message to this user."
+msgstr "You cannot silence users on this site."
#: actions/silence.php:72
-#, fuzzy
msgid "User is already silenced."
-msgstr "User is already blocked from group."
+msgstr "User is already silenced."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Design settings for this StausNet site."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
-#, fuzzy
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
-msgstr "Not a valid e-mail address."
+msgstr "You must have a valid contact email address."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Minimum text limit is 140 characters."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Site name"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Contact e-mail address for your site"
-#: actions/siteadminpanel.php:263
-#, fuzzy
+#: actions/siteadminpanel.php:245
msgid "Local"
-msgstr "Local views"
+msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Default site language"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "New message"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Unable to save your design settings!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Site notice"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
-msgstr "SMS Settings"
+msgstr "SMS settings"
#: actions/smssettings.php:69
#, php-format
@@ -3861,16 +3855,14 @@ msgid "Enter the code you received on your phone."
msgstr "Enter the code you received on your phone."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
-msgstr "SMS Phone number"
+msgstr "SMS phone number"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
msgstr "Phone number, no punctuation or spaces, with area code"
#: actions/smssettings.php:174
-#, fuzzy
msgid ""
"Send me notices through SMS; I understand I may incur exorbitant charges "
"from my carrier."
@@ -3883,7 +3875,6 @@ msgid "No phone number."
msgstr "No phone number."
#: actions/smssettings.php:311
-#, fuzzy
msgid "No carrier selected."
msgstr "No carrier selected."
@@ -3896,13 +3887,12 @@ msgid "That phone number already belongs to another user."
msgstr "That phone number already belongs to another user."
#: actions/smssettings.php:347
-#, fuzzy
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 ""
-"A confirmation code was sent to the phone number you added. Check your inbox "
-"(and spam box!) for the code and instructions on how to use it."
+"A confirmation code was sent to the phone number you added. Check your phone "
+"for the code and instructions on how to use it."
#: actions/smssettings.php:374
msgid "That is the wrong confirmation number."
@@ -3913,41 +3903,108 @@ msgid "That is not your phone number."
msgstr "That is not your phone number."
#: actions/smssettings.php:465
-#, fuzzy
msgid "Mobile carrier"
msgstr "Mobile carrier"
#: actions/smssettings.php:469
-#, fuzzy
msgid "Select a carrier"
msgstr "Select a carrier"
#: actions/smssettings.php:476
-#, fuzzy, php-format
+#, php-format
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 ""
-"Mobile carrier for your phone. If you know a carrier that accepts SMS over e-"
-"mail but isn't listed here, send e-mail to let us know at %s."
+"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."
#: actions/smssettings.php:498
msgid "No code entered"
msgstr "No code entered"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Change site configuration"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Save site settings"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "You are not subscribed to that profile."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Could not save subscription."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Not a local user."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "No such profile."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "You cannot subscribe to an OMB 0.1 remote profile with this action."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscribed"
@@ -3957,9 +4014,9 @@ msgid "%s subscribers"
msgstr "%s subscribers"
#: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "%s subscribers, page %d"
+msgstr "%1$s subscribers, page %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
@@ -3994,9 +4051,9 @@ msgid "%s subscriptions"
msgstr "%s subscriptions"
#: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "%s subscriptions, page %d"
+msgstr "%1$s subscriptions, page %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
@@ -4007,7 +4064,7 @@ msgstr "These are the people whose notices you listen to."
msgid "These are the people whose notices %s listens to."
msgstr "These are the people whose notices %s listens to."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4017,43 +4074,42 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s is not listening to anyone."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
-#, fuzzy, php-format
+#: actions/tag.php:69
+#, php-format
msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Users self-tagged with %s - page %d"
+msgstr "Notices tagged with %1$s, page %2$d"
-#: actions/tag.php:86
-#, fuzzy, php-format
+#: actions/tag.php:87
+#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for tag %s (RSS 1.0)"
-#: actions/tag.php:92
-#, fuzzy, php-format
+#: actions/tag.php:93
+#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for tag %s (RSS 2.0)"
-#: actions/tag.php:98
-#, fuzzy, php-format
+#: actions/tag.php:99
+#, php-format
msgid "Notice feed for tag %s (Atom)"
-msgstr "Notice feed for %s"
+msgstr "Notice feed for tag %s (Atom)"
#: actions/tagother.php:39
-#, fuzzy
msgid "No ID argument."
-msgstr "No id argument."
+msgstr "No ID argument."
#: actions/tagother.php:65
#, php-format
@@ -4099,24 +4155,21 @@ msgstr "Use this form to add tags to your subscribers or subscriptions."
msgid "No such tag."
msgstr "No such tag."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API method under construction."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "You have already blocked this user."
+msgstr "You haven't blocked that user."
#: actions/unsandbox.php:72
-#, fuzzy
msgid "User is not sandboxed."
-msgstr "User has blocked you."
+msgstr "User is not sandboxed."
#: actions/unsilence.php:72
-#, fuzzy
msgid "User is not silenced."
-msgstr "User has no profile."
+msgstr "User is not silenced."
#: actions/unsubscribe.php:77
msgid "No profile id in request."
@@ -4126,80 +4179,79 @@ msgstr "No profile id in request."
msgid "Unsubscribed"
msgstr "Unsubscribed"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
-#, fuzzy, php-format
+#: 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 "Notice licence ‘%s’ is not compatible with site licence ‘%s’."
+msgstr ""
+"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "User"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profile"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "New users"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Default subscription"
-#: actions/useradminpanel.php:241
-#, fuzzy
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Automatically subscribe to whoever subscribes to me (best for non-humans)"
+msgstr "Automatically subscribe new users to this user."
-#: actions/useradminpanel.php:250
-#, fuzzy
+#: actions/useradminpanel.php:251
msgid "Invitations"
-msgstr "Invitation(s) sent"
+msgstr "Invitations"
-#: actions/useradminpanel.php:255
-#, fuzzy
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
-msgstr "Invitation(s) sent"
+msgstr "Invitations enabled"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4208,15 +4260,14 @@ msgid "Authorize subscription"
msgstr "Authorise subscription"
#: actions/userauthorization.php:110
-#, fuzzy
msgid ""
"Please check these details to make sure that you want to subscribe to this "
"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
"click “Rejectâ€."
msgstr ""
"Please check these details to make sure that you want to subscribe to this "
-"user's notices. If you didn't just ask to subscribe to someone's notices, "
-"click \"Cancel\"."
+"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
+"click “Rejectâ€."
#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
@@ -4248,14 +4299,13 @@ msgid "Subscription authorized"
msgstr "Subscription authorised"
#: actions/userauthorization.php:256
-#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-"The subscription has been authorised, but no callback URL was passed. Check "
-"with the site's instructions for details on how to authorise the "
+"The subscription has been authorized, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
#: actions/userauthorization.php:266
@@ -4263,14 +4313,13 @@ msgid "Subscription rejected"
msgstr "Subscription rejected"
#: actions/userauthorization.php:268
-#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
"The subscription has been rejected, but no callback URL was passed. Check "
-"with the site's instructions for details on how to fully reject the "
+"with the site’s instructions for details on how to fully reject the "
"subscription."
#: actions/userauthorization.php:303
@@ -4299,19 +4348,18 @@ msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
#: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
msgid "Can’t read avatar URL ‘%s’."
-msgstr "Can't read avatar URL '%s'"
+msgstr "Can’t read avatar URL ‘%s’."
#: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Wrong image type for '%s'"
+msgstr "Wrong image type for avatar URL ‘%s’."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
msgid "Profile design"
-msgstr "Profile settings"
+msgstr "Profile design"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
@@ -4324,29 +4372,34 @@ msgid "Enjoy your hotdog!"
msgstr ""
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "%s group members, page %d"
+msgstr "%1$s groups, page %2$d"
#: actions/usergroups.php:130
-#, fuzzy
msgid "Search for more groups"
-msgstr "Search for people or text"
+msgstr "Search for more groups"
-#: actions/usergroups.php:153
-#, fuzzy, php-format
+#: actions/usergroups.php:157
+#, php-format
msgid "%s is not a member of any group."
-msgstr "You are not a member of that group."
+msgstr "%s is not a member of any group."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Updates from %1$s on %2$s!"
+
#: actions/version.php:73
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "Statistics"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4396,10 +4449,9 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "Personal"
+msgstr "Version"
#: actions/version.php:197
msgid "Author(s)"
@@ -4423,29 +4475,29 @@ msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Group profile"
+msgstr "Group join failed."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Could not update group."
+msgstr "Not part of group."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Group profile"
+msgstr "Group leave failed."
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Could not update local group."
#: classes/Login_token.php:76
-#, fuzzy, php-format
+#, php-format
msgid "Could not create login token for %s"
-msgstr "Could not create aliases"
+msgstr "Could not create login token for %s"
#: classes/Message.php:45
-#, fuzzy
msgid "You are banned from sending direct messages."
-msgstr "Error sending direct message."
+msgstr "You are banned from sending direct messages."
#: classes/Message.php:61
msgid "Could not insert message."
@@ -4455,70 +4507,101 @@ msgstr "Could not insert message."
msgid "Could not update message with new URI."
msgstr "Could not update message with new URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "DB error inserting hashtag: %s"
-#: classes/Notice.php:214
-#, fuzzy
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
-msgstr "Problem saving notice."
+msgstr "Problem saving notice. Too long."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem saving notice. Unknown user."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Too many notices too fast; take a breather and post again in a few minutes."
-#: classes/Notice.php:229
-#, fuzzy
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-"Too many notices too fast; take a breather and post again in a few minutes."
+"Too many duplicate messages too quickly; take a breather and post again in a "
+"few minutes."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "You are banned from posting notices on this site."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem saving notice."
-#: classes/Notice.php:788
-#, fuzzy
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
-msgstr "Problem saving notice."
+msgstr "Problem saving group inbox."
-#: classes/Notice.php:848
+#: classes/Notice.php:1459
#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "DB error inserting reply: %s"
-
-#: classes/Notice.php:1271
-#, fuzzy, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
+
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "You have been banned from subscribing."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "User has blocked you."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Not subscribed!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Couldn't delete self-subscription."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Couldn't delete subscription."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Couldn't delete subscription."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welcome to %1$s, @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Could not create group."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Could not set group URI."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Could not set group membership."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Could not save local group info."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Change your profile settings"
@@ -4548,134 +4631,196 @@ msgid "Other options"
msgstr "Other options"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
msgstr "Untitled page"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primary site navigation"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Home"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personal profile and friends timeline"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Change your e-mail, avatar, password, profile"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Connect"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Could not redirect to server: %s"
+msgstr "Connect to services"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "Connect"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Primary site navigation"
+msgstr "Change site configuration"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invite"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invite friends and colleagues to join you on %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Logout"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invite"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logout from the site"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logout"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Create an account"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Register"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Login to the site"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Help"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Login"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Search"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Help"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Search for people or text"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Search"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Site notice"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Local views"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Page notice"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secondary site navigation"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Help"
+
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "F.A.Q."
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet software licence"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4684,12 +4829,12 @@ msgstr ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is a microblogging service."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4700,103 +4845,147 @@ msgstr ""
"s, available under the [GNU Affero General Public Licence](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Site content license"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "After"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Before"
-#: lib/adminpanelaction.php:96
-#, fuzzy
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
-msgstr "You can't send a message to this user."
+msgstr "You cannot make changes to this site."
-#: lib/adminpanelaction.php:107
-#, fuzzy
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
-msgstr "Registration not allowed."
+msgstr "Changes to that panel are not allowed."
-#: lib/adminpanelaction.php:206
-#, fuzzy
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
-msgstr "Command not yet implemented."
+msgstr "showForm() not implemented."
-#: lib/adminpanelaction.php:235
-#, fuzzy
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
-msgstr "Command not yet implemented."
+msgstr "saveSettings() not implemented."
-#: lib/adminpanelaction.php:258
-#, fuzzy
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
-msgstr "Unable to save your design settings!"
+msgstr "Unable to delete design setting."
-#: lib/adminpanelaction.php:312
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
-msgstr "E-mail address confirmation"
+msgstr "Basic site configuration"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Design configuration"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Design"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "SMS confirmation"
+msgstr "User configuration"
-#: lib/adminpanelaction.php:327
-#, fuzzy
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "User"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
-msgstr "Design configuration"
+msgstr "Access configuration"
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
-msgstr "SMS confirmation"
+msgstr "Paths configuration"
-#: lib/adminpanelaction.php:337
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
-msgstr "Design configuration"
+msgstr "Sessions configuration"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Site notice"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Paths configuration"
-#: lib/apiauth.php:95
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4810,24 +4999,21 @@ msgid "Icon for this application"
msgstr ""
#: lib/applicationeditform.php:204
-#, fuzzy, php-format
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Describe the group or topic in %d characters"
+msgstr "Describe your application in %d characters"
#: lib/applicationeditform.php:207
-#, fuzzy
msgid "Describe your application"
-msgstr "Describe the group or topic"
+msgstr "Describe your application"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "Source"
+msgstr "Source URL"
#: lib/applicationeditform.php:218
-#, fuzzy
msgid "URL of the homepage of this application"
-msgstr "URL of the homepage or blog of the group or topic"
+msgstr "URL of the homepage of this application"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
@@ -4866,9 +5052,8 @@ msgid "Default access for this application: read-only, or read-write"
msgstr ""
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Remove"
+msgstr "Revoke"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4879,9 +5064,8 @@ msgid "Author"
msgstr ""
#: lib/attachmentlist.php:278
-#, fuzzy
msgid "Provider"
-msgstr "Profile"
+msgstr "Provider"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
@@ -4891,15 +5075,13 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
-#, fuzzy
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "Password change"
+msgstr "Password changing failed"
-#: lib/authenticationplugin.php:233
-#, fuzzy
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
-msgstr "Password change"
+msgstr "Password changing is not allowed"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
@@ -4940,9 +5122,8 @@ msgid ""
msgstr ""
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
msgid "Notice with that id does not exist"
-msgstr "No profile with that id."
+msgstr "Notice with that id does not exist"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
@@ -5020,14 +5201,13 @@ msgid "Already repeated that notice"
msgstr "Already repeated that notice."
#: lib/command.php:426
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Notice posted"
+msgstr "Notice from %s repeated"
#: lib/command.php:428
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Error saving notice."
+msgstr "Error repeating notice."
#: lib/command.php:482
#, php-format
@@ -5047,83 +5227,89 @@ msgstr "Error saving notice."
msgid "Specify the name of the user to subscribe to"
msgstr "Specify the name of the user to subscribe to"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "No such user."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Subscribed to %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specify the name of the user to unsubscribe from"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Unsubscribed from %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Command not yet implemented."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notification off."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Can't turn off notification."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notification on."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Can't turn on notification."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
-#, fuzzy
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Unsubscribed %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
-msgstr "You are not subscribed to that profile."
+msgstr "You are not subscribed to anyone."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "You are already subscribed to these users:"
msgstr[1] "You are already subscribed to these users:"
-#: lib/command.php:690
-#, fuzzy
+#: lib/command.php:731
msgid "No one is subscribed to you."
-msgstr "Could not subscribe other to you."
+msgstr "No one is subscribed to you."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Could not subscribe other to you."
msgstr[1] "Could not subscribe other to you."
-#: lib/command.php:712
-#, fuzzy
+#: lib/command.php:753
msgid "You are not a member of any groups."
-msgstr "You are not a member of that group."
+msgstr "You are not a member of any groups."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5137,6 +5323,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5164,19 +5351,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "No configuration file found"
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Go to the installer."
@@ -5193,9 +5380,8 @@ msgid "Updates by SMS"
msgstr "Updates by SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Connect"
+msgstr "Connections"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
@@ -5206,15 +5392,14 @@ msgid "Database error"
msgstr ""
#: lib/designsettings.php:105
-#, fuzzy
msgid "Upload file"
-msgstr "Upload"
+msgstr "Upload file"
#: lib/designsettings.php:109
-#, fuzzy
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "You can upload your personal avatar. The maximum file size is %s."
+msgstr ""
+"You can upload your personal background image. The maximum file size is 2MB."
#: lib/designsettings.php:418
msgid "Design defaults restored."
@@ -5276,6 +5461,11 @@ msgstr "Choose a tag to narrow list"
msgid "Go"
msgstr "Go"
+#: lib/grantroleform.php:91
+#, php-format
+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 of the homepage or blog of the group or topic"
@@ -5366,23 +5556,23 @@ msgstr "System error uploading file."
msgid "Not an image or corrupt file."
msgstr "Not an image or corrupt file."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Unsupported image file format."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Lost our file."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Unknown file type"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5464,11 +5654,9 @@ msgstr ""
"Change your email address or notification options at %8$s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr ""
-"Bio: %s\n"
-"\n"
+msgstr "Bio: %s"
#: lib/mail.php:286
#, php-format
@@ -5606,8 +5794,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
-#, fuzzy
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "from"
@@ -5628,9 +5815,9 @@ msgid "Sorry, no incoming email allowed."
msgstr "Sorry, no incoming e-mail allowed."
#: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
msgid "Unsupported message type: %s"
-msgstr "Unsupported image file format."
+msgstr "Unsupported message type: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
@@ -5671,9 +5858,8 @@ msgid "File could not be moved to destination directory."
msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
-#, fuzzy
msgid "Could not determine file's MIME type."
-msgstr "Could not retrieve public stream."
+msgstr "Could not determine file's MIME type."
#: lib/mediafile.php:270
#, php-format
@@ -5697,6 +5883,11 @@ msgstr "To"
msgid "Available characters"
msgstr "Available characters"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Send"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Send a notice"
@@ -5715,14 +5906,12 @@ msgid "Attach a file"
msgstr ""
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
-msgstr "Couldn't save tags."
+msgstr "Share my location"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
-msgstr "Couldn't save tags."
+msgstr "Do not share my location"
#: lib/noticeform.php:216
msgid ""
@@ -5730,53 +5919,50 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
-#, fuzzy
+#: lib/noticelist.php:430
msgid "N"
-msgstr "No"
+msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:572
-#, fuzzy
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Created"
+msgstr "Repeated by"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Reply to this notice"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Reply"
-#: lib/noticelist.php:641
-#, fuzzy
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Notice deleted."
+msgstr "Notice repeated"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5806,10 +5992,6 @@ msgstr "Error inserting remote profile."
msgid "Duplicate notice"
msgstr "Duplicate notice"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "You have been banned from subscribing."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Couldn't insert new subscription."
@@ -5848,11 +6030,10 @@ msgid "Tags in %s's notices"
msgstr "Tags in %s's notices"
#: lib/plugin.php:114
-#, fuzzy
msgid "Unknown"
-msgstr "Unknown action"
+msgstr "Unknown"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscriptions"
@@ -5860,30 +6041,29 @@ msgstr "Subscriptions"
msgid "All subscriptions"
msgstr "All subscriptions"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscribers"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "All subscribers"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "User ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Member since"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "All groups"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments."
-msgstr "No id argument."
+msgstr "No return-to arguments."
#: lib/profileformaction.php:137
msgid "Unimplemented method."
@@ -5910,16 +6090,19 @@ msgid "Popular"
msgstr "Popular"
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "Reply to this notice"
+msgstr "Repeat this notice?"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Reply to this notice"
+msgstr "Repeat this notice"
+
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Block this user from this group"
-#: lib/router.php:665
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5932,14 +6115,17 @@ msgid "Sandbox this user"
msgstr "Sandbox this user"
#: lib/searchaction.php:120
-#, fuzzy
msgid "Search site"
-msgstr "Search"
+msgstr "Search site"
#: lib/searchaction.php:126
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Search"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Search help"
@@ -5991,35 +6177,14 @@ msgstr "People subscribed to %s"
msgid "Groups %s is a member of"
msgstr "Groups %s is a member of"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "User has blocked you."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Could not subscribe."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Could not subscribe other to you."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Not subscribed!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Couldn't delete subscription."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invite"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Couldn't delete subscription."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Invite friends and colleagues to join you on %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6071,67 +6236,83 @@ msgstr "Edit Avatar"
msgid "User actions"
msgstr "User actions"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Edit profile settings"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Send a direct message to this user"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "User profile"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Admins"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "a few seconds ago"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "about a year ago"
@@ -6146,6 +6327,6 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s is not a valid colour! Use 3 or 6 hex chars."
#: lib/xmppmanager.php:402
-#, fuzzy, php-format
+#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Message too long - maximum is %d characters, you sent %d"
+msgstr "Message too long - maximum is %1$d characters, you sent %2$d."
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index 0d7c9384a..4aa92796a 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -3,6 +3,7 @@
# Author@translatewiki.net: Brion
# Author@translatewiki.net: Crazymadlover
# Author@translatewiki.net: McDutchie
+# Author@translatewiki.net: PerroVerd
# Author@translatewiki.net: Peter17
# Author@translatewiki.net: Translationista
# --
@@ -12,75 +13,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:06:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:16+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acceder"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Configuración de acceso de la web"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registro"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privado"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "¿Prohibir a los usuarios anónimos (no conectados) ver el sitio?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Invitar sólo"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privado"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Haz que el registro sea sólo con invitaciones."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Cerrado"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Invitar sólo"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Inhabilitar nuevos registros."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Guardar"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Cerrado"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Guardar la configuración de acceso"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Guardar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "No existe tal página"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -94,46 +103,53 @@ msgstr "No existe tal página"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "No existe ese usuario."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s y amigos, página %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s y amigos"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed de los amigos de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed de los amigos de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed de los amigos de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -141,7 +157,7 @@ msgstr ""
"Esta es la línea temporal de %s y amistades, pero nadie ha publicado nada "
"todavía."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -150,7 +166,8 @@ msgstr ""
"Esta es la línea temporal de %s y amistades, pero nadie ha publicado nada "
"todavía."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -159,7 +176,7 @@ msgstr ""
"Trata de suscribirte a más personas, [unirte a un grupo] (%%action.groups%%) "
"o publicar algo."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -168,7 +185,8 @@ msgstr ""
"Puede intentar [guiñar a %1$s](../%2$s) desde su perfil o [publicar algo a "
"su atención ](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tú y amigos"
@@ -186,20 +204,20 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método de API no encontrado."
@@ -233,8 +251,9 @@ msgstr "No se pudo actualizar el usuario."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "El usuario no tiene un perfil."
@@ -260,7 +279,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -370,7 +389,7 @@ msgstr "No se pudo determinar el usuario fuente."
msgid "Could not find target user."
msgstr "No se pudo encontrar ningún usuario de destino."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -378,62 +397,62 @@ msgstr ""
"El usuario debe tener solamente letras minúsculas y números y no puede tener "
"espacios."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "El usuario ya existe. Prueba con otro."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Usuario inválido"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "La página de inicio no es un URL válido."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Tu nombre es demasiado largo (max. 255 carac.)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "La descripción es demasiado larga (máx. %d caracteres)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "La ubicación es demasiado larga (máx. 255 caracteres)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "¡Muchos seudónimos! El máximo es %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Alias inválido: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "El alias \"%s\" ya está en uso. Intenta usar otro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "El alias no puede ser el mismo que el usuario."
@@ -444,15 +463,15 @@ msgstr "El alias no puede ser el mismo que el usuario."
msgid "Group not found!"
msgstr "¡No se ha encontrado el grupo!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Ya eres miembro de ese grupo"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Has sido bloqueado de ese grupo por el administrador."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "No se pudo unir el usuario %s al grupo %s"
@@ -461,7 +480,7 @@ msgstr "No se pudo unir el usuario %s al grupo %s"
msgid "You are not a member of this group."
msgstr "No eres miembro de este grupo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s."
@@ -492,7 +511,7 @@ msgstr "Token inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -501,7 +520,7 @@ msgstr "Token inválido."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -538,7 +557,7 @@ msgstr "El token de solicitud %2 ha sido denegado y revocado."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -564,13 +583,13 @@ msgstr ""
"permiso para <strong>%3$s</strong> la información de tu cuenta %4$s. Sólo "
"debes dar acceso a tu cuenta %4$s a terceras partes en las que confíes."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Cuenta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -653,18 +672,6 @@ msgstr "%1$s / Favoritos de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "línea temporal de %s"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -675,12 +682,12 @@ msgstr "%1$s / Actualizaciones que mencionan %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "línea temporal pública de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "¡Actualizaciones de todos en %s!"
@@ -695,7 +702,7 @@ msgstr "Repetido a %s"
msgid "Repeats of %s"
msgstr "Repeticiones de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Avisos marcados con %s"
@@ -716,8 +723,7 @@ msgstr "No existe tal archivo adjunto."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ningún apodo."
@@ -729,7 +735,7 @@ msgstr "Ningún tamaño."
msgid "Invalid size."
msgstr "Tamaño inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -746,30 +752,30 @@ msgid "User without matching profile"
msgstr "Usuario sin perfil equivalente"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Configuración de Avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Vista previa"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Borrar"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Cargar"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Cortar"
@@ -777,7 +783,7 @@ msgstr "Cortar"
msgid "Pick a square area of the image to be your avatar"
msgstr "Elige un área cuadrada de la imagen para que sea tu avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Se perdió nuestros datos de archivo."
@@ -812,22 +818,22 @@ msgstr ""
"te notificará de ninguna de sus respuestas @."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "No bloquear a este usuario"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Sí"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este usuario."
@@ -835,40 +841,44 @@ msgstr "Bloquear este usuario."
msgid "Failed to save block information."
msgstr "No se guardó información de bloqueo."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "No existe ese grupo."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s perfiles bloqueados"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s perfiles bloqueados, página %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
"Una lista de los usuarios que han sido bloqueados para unirse a este grupo."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Desbloquear usuario de grupo"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloquear"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Desbloquear este usuario"
@@ -924,7 +934,7 @@ msgid "Conversation"
msgstr "Conversación"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avisos"
@@ -943,7 +953,7 @@ msgstr "No eres el propietario de esta aplicación."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Hubo problemas con tu clave de sesión."
@@ -969,12 +979,13 @@ msgstr "No eliminar esta aplicación"
msgid "Delete this application"
msgstr "Borrar esta aplicación"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "No conectado."
@@ -1003,7 +1014,7 @@ msgstr "¿Estás seguro de que quieres eliminar este aviso?"
msgid "Do not delete this notice"
msgstr "No eliminar este mensaje"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Borrar este aviso"
@@ -1019,7 +1030,7 @@ msgstr "Sólo puedes eliminar usuarios locales."
msgid "Delete user"
msgstr "Borrar usuario"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1027,12 +1038,12 @@ msgstr ""
"¿Realmente deseas eliminar este usuario? Esto borrará de la base de datos "
"todos los datos sobre el usuario, sin dejar una copia de seguridad."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Borrar este usuario"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Diseño"
@@ -1135,6 +1146,18 @@ msgstr "Restaurar los diseños predeterminados"
msgid "Reset back to default"
msgstr "Volver a los valores predeterminados"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Guardar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Guardar el diseño"
@@ -1226,29 +1249,29 @@ msgstr "Editar grupo %s"
msgid "You must be logged in to create a group."
msgstr "Debes estar conectado para crear un grupo"
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Para editar el grupo debes ser administrador."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Usa este formulario para editar el grupo."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "La descripción es muy larga (máx. %d caracteres)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "No se pudo actualizar el grupo."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "No fue posible crear alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Se guardó Opciones."
@@ -1369,7 +1392,7 @@ msgid "Cannot normalize that email address"
msgstr "No se puede normalizar esta dirección de correo electrónico."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correo electrónico no válido"
@@ -1562,6 +1585,25 @@ msgstr "No existe tal archivo."
msgid "Cannot read file."
msgstr "No se puede leer archivo."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Token inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "No puedes enviar mensaje a este usuario."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "El usuario te ha bloqueado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1591,7 +1633,7 @@ msgstr "Usuario ya está bloqueado del grupo."
msgid "User is not a member of group."
msgstr "Usuario no es miembro del grupo"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear usuario de grupo"
@@ -1628,11 +1670,11 @@ msgstr "Sin ID."
msgid "You must be logged in to edit a group."
msgstr "Debes estar conectado para editar un grupo."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Diseño de grupo"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1640,20 +1682,20 @@ msgstr ""
"Personaliza el aspecto de tu grupo con una imagen de fondo y la paleta de "
"colores que prefieras."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "No fue posible actualizar tu diseño."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Preferencias de diseño guardadas."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo de grupo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1661,62 +1703,68 @@ msgstr ""
"Puedes subir una imagen de logo para tu grupo. El tamaño máximo del archivo "
"debe ser %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Usuario sin perfil coincidente."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Elige un área cuadrada de la imagen para que sea tu logo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo actualizado."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Error al actualizar el logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Miembros del grupo %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s miembros de grupo, página %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Lista de los usuarios en este grupo."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Convertir al usuario en administrador del grupo"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Convertir en administrador"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Convertir a este usuario en administrador"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "línea temporal de %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "¡Actualizaciones de miembros de %1$s en %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -1975,16 +2023,19 @@ msgstr "Mensaje Personal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalmente añada un mensaje personalizado a su invitación."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s te ha invitado a que te unas con el/ellos en %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2045,7 +2096,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Debes estar conectado para unirte a un grupo."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Ningún apodo."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s se ha unido al grupo %2$"
@@ -2054,11 +2110,11 @@ msgstr "%1$s se ha unido al grupo %2$"
msgid "You must be logged in to leave a group."
msgstr "Debes estar conectado para dejar un grupo."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "No eres miembro de este grupo."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ha dejado el grupo %2$s"
@@ -2075,8 +2131,7 @@ msgstr "Nombre de usuario o contraseña incorrectos."
msgid "Error setting user. You are probably not authorized."
msgstr "Error al configurar el usuario. Posiblemente no tengas autorización."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inicio de sesión"
@@ -2334,8 +2389,8 @@ msgstr "tipo de contenido "
msgid "Only "
msgstr "Sólo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@@ -2475,9 +2530,10 @@ msgstr "No se puede guardar la nueva contraseña."
msgid "Password saved."
msgstr "Se guardó Contraseña."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
-msgstr ""
+msgstr "Rutas"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
@@ -2508,7 +2564,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Servidor SSL no válido. La longitud máxima es de 255 caracteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Sitio"
@@ -2522,7 +2577,7 @@ msgstr ""
#: actions/pathsadminpanel.php:242
msgid "Path"
-msgstr ""
+msgstr "Ruta"
#: actions/pathsadminpanel.php:242
#, fuzzy
@@ -2598,7 +2653,7 @@ msgstr "Directorio del fondo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2624,7 +2679,7 @@ msgstr "Servidor SSL"
#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
-msgstr ""
+msgstr "Servidor hacia el cual dirigir las solicitudes SSL"
#: actions/pathsadminpanel.php:352
#, fuzzy
@@ -2654,11 +2709,11 @@ msgstr "No es una etiqueta válida para personas: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuarios auto marcados con %s - página %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "El contenido del aviso es inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2684,7 +2739,7 @@ msgstr ""
"1-64 letras en minúscula o números, sin signos de puntuación o espacios"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nombre completo"
@@ -2712,7 +2767,7 @@ msgid "Bio"
msgstr "Biografía"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2724,7 +2779,7 @@ msgstr "Dónde estás, por ejemplo \"Ciudad, Estado (o Región), País\""
#: actions/profilesettings.php:138
msgid "Share my current location when posting notices"
-msgstr ""
+msgstr "Compartir mi ubicación actual al publicar los mensajes"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
@@ -2737,7 +2792,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "Tags para ti (letras, números, -, ., y _), coma - o espacio - separado"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2765,7 +2820,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografía es muy larga (máx. %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Zona horaria no seleccionada"
@@ -2778,23 +2833,24 @@ msgstr "Idioma es muy largo ( max 50 car.)"
msgid "Invalid tag: \"%s\""
msgstr "Etiqueta inválida: \"% s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "No se pudo actualizar el usuario para autosuscribirse."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "No se han podido guardar las preferencias de ubicación."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "No se pudo guardar el perfil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "No se pudo guardar las etiquetas."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Se guardó configuración."
@@ -2807,31 +2863,31 @@ msgstr "Más allá del límite de páginas (%s)"
msgid "Could not retrieve public stream."
msgstr "No se pudo acceder a corriente pública."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Línea temporal pública, página %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Línea temporal pública"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed del flujo público"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed del flujo público"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Feed del flujo público"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2840,17 +2896,17 @@ msgstr ""
"Esta es la línea temporal pública de %%site.name%%, pero aún no se ha "
"publicado nada."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "¡Sé la primera persona en publicar algo!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2859,7 +2915,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2893,6 +2949,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to post "
"one!"
msgstr ""
+"¿Por qué no [registras una cuenta](%%action.register%%) y te conviertes en "
+"la primera persona en publicar uno?"
#: actions/publictagcloud.php:134
msgid "Tag cloud"
@@ -3031,16 +3089,14 @@ msgid "Sorry, only invited people can register."
msgstr "Disculpa, sólo personas invitadas pueden registrarse."
#: actions/register.php:92
-#, fuzzy
msgid "Sorry, invalid invitation code."
-msgstr "Error con el código de confirmación."
+msgstr "El código de invitación no es válido."
#: actions/register.php:112
msgid "Registration successful"
msgstr "Registro exitoso."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrarse"
@@ -3081,7 +3137,7 @@ msgid "Same as password above. Required."
msgstr "Igual a la contraseña de arriba. Requerida"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo electrónico"
@@ -3111,7 +3167,7 @@ msgstr ""
"electrónico, dirección de mensajería instantánea y número de teléfono."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3128,20 +3184,20 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"¡Felicitaciones, %s! Y bienvenido a %%%%site.name%%%%. Desde aquí, "
-"puedes...\n"
+"¡Felicitaciones, %1$s! Te damos la bienvenida a %%%%site.name%%%%. Desde "
+"este momento, puede que quieras...\n"
"\n"
-"* Ir a [tu perfil](%s) y enviar tu primer mensaje.\n"
-"* Agregar una [cuenta Jabber/Gtalk](%%%%action.imsettings%%%%) para enviar "
-"avisos por mensajes instantáneos.\n"
-"* [Buscar personas](%%%%action.peoplesearch%%%%) que podrías conoces o que "
-"comparte tus intereses.\n"
-"* Actualizar tus [opciones de perfil](%%%%action.profilesettings%%%%) para "
-"contar más sobre tí.\n"
-"* Leer la [documentación en línea](%%%%doc.help%%%%) para encontrar "
-"características pasadas por alto.\n"
+"* Ir a [tu perfil](%2$s) y publicar tu primer mensaje.\n"
+"* Añadir una [dirección Jabber/GTalk](%%%%action.imsettings%%%%) para poder "
+"enviar mensajes a través de mensajería instantanea.\n"
+"* [Buscar personas](%%%%action.peoplesearch%%%%) que conozcas o que "
+"compartan tus intereses. \n"
+"* Actualizar tu [configuración de perfil](%%%%action.profilesettings%%%%) "
+"para contarle a otros más sobre tí. \n"
+"* Leer los [documentos en línea](%%%%doc.help%%%%) para encontrar "
+"características que te hayas podido perder. \n"
"\n"
-"Gracias por suscribirte y esperamos que disfrutes el uso de este servicio."
+"¡Gracias por apuntarte! Esperamos que disfrutes usando este servicio."
#: actions/register.php:562
msgid ""
@@ -3188,7 +3244,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "El URL de tu perfil en otro servicio de microblogueo compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Suscribirse"
@@ -3226,7 +3282,7 @@ msgstr "No puedes repetir tus propios mensajes."
msgid "You already repeated that notice."
msgstr "Ya has repetido este mensaje."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetido"
@@ -3234,47 +3290,47 @@ msgstr "Repetido"
msgid "Repeated!"
msgstr "¡Repetido!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Respuestas a %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Respuestas a %1$s, página %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Feed de avisos de %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Feed de avisos de %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Feed de avisos de %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3286,6 +3342,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respuestas a %1$s en %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "No puedes enviar mensaje a este usuario."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuario sin perfil coincidente."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3300,8 +3366,9 @@ msgstr "No puedes enviar mensaje a este usuario."
msgid "User is already sandboxed."
msgstr "El usuario te ha bloqueado."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sesiones"
@@ -3325,11 +3392,10 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
-#, fuzzy
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
-msgstr "Configuración de Avatar"
+msgstr "Guardar la configuración del sitio"
#: actions/showapplication.php:82
#, fuzzy
@@ -3358,8 +3424,8 @@ msgstr "Organización"
msgid "Description"
msgstr "Descripción"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadísticas"
@@ -3390,11 +3456,11 @@ msgstr ""
#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL del token de solicitud"
#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL del token de acceso"
#: actions/showapplication.php:283
msgid "Authorize URL"
@@ -3420,35 +3486,35 @@ msgstr "Avisos favoritos de %s"
msgid "Could not retrieve favorite notices."
msgstr "No se pudo recibir avisos favoritos."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed de los amigos de %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed de los amigos de %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed de los amigos de %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3456,7 +3522,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3470,68 +3536,68 @@ msgstr "Grupo %s"
msgid "%1$s group, page %2$d"
msgstr "Miembros del grupo %s, página %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil del grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Acciones del grupo"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Bandeja de salida para %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Miembros"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ninguno)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos los miembros"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Creado"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3541,7 +3607,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3552,7 +3618,7 @@ msgstr ""
"**%s** es un grupo de usuarios en %%%%site.name%%%%, un servicio [micro-"
"blogging](http://en.wikipedia.org/wiki/Micro-blogging) "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradores"
@@ -3641,19 +3707,20 @@ msgid ""
msgstr ""
#: actions/showstream.php:248
-#, fuzzy, php-format
+#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
-"**%s** tiene una cuenta en %%%%site.name%%%%, un servicio [micro-blogging]"
-"(http://en.wikipedia.org/wiki/Micro-blogging) "
+"**% s ** tiene una cuenta en %%%%site.name%%%%, un servicio de "
+"[microblogueo] (http://en.wikipedia.org/wiki/Micro-blogging), basado en la "
+"herramienta de software libre [StatusNet] (http://status.net/). "
#: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Respuestas a %s"
+msgstr "Repetición de %s"
#: actions/silence.php:65 actions/unsilence.php:65
#, fuzzy
@@ -3666,150 +3733,140 @@ msgid "User is already silenced."
msgstr "El usuario te ha bloqueado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configuración básica de este sitio StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "No es una dirección de correo electrónico válida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Idioma desconocido \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nombre del sitio"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nueva dirección de correo para postear a %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Vistas locales"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Zona horaria predeterminada"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Zona horaria predeterminada del sitio; generalmente UTC."
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
-msgstr "Lenguaje de preferencia"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr ""
+msgid "Default language"
+msgstr "Idioma predeterminado del sitio"
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Las capturas se enviarán a este URL"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Límites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Límite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Cantidad máxima de caracteres para los mensajes."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
+msgstr "Cuántos segundos es necesario esperar para publicar lo mismo de nuevo."
+
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso de sitio"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nuevo Mensaje "
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "No se pudo grabar tu configuración de diseño."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso de sitio"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso de sitio"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configuración de SMS"
@@ -3912,29 +3969,97 @@ msgstr ""
msgid "No code entered"
msgstr "No ingresó código"
-#: actions/subedit.php:70
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Capturas"
+
+#: actions/snapshotadminpanel.php:65
#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "No estás suscrito a ese perfil."
+msgid "Manage snapshot configuration"
+msgstr "Cambiar la configuración del sitio"
-#: actions/subedit.php:83
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La frecuencia de captura debe ser un número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "En un trabajo programado"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Capturas de datos"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Las capturas se enviarán a este URL"
+
+#: actions/snapshotadminpanel.php:248
#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Guardar la configuración del sitio"
+
+#: actions/subedit.php:70
+msgid "You are not subscribed to that profile."
+msgstr "No te has suscrito a ese perfil."
+
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
-msgstr "No se pudo guardar suscripción."
+msgstr "No se ha podido guardar la suscripción."
+
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:55
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "No es usuario local."
+msgid "No such profile."
+msgstr "No existe tal archivo."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "No te has suscrito a ese perfil."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Suscrito"
#: actions/subscribers.php:50
-#, fuzzy, php-format
+#, php-format
msgid "%s subscribers"
-msgstr "Suscriptores %s"
+msgstr "%s suscriptores"
#: actions/subscribers.php:52
#, fuzzy, php-format
@@ -3987,7 +4112,7 @@ msgstr "Estas son las personas que escuchas sus avisos."
msgid "These are the people whose notices %s listens to."
msgstr "Estas son las personas que %s escucha sus avisos."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3997,36 +4122,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
-#, fuzzy, php-format
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
+#, php-format
msgid "%s is not listening to anyone."
-msgstr "%1$s ahora está escuchando "
+msgstr "%s no está escuchando a nadie."
-#: actions/subscriptions.php:194
-#, fuzzy
+#: actions/subscriptions.php:199
msgid "Jabber"
-msgstr "Jabber "
+msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Usuarios auto marcados con %s - página %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Feed de avisos de %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Feed de avisos de %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Feed de avisos de %s"
@@ -4081,7 +4205,7 @@ msgstr ""
msgid "No such tag."
msgstr "No existe ese tag."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método API en construcción."
@@ -4100,88 +4224,85 @@ msgid "User is not silenced."
msgstr "El usuario no tiene un perfil."
#: actions/unsubscribe.php:77
-#, fuzzy
msgid "No profile id in request."
-msgstr "Ningún perfil de Id en solicitud."
+msgstr "No hay id de perfil solicitado."
#: actions/unsubscribe.php:98
msgid "Unsubscribed"
msgstr "Desuscrito"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Usuario"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Configuración de usuarios en este sitio StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Límite para la bio inválido: Debe ser numérico."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Texto de bienvenida inválido. La longitud máx. es de 255 caracteres."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Suscripción predeterminada inválida : '%1$s' no es un usuario"
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Perfil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Límite de la bio"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Longitud máxima de bio de perfil en caracteres."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nuevos usuarios"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Bienvenida a nuevos usuarios"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Texto de bienvenida para nuevos usuarios (máx. 255 caracteres)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Suscripción predeterminada"
-#: actions/useradminpanel.php:241
-#, fuzzy
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Suscribirse automáticamente a quien quiera que se suscriba a mí (es mejor "
-"para no-humanos)"
+msgstr "Suscribir automáticamente nuevos usuarios a este usuario."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Invitaciones"
-#: actions/useradminpanel.php:255
-#, fuzzy
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
-msgstr "Invitacion(es) enviada(s)"
+msgstr "Invitaciones habilitadas"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4209,7 +4330,6 @@ msgstr "Aceptar"
#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
-#, fuzzy
msgid "Subscribe to this user"
msgstr "Suscribirse a este usuario"
@@ -4313,16 +4433,22 @@ msgstr "Miembros del grupo %s, página %d"
msgid "Search for more groups"
msgstr "Buscar más grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "No eres miembro de ese grupo"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "¡Actualizaciones de %1$s en %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4368,7 +4494,7 @@ msgstr ""
msgid "Plugins"
msgstr "Complementos"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sesiones"
@@ -4408,15 +4534,19 @@ msgstr "No es parte del grupo."
msgid "Group leave failed."
msgstr "Perfil de grupo"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "No se pudo actualizar el grupo."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
msgstr "No se pudo crear favorito."
#: classes/Message.php:45
-#, fuzzy
msgid "You are banned from sending direct messages."
-msgstr "Error al enviar mensaje directo."
+msgstr "Se te ha inhabilitado para enviar mensajes directos."
#: classes/Message.php:61
msgid "Could not insert message."
@@ -4426,27 +4556,27 @@ msgstr "No se pudo insertar mensaje."
msgid "Could not update message with new URI."
msgstr "No se pudo actualizar mensaje con nuevo URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Error de la BD al insertar la etiqueta clave: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4455,43 +4585,79 @@ msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Tienes prohibido publicar avisos en este sitio."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Error de BD al insertar respuesta: %s"
-
-#: classes/Notice.php:1271
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Se te ha prohibido la suscripción."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "El usuario te ha bloqueado."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "¡No estás suscrito!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "No se pudo eliminar la suscripción."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "No se pudo eliminar la suscripción."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "No se pudo eliminar la suscripción."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenido a %1$s, @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "No se pudo crear grupo."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "No se pudo configurar miembros de grupo."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "No se pudo configurar miembros de grupo."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "No se ha podido guardar la suscripción."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Cambia tus opciones de perfil"
@@ -4529,124 +4695,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Página sin título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegación de sitio primario"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Inicio"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil personal y línea de tiempo de amigos"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambia tu correo electrónico, avatar, contraseña, perfil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Conectarse"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Conectar a los servicios"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Conectarse"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Cambiar la configuración del sitio"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invita a amigos y colegas a unirse a %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Salir"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Salir de sitio"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Salir"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear una cuenta"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrarse"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ingresar a sitio"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ayuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inicio de sesión"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ayúdame!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Buscar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ayuda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Buscar personas o texto"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Buscar"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso de sitio"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locales"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso de página"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegación de sitio secundario"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ayuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Acerca de"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas Frecuentes"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidad"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Fuente"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Ponerse en contacto"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Insignia"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencia de software de StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4655,12 +4885,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblogueo de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblogueo."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4671,110 +4901,161 @@ msgstr ""
"disponible bajo la [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licencia de contenido del sitio"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Derechos de autor de contenido y datos por los colaboradores. Todos los "
"derechos reservados."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Todo"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "Licencia."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginación"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Después"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Antes"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "No puedes hacer cambios a este sitio."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Registro de usuario no permitido."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Todavía no se implementa comando."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Todavía no se implementa comando."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "¡No se pudo guardar tu configuración de Twitter!"
-#: lib/adminpanelaction.php:312
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
-msgstr "Confirmación de correo electrónico"
+msgstr "Configuración básica del sitio"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Sitio"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
-msgstr "SMS confirmación"
+msgstr "Configuración del diseño"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Diseño"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "SMS confirmación"
+msgstr "Configuración de usuario"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usuario"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuración de acceso"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS confirmación"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuración de sesiones"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Aviso de sitio"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS confirmación"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
#: lib/applicationeditform.php:136
msgid "Edit application"
-msgstr ""
+msgstr "Editar aplicación"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
@@ -4791,9 +5072,8 @@ msgid "Describe your application"
msgstr "Describir al grupo o tema"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "Fuente"
+msgstr "La URL de origen"
#: lib/applicationeditform.php:218
#, fuzzy
@@ -4802,7 +5082,7 @@ msgstr "El URL de página de inicio o blog del grupo or tema"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organización responsable de esta aplicación"
#: lib/applicationeditform.php:230
#, fuzzy
@@ -4815,15 +5095,15 @@ msgstr ""
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Navegador"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Escritorio"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Tipo de aplicación, de navegador o de escritorio"
#: lib/applicationeditform.php:297
msgid "Read-only"
@@ -4838,9 +5118,8 @@ msgid "Default access for this application: read-only, or read-write"
msgstr ""
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Eliminar"
+msgstr "Revocar"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4848,7 +5127,7 @@ msgstr ""
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Autor"
#: lib/attachmentlist.php:278
msgid "Provider"
@@ -4856,18 +5135,17 @@ msgstr "Proveedor"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Mensajes donde aparece este adjunto"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr ""
+msgstr "Etiquetas de este archivo adjunto"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
-#, fuzzy
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "Cambio de contraseña "
+msgstr "El cambio de contraseña ha fallado"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Cambio de contraseña "
@@ -4889,10 +5167,9 @@ msgid "Sorry, this command is not yet implemented."
msgstr "Disculpa, todavía no se implementa este comando."
#: lib/command.php:88
-#, fuzzy, php-format
+#, php-format
msgid "Could not find a user with nickname %s"
-msgstr ""
-"No se pudo actualizar el usuario con la dirección de correo confirmada."
+msgstr "No se pudo encontrar a nadie con el nombre de usuario %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
@@ -4912,9 +5189,8 @@ msgid ""
msgstr ""
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
msgid "Notice with that id does not exist"
-msgstr "Ningún perfil con ese ID."
+msgstr "No existe ningún mensaje con ese id"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
@@ -5023,80 +5299,89 @@ msgstr "Hubo un problema al guardar el aviso."
msgid "Specify the name of the user to subscribe to"
msgstr "Especificar el nombre del usuario a suscribir"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "No existe ese usuario."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Suscrito a %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especificar el nombre del usuario para desuscribirse de"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Desuscrito de %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Todavía no se implementa comando."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificación no activa."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "No se puede desactivar notificación."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificación activada."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "No se puede activar notificación."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Desuscrito de %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "No estás suscrito a nadie."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ya estás suscrito a estos usuarios:"
msgstr[1] "Ya estás suscrito a estos usuarios:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Nadie está suscrito a ti."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "No se pudo suscribir otro a ti."
msgstr[1] "No se pudo suscribir otro a ti."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "No eres miembro de ningún grupo"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Eres miembro de este grupo:"
msgstr[1] "Eres miembro de estos grupos:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5110,6 +5395,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5137,19 +5423,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ningún archivo de configuración encontrado. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir al instalador."
@@ -5207,11 +5493,11 @@ msgstr "Aceptar"
#: 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"
@@ -5249,6 +5535,11 @@ msgstr "Elegir tag para reducir lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5341,23 +5632,23 @@ msgstr "Error del sistema al cargar el archivo."
msgid "Not an image or corrupt file."
msgstr "No es una imagen o es un fichero corrupto."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato de imagen no soportado."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Se perdió nuestro archivo."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tipo de archivo desconocido"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5577,7 +5868,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "desde"
@@ -5668,6 +5959,12 @@ msgstr "Para"
msgid "Available characters"
msgstr "Caracteres disponibles"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Enviar"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5702,49 +5999,49 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "en"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "en contexto"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder este aviso."
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Aviso borrado"
@@ -5777,10 +6074,6 @@ msgstr "Error al insertar perfil remoto"
msgid "Duplicate notice"
msgstr "Duplicar aviso"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Se te ha prohibido la suscripción."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "No se pudo insertar una nueva suscripción."
@@ -5823,7 +6116,7 @@ msgstr "Tags en avisos de %s"
msgid "Unknown"
msgstr "Acción desconocida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Suscripciones"
@@ -5831,24 +6124,24 @@ msgstr "Suscripciones"
msgid "All subscriptions"
msgstr "Todas las suscripciones"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Suscriptores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Todos los suscriptores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de usuario"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Miembro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos los grupos"
@@ -5891,7 +6184,12 @@ msgstr "Responder este aviso."
msgid "Repeat this notice"
msgstr "Responder este aviso."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear este usuario de este grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5914,6 +6212,10 @@ msgstr "Buscar"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Buscar"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Buscar ayuda"
@@ -5967,35 +6269,14 @@ msgstr "Personas suscritas a %s"
msgid "Groups %s is a member of"
msgstr "%s es miembro de los grupos"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "El usuario te ha bloqueado."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "No se pudo suscribir."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "No se pudo suscribir otro a ti."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "¡No estás suscrito!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "No se pudo eliminar la suscripción."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invitar"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "No se pudo eliminar la suscripción."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Invita a amigos y colegas a unirse a %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6049,67 +6330,84 @@ msgstr "editar avatar"
msgid "User actions"
msgstr "Acciones de usuario"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Editar configuración del perfil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Enviar un mensaje directo a este usuario"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Mensaje"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil de usuario"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "hace unos segundos"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "hace un año"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
index c749a4161..a68568600 100644
--- a/locale/fa/LC_MESSAGES/statusnet.po
+++ b/locale/fa/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:41+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:22+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -20,70 +20,78 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "دسترسی"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "تنظیمات دیگر"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "ثبت نام"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "خصوصی"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Ùقط دعوت کردن"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "خصوصی"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "تنها آماده کردن دعوت نامه های ثبت نام."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "مسدود"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Ùقط دعوت کردن"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "غیر Ùعال کردن نام نوبسی جدید"
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "ذخیره‌کردن"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "مسدود"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "تنظیمات چهره"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "ذخیره‌کردن"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "چنین صÙحه‌ای وجود ندارد"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -97,52 +105,59 @@ msgstr "چنین صÙحه‌ای وجود ندارد"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "چنین کاربری وجود ندارد."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s کاربران مسدود شده، صÙحه‌ی %d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s و دوستان"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "خوراک دوستان %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "خوراک دوستان %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "خوراک دوستان %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "این خط‌زمانی %s و دوستانش است، اما هیچ‌یک تاکنون چیزی پست نکرده‌اند."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -151,7 +166,8 @@ msgstr ""
"پیگیری اÙراد بیش‌تری بشوید [به یک گروه بپیوندید](%%action.groups%%) یا خودتان "
"چیزی را ارسال کنید."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -160,7 +176,7 @@ msgstr ""
"اولین کسی باشید که در [این موضوع](%%%%action.newnotice%%%%?status_textarea=%"
"s) پیام می‌Ùرستد."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -169,12 +185,13 @@ msgstr ""
"چرا [ثبت نام](%%%%action.register%%%%) نمی‌کنید Ùˆ سپس با Ùرستادن پیام توجه %s "
"را جلب کنید."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "شما و دوستان"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "به روز رسانی از %1$ و دوستان در %2$"
@@ -187,20 +204,20 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "رابط مورد نظر پیدا نشد."
@@ -232,8 +249,9 @@ msgstr "نمی‌توان کاربر را به‌هنگام‌سازی کرد."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "کاربر هیچ شناس‌نامه‌ای ندارد."
@@ -258,7 +276,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -371,68 +389,68 @@ msgstr "نمی‌توان کاربر منبع را تعیین کرد."
msgid "Could not find target user."
msgstr "نمی‌توان کاربر هد٠را پیدا کرد."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "لقب باید شامل حرو٠کوچک Ùˆ اعداد Ùˆ بدون Ùاصله باشد."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "این لقب در حال حاضر ثبت شده است. لطÙا یکی دیگر انتخاب کنید."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "لقب نا معتبر."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "برگهٔ آغازین یک نشانی معتبر نیست."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "نام کامل طولانی است (۲۵۵ حر٠در حالت بیشینه(."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "توصی٠بسیار زیاد است (حداکثر %d حرÙ)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "مکان طولانی است (حداکثر Û²ÛµÛµ حرÙ)"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "نام‌های مستعار بسیار زیاد هستند! حداکثر %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "نام‌مستعار غیر مجاز: «%s»"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "نام‌مستعار «%s» ازپیش گرÙته‌شده‌است. یکی دیگر را امتحان کنید."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "نام و نام مستعار شما نمی تواند یکی باشد ."
@@ -443,15 +461,15 @@ msgstr "نام و نام مستعار شما نمی تواند یکی باشد .
msgid "Group not found!"
msgstr "گروه یاÙت نشد!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "شما از پیش یک عضو این گروه هستید."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "دسترسی شما به گروه توسط مدیر آن محدود شده است."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "عضویت %s در گروه %s نا موÙÙ‚ بود."
@@ -460,7 +478,7 @@ msgstr "عضویت %s در گروه %s نا موÙÙ‚ بود."
msgid "You are not a member of this group."
msgstr "شما یک عضو این گروه نیستید."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "خارج شدن %s از گروه %s نا موÙÙ‚ بود"
@@ -492,7 +510,7 @@ msgstr "اندازه‌ی نادرست"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -501,7 +519,7 @@ msgstr "اندازه‌ی نادرست"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -534,7 +552,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -557,13 +575,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "حساب کاربری"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -641,23 +659,11 @@ msgstr "قالب پشتیبانی نشده."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / دوست داشتنی از %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s به روز رسانی های دوست داشتنی %s / %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "خط زمانی %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "به روز رسانی‌های %1$s در %2$s"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -683,17 +689,17 @@ msgstr "%s به روز رسانی های عموم"
msgid "Repeated to %s"
msgstr ""
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "تکرار %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "پیام‌هایی که با %s نشانه گزاری شده اند."
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s"
@@ -709,8 +715,7 @@ msgstr "چنین پیوستی وجود ندارد."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "بدون لقب."
@@ -722,7 +727,7 @@ msgstr "بدون اندازه."
msgid "Invalid size."
msgstr "اندازه‌ی نادرست"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "چهره"
@@ -740,30 +745,30 @@ msgid "User without matching profile"
msgstr "کاربر بدون مشخصات"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "تنظیمات چهره"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "اصلی"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "پیش‌نمایش"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "حذÙ"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "پایین‌گذاری"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "برش"
@@ -771,7 +776,7 @@ msgstr "برش"
msgid "Pick a square area of the image to be your avatar"
msgstr "یک مربع از عکس خود را انتخاب کنید تا چهره‌ی شما باشد."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Ùایل اطلاعات خود را Ú¯Ù… کرده ایم."
@@ -807,22 +812,22 @@ msgstr ""
"نخواهید شد"
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "خیر"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "کاربر را مسدود نکن"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "بله"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "کاربر را مسدود کن"
@@ -830,39 +835,43 @@ msgstr "کاربر را مسدود کن"
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "چنین گروهی وجود ندارد."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s کاربران مسدود شده"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s کاربران مسدود شده، صÙحه‌ی %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Ùهرستی از اÙراد مسدود شده در پیوستن به این گروه."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "آزاد کردن کاربر در پیوستن به گروه"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "آزاد سازی"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "آزاد سازی کاربر"
@@ -919,7 +928,7 @@ msgid "Conversation"
msgstr "مکالمه"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "پیام‌ها"
@@ -941,7 +950,7 @@ msgstr "شما یک عضو این گروه نیستید."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -970,12 +979,13 @@ msgstr "این پیام را پاک نکن"
msgid "Delete this application"
msgstr "این پیام را پاک کن"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "شما به سیستم وارد نشده اید."
@@ -1004,7 +1014,7 @@ msgstr "آیا اطمینان دارید Ú©Ù‡ می‌خواهید این پیاÙ
msgid "Do not delete this notice"
msgstr "این پیام را پاک نکن"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "این پیام را پاک کن"
@@ -1020,7 +1030,7 @@ msgstr "شما Ùقط می‌توانید کاربران محلی را پاک Ú©
msgid "Delete user"
msgstr "حذ٠کاربر"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1028,12 +1038,12 @@ msgstr ""
"آیا مطمئن هستید که می‌خواهید این کاربر را پاک کنید؟ با این کار تمام اطلاعات "
"پاک و بدون برگشت خواهند بود."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "حذ٠این کاربر"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "طرح"
@@ -1136,6 +1146,18 @@ msgstr "بازگرداندن طرح‌های پیش‌Ùرض"
msgid "Reset back to default"
msgstr "برگشت به حالت پیش گزیده"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "ذخیره‌کردن"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "ذخیره‌کردن طرح"
@@ -1236,30 +1258,30 @@ msgstr "ویرایش گروه %s"
msgid "You must be logged in to create a group."
msgstr "برای ساخت یک گروه، باید وارد شده باشید."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "برای ویرایش گروه، باید یک مدیر باشید."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "از این روش برای ویرایش گروه استÙاده کنید."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "توصی٠بسیار زیاد است (حداکثر %d حرÙ)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "نمی‌توان نام‌های مستعار را ساخت."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "گزینه‌ها ذخیره شدند."
@@ -1378,7 +1400,7 @@ msgid "Cannot normalize that email address"
msgstr "نمی‌توان نشانی را قانونی کرد"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "یک آدرس ایمیل معتبر نیست."
@@ -1568,6 +1590,25 @@ msgstr "چنین پرونده‌ای وجود ندارد."
msgid "Cannot read file."
msgstr "نمی‌توان پرونده را خواند."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "اندازه‌ی نادرست"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "شما نمی توانید کاربری را در این سایت ساکت کنید."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "کاربر قبلا ساکت شده است."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1597,7 +1638,7 @@ msgstr "هم اکنون دسترسی کاربر به گروه مسدود شده
msgid "User is not a member of group."
msgstr "کاربر عضو گروه نیست."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "دسترسی کاربر به گروه را مسدود کن"
@@ -1629,92 +1670,98 @@ msgstr ""
msgid "You must be logged in to edit a group."
msgstr "برای ویرایش گروه باید وارد شوید."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "ظاهر گروه"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr "ظاهر گروه را تغییر دهید تا شما را راضی کند."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "نمی‌توان ظاهر را به روز کرد."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "ترجیحات طرح ذخیره شد."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "نشان گروه"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "شما می‌توانید یک نشان برای گروه خود با بیشینه حجم %s بÙرستید."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "کاربر بدون مشخصات"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "یک ناحیه‌ی مربع از تصویر را انتخاب کنید تا به عنوان نشان باشد."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "نشان به‌هنگام‌سازی شد."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "اشکال در ارسال نشان."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "اعضای گروه %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "یک Ùهرست از کاربران در این گروه"
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "مدیر"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "بازداشتن"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "کاربر یک مدیر گروه شود"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "مدیر شود"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "این کاربر یک مدیر شود"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "خط زمانی %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "به روز رسانی کابران %1$s در %2$s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "گروه‌ها"
@@ -1968,16 +2015,19 @@ msgstr "پیام خصوصی"
msgid "Optionally add a personal message to the invitation."
msgstr "اگر دوست دارید می‌توانید یک پیام به همراه دعوت نامه ارسال کنید."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Ùرستادن"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s شما را دعوت کرده است که در %2$s به آن‌ها بپیوندید."
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2012,7 +2062,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "برای پیوستن به یک گروه، باید وارد شده باشید."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "بدون لقب."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "ملحق شدن به گروه"
@@ -2021,11 +2076,11 @@ msgstr "ملحق شدن به گروه"
msgid "You must be logged in to leave a group."
msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "شما یک کاربر این گروه نیستید."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s گروه %s را ترک کرد."
@@ -2042,8 +2097,7 @@ msgstr "نام کاربری یا رمز عبور نادرست."
msgid "Error setting user. You are probably not authorized."
msgstr "خطا در تنظیم کاربر. شما احتمالا اجازه ی این کار را ندارید."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ورود"
@@ -2301,8 +2355,8 @@ msgstr "نوع محتوا "
msgid "Only "
msgstr " Ùقط"
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
@@ -2448,7 +2502,8 @@ msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد."
msgid "Password saved."
msgstr "گذرواژه ذخیره شد."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "مسیر ها"
@@ -2481,7 +2536,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "سایت"
@@ -2569,7 +2623,7 @@ msgstr "شاخهٔ تصاویر پیش‌زمینه"
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "هیچ وقت"
@@ -2625,11 +2679,11 @@ msgstr "یک برچسب کاربری معتبر نیست: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "کاربران خود برچسب‌گذاری شده با %s - صÙحهٔ %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوای آگهی نامعتبر"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2654,7 +2708,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "Û±-Û¶Û´ کاراکتر Ú©ÙˆÚ†Ú© یا اعداد، بدون نقطه گذاری یا Ùاصله"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "نام‌کامل"
@@ -2682,7 +2736,7 @@ msgid "Bio"
msgstr "شرح‌حال"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2707,7 +2761,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "زبان"
@@ -2733,7 +2787,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "منطقه‌ی زمانی انتخاب نشده است."
@@ -2746,23 +2800,24 @@ msgstr "کلام بسیار طولانی است( حداکثر ÛµÛ° کاراکتØ
msgid "Invalid tag: \"%s\""
msgstr "نشان نادرست »%s«"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "نمی‌توان تنظیمات مکانی را تنظیم کرد."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "نمی‌توان شناسه را ذخیره کرد."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "نمی‌توان نشان را ذخیره کرد."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "تنظیمات ذخیره شد."
@@ -2775,45 +2830,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "خط زمانی عمومی، صÙحه‌ی %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "خط زمانی عمومی"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "اولین کسی باشید Ú©Ù‡ پیام می‌Ùرستد!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr "چرا [ثبت نام](%%action.register%%) نمی‌کنید Ùˆ اولین پیام را نمی‌Ùرستید؟"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2822,7 +2877,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2995,8 +3050,7 @@ msgstr "با عرض تاسÙØŒ کد دعوت نا معتبر است."
msgid "Registration successful"
msgstr "ثبت نام با موÙقیت انجام شد."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "ثبت نام"
@@ -3035,7 +3089,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "پست الکترونیکی"
@@ -3123,7 +3177,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3159,7 +3213,7 @@ msgstr "شما نمی توانید Ø¢Ú¯Ù‡ÛŒ خودتان را تکرار Ú©Ù†ÛŒØ
msgid "You already repeated that notice."
msgstr "شما قبلا آن آگهی را تکرار کردید."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr ""
@@ -3167,47 +3221,47 @@ msgstr ""
msgid "Repeated!"
msgstr ""
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "پاسخ‌های به %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "پاسخ‌های به %s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "خوراک پاسخ‌ها برای %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "خوراک پاسخ‌ها برای %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "خوراک پاسخ‌ها برای %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr "این خط‌زمانی %s و دوستانش است، اما هیچ‌یک تاکنون چیزی پست نکرده‌اند."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3221,6 +3275,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "شما نمی توانید کاربری را در این سایت ساکت کنید."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "کاربر بدون مشخصات"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3234,8 +3298,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3260,8 +3325,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr ""
@@ -3295,8 +3360,8 @@ msgstr "صÙحه بندى"
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "آمار"
@@ -3358,35 +3423,35 @@ msgstr "دوست داشتنی های %s"
msgid "Could not retrieve favorite notices."
msgstr "ناتوان در بازیابی آگهی های محبوب."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr ""
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr ""
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr ""
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3394,7 +3459,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "این یک راه است برای به اشتراک گذاشتن آنچه که دوست دارید."
@@ -3408,67 +3473,67 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "نام های مستعار"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "اعضا"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "هیچ"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "همه ی اعضا"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "ساخته شد"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3478,7 +3543,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3487,7 +3552,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3601,149 +3666,140 @@ msgid "User is already silenced."
msgstr "کاربر قبلا ساکت شده است."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "تنظیمات پایه ای برای این سایت StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "نام سایت باید طولی غیر صÙر داشته باشد."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "شما باید یک آدرس ایمیل قابل قبول برای ارتباط داشته باشید"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "نام وب‌گاه"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "نام وب‌گاه شما، مانند «میکروبلاگ شرکت شما»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "أورده شده به وسیله ی"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلی"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "منطقه ÛŒ زمانی پیش Ùرض"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "منظقه ÛŒ زمانی پیش Ùرض برای سایت؛ معمولا UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "زبان پیش Ùرض سایت"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "محدودیت ها"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "محدودیت متن"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "بیشینهٔ تعداد حرو٠برای آگهی‌ها"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"چه مدت کاربران باید منتظر بمانند ( به ثانیه ) تا همان چیز را مجددا ارسال "
"کنند."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "خبر سایت"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "پیام جدید"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "نمی‌توان تنظیمات طرح‌تان را ذخیره کرد."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "خبر سایت"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "خبر سایت"
+
#: actions/smssettings.php:58
#, fuzzy
msgid "SMS settings"
@@ -3840,19 +3896,90 @@ msgstr ""
msgid "No code entered"
msgstr "کدی وارد نشد"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "تغییر پیکربندی سایت"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "تنظیمات چهره"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "شما به این پروÙيل متعهد نشدید"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr ""
-#: actions/subscribe.php:55
-msgid "Not a local user."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "چنین پرونده‌ای وجود ندارد."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "شما به این پروÙيل متعهد نشدید"
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr ""
@@ -3912,7 +4039,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3922,35 +4049,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr ""
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "کاربران خود برچسب‌گذاری شده با %s - صÙحهٔ %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -4000,7 +4127,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "روش API در دست ساخت."
@@ -4024,76 +4151,78 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "کاربر"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr ""
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "حداکثر طول یک زندگی نامه(در پروÙایل) بر حسب کاراکتر."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr ""
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "خوشامدگویی کاربر جدید"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "پیام خوشامدگویی برای کاربران جدید( حداکثر 255 کاراکتر)"
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr ""
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr ""
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "دعوت نامه ها"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "دعوت نامه ها Ùعال شدند"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "خواه به کاربران اجازه ی دعوت کردن کاربران جدید داده شود."
@@ -4213,16 +4342,22 @@ msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
msgid "Search for more groups"
msgstr "جستجو برای گروه های بیشتر"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "به روز رسانی‌های %1$s در %2$s"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4266,7 +4401,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "شخصی"
@@ -4306,6 +4441,11 @@ msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
msgid "Group leave failed."
msgstr ""
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4323,27 +4463,27 @@ msgstr "پیغام نمی تواند درج گردد"
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"تعداد خیلی زیاد آگهی و بسیار سریع؛ استراحت کنید و مجددا دقایقی دیگر ارسال "
"کنید."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4351,42 +4491,76 @@ msgstr ""
"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
"ارسال کنید."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "شما از Ùرستادن پست در این سایت مردود شدید ."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:848
+#: classes/Notice.php:1459
#, php-format
-msgid "DB error inserting reply: %s"
+msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/Notice.php:1235
-#, php-format
-msgid "RT @%1$s %2$s"
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "قبلا تایید شده !"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "تایید نشده!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "نمی‌توان تصدیق پست الکترونیک را پاک کرد."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
msgstr ""
-#: classes/User.php:385
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "خوش امدید به %1$s , @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "نمیتوان گروه را تشکیل داد"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "نمیتوان گروه را تشکیل داد"
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "تنضبمات پروÙيلتان را تغیر دهید"
@@ -4424,136 +4598,199 @@ msgstr "%s گروه %s را ترک کرد."
msgid "Untitled page"
msgstr "صÙحه ÛŒ بدون عنوان"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "خانه"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "شخصی"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "آدرس ایمیل، آواتار، کلمه ÛŒ عبور، پروÙایل خود را تغییر دهید"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "وصل‌شدن"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "متصل شدن به خدمات"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "وصل‌شدن"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "تغییر پیکربندی سایت"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "دعوت‌کردن"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "مدیر"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr " به شما ملحق شوند %s دوستان و همکاران را دعوت کنید تا در"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "خروج"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "دعوت‌کردن"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "خارج شدن از سایت ."
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "خروج"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "یک حساب کاربری بسازید"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "ثبت نام"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "ورود به وب‌گاه"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ú©Ù…Ú©"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ورود"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "به من کمک کنید!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "جست‌وجو"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ú©Ù…Ú©"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "جستجو برای شخص با متن"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "جست‌وجو"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "خبر سایت"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "دید محلی"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "خبر صÙحه"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ú©Ù…Ú©"
+
+#: lib/action.php:754
msgid "About"
msgstr "دربارهٔ"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "سوال‌های رایج"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصی"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "منبع"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "تماس"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet مجوز نرم اÙزار"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4561,97 +4798,151 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "مجوز محتویات سایت"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "همه "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "مجوز."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "صÙحه بندى"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "بعد از"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل از"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "شما نمی توانید در این سایت تغیری ایجاد کنید"
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "اجازه‌ی ثبت نام داده نشده است."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "نمی توان تنظیمات طراحی شده را پاک کرد ."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "پیکره بندی اصلی سایت"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "سایت"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "طرح"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "پیکره بندی اصلی سایت"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "کاربر"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "پیکره بندی اصلی سایت"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "پیکره بندی اصلی سایت"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "خبر سایت"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "پیکره بندی اصلی سایت"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4743,12 +5034,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "تغییر گذرواژه"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "تغییر گذرواژه"
@@ -4904,77 +5195,87 @@ msgstr "خطا هنگام ذخیره ی آگهی"
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "چنین کاربری وجود ندارد."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "دستور هنوز اجرا نشده"
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "ناتوان در خاموش کردن آگاه سازی."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "آگاه سازی Ùعال است."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "ناتوان در روشن کردن آگاه سازی."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Ùرمان ورود از کار اÙتاده است"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "مشترک‌ها"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "شما توسط هیچ کس تصویب نشده اید ."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "هم اکنون شما این کاربران را دنبال می‌کنید: "
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "هیچکس شما را تایید نکرده ."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "هیچکس شما را تایید نکرده ."
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "شما در هیچ گروهی عضو نیستید ."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "شما یک عضو این گروه نیستید."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4988,6 +5289,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5015,19 +5317,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "شما ممکن است بخواهید نصاب را اجرا کنید تا این را تعمیر کند."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "برو به نصاب."
@@ -5125,6 +5427,11 @@ msgstr ""
msgid "Go"
msgstr "برو"
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5215,23 +5522,23 @@ msgstr "خطای سیستم ارسال Ùایل."
msgid "Not an image or corrupt file."
msgstr "تصویر یا Ùایل خرابی نیست"
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Ùرمت(Ùایل) عکس پشتیبانی نشده."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Ùایلمان Ú¯Ù… شده"
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "نوع Ùایل پشتیبانی نشده"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "مگابایت"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "کیلوبایت"
@@ -5441,7 +5748,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "از"
@@ -5532,6 +5839,12 @@ msgstr "به"
msgid "Available characters"
msgstr "کاراکترهای موجود"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Ùرستادن"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "یک Ø¢Ú¯Ù‡ÛŒ بÙرستید"
@@ -5565,48 +5878,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "در"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "در زمینه"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "تکرار از"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "به این آگهی جواب دهید"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "جواب دادن"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "آگهی تکرار شد"
@@ -5638,10 +5951,6 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5683,7 +5992,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "اشتراک‌ها"
@@ -5691,23 +6000,23 @@ msgstr "اشتراک‌ها"
msgid "All subscriptions"
msgstr "تمام اشتراک‌ها"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "مشترک‌ها"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "تمام مشترک‌ها"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "شناسه کاربر"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو شده از"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "تمام گروه‌ها"
@@ -5748,7 +6057,12 @@ msgstr "به این آگهی جواب دهید"
msgid "Repeat this notice"
msgstr ""
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "دسترسی کاربر را به گروه مسدود کن"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5768,6 +6082,10 @@ msgstr "جست‌وجوی وب‌گاه"
msgid "Keyword(s)"
msgstr "کلمه(های) کلیدی"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "جست‌وجو"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "راهنمای جستجو"
@@ -5819,33 +6137,14 @@ msgstr ""
msgid "Groups %s is a member of"
msgstr "هست عضو %s گروه"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "قبلا تایید شده !"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr ""
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr ""
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr ""
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "تایید نشده!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr ""
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "دعوت‌کردن"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr ""
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr " به شما ملحق شوند %s دوستان و همکاران را دعوت کنید تا در"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -5897,67 +6196,82 @@ msgstr "ویرایش اواتور"
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "ویرایش تنظیمات پروÙيل"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "ویرایش"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "پیام مستقیم به این کاربر بÙرستید"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "پیام"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "پروÙایل کاربر"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "چند ثانیه پیش"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "حدود یک دقیقه پیش"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "حدود %d دقیقه پیش"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "حدود یک ساعت پیش"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "حدود %d ساعت پیش"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "حدود یک روز پیش"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "حدود %d روز پیش"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "حدود یک ماه پیش"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "حدود %d ماه پیش"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "حدود یک سال پیش"
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index 80a85e1d1..b4978769f 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,82 +10,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:39+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:19+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Hyväksy"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Profiilikuva-asetukset"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Rekisteröidy"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Yksityisyys"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "Kutsu"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Estä"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Tallenna"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Profiilikuva-asetukset"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Tallenna"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Sivua ei ole."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -99,46 +106,53 @@ msgstr "Sivua ei ole."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Käyttäjää ei ole."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s ja kaverit, sivu %d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s ja kaverit"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Käyttäjän %s kavereiden syöte (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Käyttäjän %s kavereiden syöte (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Käyttäjän %s kavereiden syöte (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -146,7 +160,7 @@ msgstr ""
"Tämä on käyttäjän %s ja kavereiden aikajana, mutta kukaan ei ole lähettyänyt "
"vielä mitään."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -155,7 +169,8 @@ msgstr ""
"Kokeile useamman käyttäjän tilaamista, [liity ryhmään] (%%action.groups%%) "
"tai lähetä päivitys itse."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -164,19 +179,20 @@ msgstr ""
"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
"newnotice%%%%?status_textarea=%s)!"
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Sinä ja kaverit"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
@@ -189,20 +205,20 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metodia ei löytynyt!"
@@ -236,8 +252,9 @@ msgstr "Ei voitu päivittää käyttäjää."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Käyttäjällä ei ole profiilia."
@@ -262,7 +279,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -381,7 +398,7 @@ msgstr "Julkista päivitysvirtaa ei saatu."
msgid "Could not find target user."
msgstr "Ei löytynyt yhtään päivitystä."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -389,62 +406,62 @@ msgstr ""
"Käyttäjätunnuksessa voi olla ainoastaan pieniä kirjaimia ja numeroita ilman "
"välilyöntiä."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Tunnus on jo käytössä. Yritä toista tunnusta."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Tuo ei ole kelvollinen tunnus."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Kotisivun verkko-osoite ei ole toimiva."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Koko nimi on liian pitkä (max 255 merkkiä)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "kuvaus on liian pitkä (max 140 merkkiä)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Kotipaikka on liian pitkä (max 255 merkkiä)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Liikaa aliaksia. Maksimimäärä on %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Virheellinen alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias \"%s\" on jo käytössä. Yritä toista aliasta."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias ei voi olla sama kuin ryhmätunnus."
@@ -455,15 +472,15 @@ msgstr "Alias ei voi olla sama kuin ryhmätunnus."
msgid "Group not found!"
msgstr "Ryhmää ei löytynyt!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Sinä kuulut jo tähän ryhmään."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Sinut on estetty osallistumasta tähän ryhmään ylläpitäjän toimesta."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
@@ -472,7 +489,7 @@ msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
msgid "You are not a member of this group."
msgstr "Sinä et kuulu tähän ryhmään."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
@@ -504,7 +521,7 @@ msgstr "Koko ei kelpaa."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -513,7 +530,7 @@ msgstr "Koko ei kelpaa."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -550,7 +567,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -573,13 +590,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Käyttäjätili"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -659,23 +676,11 @@ msgstr "Formaattia ei ole tuettu."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Käyttäjän %s suosikit"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s aikajana"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -702,17 +707,17 @@ msgstr "%s päivitykset kaikilta!"
msgid "Repeated to %s"
msgstr "Vastaukset käyttäjälle %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Vastaukset käyttäjälle %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Päivitykset joilla on tagi %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
@@ -728,8 +733,7 @@ msgstr "Liitettä ei ole."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Tunnusta ei ole."
@@ -741,7 +745,7 @@ msgstr "Kokoa ei ole."
msgid "Invalid size."
msgstr "Koko ei kelpaa."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Kuva"
@@ -758,30 +762,30 @@ msgid "User without matching profile"
msgstr "Käyttäjälle ei löydy profiilia"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Profiilikuva-asetukset"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Alkuperäinen"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Esikatselu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Poista"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Lataa"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Rajaa"
@@ -789,7 +793,7 @@ msgstr "Rajaa"
msgid "Pick a square area of the image to be your avatar"
msgstr "Valitse neliön muotoinen alue kuvasta profiilikuvaksi"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Tiedoston data hävisi."
@@ -822,22 +826,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Ei"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Älä estä tätä käyttäjää"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Kyllä"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Estä tämä käyttäjä"
@@ -845,39 +849,43 @@ msgstr "Estä tämä käyttäjä"
msgid "Failed to save block information."
msgstr "Käyttäjän estotiedon tallennus epäonnistui."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Tuota ryhmää ei ole."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "Käyttäjän profiili"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s ja kaverit, sivu %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Lista käyttäjistä, jotka ovat estetty liittymästä tähän ryhmään."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Poista käyttäjän esto ryhmästä"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Poista esto"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Poista esto tältä käyttäjältä"
@@ -935,7 +943,7 @@ msgid "Conversation"
msgstr "Keskustelu"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Päivitykset"
@@ -958,7 +966,7 @@ msgstr "Sinä et kuulu tähän ryhmään."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Istuntoavaimesi kanssa oli ongelma."
@@ -984,12 +992,13 @@ msgstr "Älä poista tätä päivitystä"
msgid "Delete this application"
msgstr "Poista tämä päivitys"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Et ole kirjautunut sisään."
@@ -1018,7 +1027,7 @@ msgstr "Oletko varma että haluat poistaa tämän päivityksen?"
msgid "Do not delete this notice"
msgstr "Älä poista tätä päivitystä"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Poista tämä päivitys"
@@ -1035,19 +1044,19 @@ msgstr "Et voi poistaa toisen käyttäjän päivitystä."
msgid "Delete user"
msgstr "Poista käyttäjä"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Poista tämä päivitys"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Ulkoasu"
@@ -1155,6 +1164,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Tallenna"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1258,30 +1279,30 @@ msgstr "Muokkaa ryhmää %s"
msgid "You must be logged in to create a group."
msgstr "Sinun pitää olla kirjautunut sisään jotta voit luoda ryhmän."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Sinun pitää olla ylläpitäjä, jotta voit muokata ryhmää"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Käytä tätä lomaketta muokataksesi ryhmää."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "kuvaus on liian pitkä (max %d merkkiä)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Ei voitu päivittää ryhmää."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Ei voitu lisätä aliasta."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Asetukset tallennettu."
@@ -1404,7 +1425,7 @@ msgid "Cannot normalize that email address"
msgstr "Ei voida normalisoida sähköpostiosoitetta"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Tuo ei ole kelvollinen sähköpostiosoite."
@@ -1598,6 +1619,25 @@ msgstr "Tiedostoa ei ole."
msgid "Cannot read file."
msgstr "Tiedostoa ei voi lukea."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Koko ei kelpaa."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Et voi lähettää viestiä tälle käyttäjälle."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Käyttäjä on asettanut eston sinulle."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1628,7 +1668,7 @@ msgstr "Käyttäjä on asettanut eston sinulle."
msgid "User is not a member of group."
msgstr "Käyttäjä ei kuulu tähän ryhmään."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Estä käyttäjä ryhmästä"
@@ -1662,92 +1702,98 @@ msgid "You must be logged in to edit a group."
msgstr ""
"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Ryhmän ulkoasu"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ei voitu päivittää sinun sivusi ulkoasua."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Ulkoasuasetukset tallennettu."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Ryhmän logo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Käyttäjälle ei löydy profiilia"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Valitse neliön muotoinen alue kuvasta logokuvaksi"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo päivitetty."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Logon päivittäminen epäonnistui."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Ryhmän %s jäsenet"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "Ryhmän %s jäsenet, sivu %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Lista ryhmän käyttäjistä."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Ylläpito"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Estä"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Tee tästä käyttäjästä ylläpitäjä"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tee ylläpitäjäksi"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Tee tästä käyttäjästä ylläpitäjä"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s aikajana"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Ryhmän %1$s käyttäjien päivitykset palvelussa %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Ryhmät"
@@ -2003,16 +2049,19 @@ msgstr "Henkilökohtainen viesti"
msgid "Optionally add a personal message to the invitation."
msgstr "Voit myös lisätä oman viestisi kutsuun"
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Lähetä"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s on kutsunut sinut liittymään palveluun %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2072,7 +2121,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Sinun pitää olla kirjautunut sisään, jos haluat liittyä ryhmään."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Tunnusta ei ole."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s liittyi ryhmään %s"
@@ -2081,11 +2135,11 @@ msgstr "%s liittyi ryhmään %s"
msgid "You must be logged in to leave a group."
msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Sinä et kuulu tähän ryhmään."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s erosi ryhmästä %s"
@@ -2103,8 +2157,7 @@ msgstr "Väärä käyttäjätunnus tai salasana"
msgid "Error setting user. You are probably not authorized."
msgstr "Sinulla ei ole valtuutusta tähän."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Kirjaudu sisään"
@@ -2365,8 +2418,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@@ -2512,7 +2565,8 @@ msgstr "Uutta salasanaa ei voida tallentaa."
msgid "Password saved."
msgstr "Salasana tallennettu."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Polut"
@@ -2545,7 +2599,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "Kutsu"
@@ -2641,7 +2694,7 @@ msgstr "Taustakuvan hakemisto"
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Palauta"
@@ -2702,11 +2755,11 @@ msgstr "Ei sallittu henkilötagi: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Käyttäjät joilla henkilötagi %s - sivu %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Päivityksen sisältö ei kelpaa"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2733,7 +2786,7 @@ msgstr ""
"välilyöntejä"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Koko nimi"
@@ -2761,7 +2814,7 @@ msgid "Bio"
msgstr "Tietoja"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2788,7 +2841,7 @@ msgstr ""
"Kuvaa itseäsi henkilötageilla (sanoja joissa voi olla muita kirjaimia kuin "
"ääkköset, numeroita, -, ., ja _), pilkulla tai välilyönnillä erotettuna"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Kieli"
@@ -2816,7 +2869,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "\"Tietoja\" on liian pitkä (max 140 merkkiä)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aikavyöhykettä ei ole valittu."
@@ -2829,24 +2882,25 @@ msgstr "Kieli on liian pitkä (max 50 merkkiä)."
msgid "Invalid tag: \"%s\""
msgstr "Virheellinen tagi: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Ei voitu asettaa käyttäjälle automaattista tilausta."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Tageja ei voitu tallentaa."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Ei voitu tallentaa profiilia."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Tageja ei voitu tallentaa."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Asetukset tallennettu."
@@ -2859,45 +2913,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Julkista päivitysvirtaa ei saatu."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Julkinen aikajana, sivu %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Julkinen aikajana"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Julkinen syöte (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Julkisen Aikajanan Syöte (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Julkinen syöte (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Ole ensimmäinen joka lähettää päivityksen!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2906,7 +2960,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3083,8 +3137,7 @@ msgstr "Virheellinen kutsukoodin."
msgid "Registration successful"
msgstr "Rekisteröityminen onnistui"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Rekisteröidy"
@@ -3125,7 +3178,7 @@ msgid "Same as password above. Required."
msgstr "Sama kuin ylläoleva salasana. Pakollinen."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Sähköposti"
@@ -3235,7 +3288,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Profiilisi URL-osoite toisessa yhteensopivassa mikroblogauspalvelussa"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Tilaa"
@@ -3279,7 +3332,7 @@ msgstr "Et voi rekisteröityä, jos et hyväksy lisenssiehtoja."
msgid "You already repeated that notice."
msgstr "Sinä olet jo estänyt tämän käyttäjän."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Luotu"
@@ -3289,33 +3342,33 @@ msgstr "Luotu"
msgid "Repeated!"
msgstr "Luotu"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Vastaukset käyttäjälle %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Viesti käyttäjälle %1$s, %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Päivityksien syöte käyttäjälle %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Päivityksien syöte käyttäjälle %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Päivityksien syöte käyttäjälle %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3324,14 +3377,14 @@ msgstr ""
"Tämä on käyttäjän %s aikajana, mutta %s ei ole lähettänyt vielä yhtään "
"päivitystä."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3345,6 +3398,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Et voi lähettää viestiä tälle käyttäjälle."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Käyttäjälle ei löydy profiilia"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3360,8 +3423,9 @@ msgstr "Et voi lähettää viestiä tälle käyttäjälle."
msgid "User is already sandboxed."
msgstr "Käyttäjä on asettanut eston sinulle."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3386,8 +3450,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Profiilikuva-asetukset"
@@ -3422,8 +3486,8 @@ msgstr "Sivutus"
msgid "Description"
msgstr "Kuvaus"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tilastot"
@@ -3484,35 +3548,35 @@ msgstr "Käyttäjän %s suosikkipäivitykset"
msgid "Could not retrieve favorite notices."
msgstr "Ei saatu haettua suosikkipäivityksiä."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Käyttäjän %s kavereiden syöte (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Käyttäjän %s kavereiden syöte (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Käyttäjän %s kavereiden syöte (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3520,7 +3584,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3534,67 +3598,67 @@ msgstr "Ryhmä %s"
msgid "%1$s group, page %2$d"
msgstr "Ryhmän %s jäsenet, sivu %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Ryhmän profiili"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Huomaa"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliakset"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Ryhmän toiminnot"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syöte ryhmän %s päivityksille (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Käyttäjän %s lähetetyt viestit"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Jäsenet"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Tyhjä)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Kaikki jäsenet"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Luotu"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3604,7 +3668,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3615,7 +3679,7 @@ msgstr ""
"**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Ylläpitäjät"
@@ -3733,150 +3797,140 @@ msgid "User is already silenced."
msgstr "Käyttäjä on asettanut eston sinulle."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Tuo ei ole kelvollinen sähköpostiosoite"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Uusi sähköpostiosoite päivityksien lähettämiseen palveluun %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Paikalliset näkymät"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ensisijainen kieli"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Uusi viesti"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Twitter-asetuksia ei voitu tallentaa!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Palvelun ilmoitus"
#: actions/smssettings.php:58
#, fuzzy
@@ -3980,19 +4034,90 @@ msgstr ""
msgid "No code entered"
msgstr "Koodia ei ole syötetty."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Ensisijainen sivunavigointi"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Profiilikuva-asetukset"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Tilausta ei onnistuttu tallentamaan."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Käyttäjä ei ole rekisteröitynyt tähän palveluun."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Tiedostoa ei ole."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Tilattu"
@@ -4052,7 +4177,7 @@ msgstr "Näiden ihmisten päivityksiä sinä seuraat."
msgid "These are the people whose notices %s listens to."
msgstr "Käyttäjä %s seuraa näiden ihmisten päivityksiä."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4062,35 +4187,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s ei seuraa ketään käyttäjää."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Käyttäjät joilla henkilötagi %s - sivu %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Päivityksien syöte käyttäjälle %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Päivityksien syöte käyttäjälle %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Päivityksien syöte käyttäjälle %s"
@@ -4147,7 +4272,7 @@ msgstr ""
msgid "No such tag."
msgstr "Tuota tagia ei ole."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-metodi on työn alla!"
@@ -4174,83 +4299,85 @@ msgstr "Ei profiili id:tä kyselyssä."
msgid "Unsubscribed"
msgstr "Tilaus lopetettu"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Käyttäjä"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profiili"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "Kutsu uusia käyttäjiä"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Kaikki tilaukset"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Tilaa automaattisesti kaikki, jotka tilaavat päivitykseni (ei sovi hyvin "
"ihmiskäyttäjille)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Kutsu(t) lähetettiin"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "Kutsu(t) lähetettiin"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4383,16 +4510,22 @@ msgstr "Ryhmän %s jäsenet, sivu %d"
msgid "Search for more groups"
msgstr "Hae lisää ryhmiä"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Sinä et kuulu tähän ryhmään."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4436,7 +4569,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Omat"
@@ -4477,6 +4610,11 @@ msgstr "Ei voitu päivittää ryhmää."
msgid "Group leave failed."
msgstr "Ryhmän profiili"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Ei voitu päivittää ryhmää."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4495,28 +4633,28 @@ msgstr "Viestin tallennus ei onnistunut."
msgid "Could not update message with new URI."
msgstr "Viestin päivittäminen uudella URI-osoitteella ei onnistunut."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4524,42 +4662,79 @@ msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Päivityksesi tähän palveluun on estetty."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Tietokantavirhe tallennettaessa vastausta: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Käyttäjä on asettanut eston sinulle."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Ei ole tilattu!."
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Ei voitu poistaa tilausta."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ei voitu poistaa tilausta."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Ei voitu poistaa tilausta."
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Ryhmän luonti ei onnistunut."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Tilausta ei onnistuttu tallentamaan."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Vaihda profiiliasetuksesi"
@@ -4598,127 +4773,189 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Nimetön sivu"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Ensisijainen sivunavigointi"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Koti"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Henkilökohtainen profiili ja kavereiden aikajana"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Omat"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Muuta sähköpostiosoitettasi, kuvaasi, salasanaasi, profiiliasi"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Yhdistä"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ei voitu uudelleenohjata palvelimelle: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "Yhdistä"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Ensisijainen sivunavigointi"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Kutsu"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ylläpito"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Kutsu kavereita ja työkavereita liittymään palveluun %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Kirjaudu ulos"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Kutsu"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Kirjaudu ulos palvelusta"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Kirjaudu ulos"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Luo uusi käyttäjätili"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Rekisteröidy"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Kirjaudu sisään palveluun"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ohjeet"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Kirjaudu sisään"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Auta minua!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Haku"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ohjeet"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Hae ihmisiä tai tekstiä"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Haku"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Palvelun ilmoitus"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Paikalliset näkymät"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sivuilmoitus"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Toissijainen sivunavigointi"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ohjeet"
+
+#: lib/action.php:754
msgid "About"
msgstr "Tietoa"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "UKK"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Yksityisyys"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Lähdekoodi"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Ota yhteyttä"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tönäise"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4727,12 +4964,12 @@ msgstr ""
"**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** on mikroblogipalvelu. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4743,105 +4980,159 @@ msgstr ""
"versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Kaikki "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "lisenssi."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Sivutus"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Myöhemmin"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Aiemmin"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Rekisteröityminen ei ole sallittu."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Komentoa ei ole vielä toteutettu."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Komentoa ei ole vielä toteutettu."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Twitter-asetuksia ei voitu tallentaa!"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Sähköpostiosoitteen vahvistus"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Kutsu"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS vahvistus"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Ulkoasu"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS vahvistus"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Käyttäjä"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS vahvistus"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS vahvistus"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS vahvistus"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Palvelun ilmoitus"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS vahvistus"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4937,12 +5228,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Salasanan vaihto"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Salasanan vaihto"
@@ -5096,83 +5387,92 @@ msgstr "Ongelma päivityksen tallentamisessa."
msgid "Specify the name of the user to subscribe to"
msgstr "Anna käyttäjätunnus, jonka päivitykset haluat tilata"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Käyttäjää ei ole."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Käyttäjän %s päivitykset tilattu"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Anna käyttäjätunnus, jonka päivityksien tilauksen haluat lopettaa"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Komentoa ei ole vielä toteutettu."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Ilmoitukset pois päältä."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Ilmoituksia ei voi pistää pois päältä."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Ilmoitukset päällä."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Ilmoituksia ei voi pistää päälle."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
msgstr[1] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Toista ei voitu asettaa tilaamaan sinua."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Toista ei voitu asettaa tilaamaan sinua."
msgstr[1] "Toista ei voitu asettaa tilaamaan sinua."
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Sinä et kuulu tähän ryhmään."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5186,6 +5486,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5213,20 +5514,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Varmistuskoodia ei ole annettu."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Kirjaudu sisään palveluun"
@@ -5328,6 +5629,11 @@ msgstr "Valitse tagi lyhentääksesi listaa"
msgid "Go"
msgstr "Mene"
+#: lib/grantroleform.php:91
+#, php-format
+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 "Ryhmän tai aiheen kotisivun tai blogin osoite"
@@ -5421,23 +5727,23 @@ msgstr "Tiedoston lähetyksessä tapahtui järjestelmävirhe."
msgid "Not an image or corrupt file."
msgstr "Tuo ei ole kelvollinen kuva tai tiedosto on rikkoutunut."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Kuvatiedoston formaattia ei ole tuettu."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Tiedosto hävisi."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tunnistamaton tiedoston tyyppi"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5661,7 +5967,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " lähteestä "
@@ -5752,6 +6058,12 @@ msgstr "Vastaanottaja"
msgid "Available characters"
msgstr "Sallitut merkit"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Lähetä"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Lähetä päivitys"
@@ -5785,51 +6097,51 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "Ei"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Ei sisältöä!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Luotu"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Vastaa tähän päivitykseen"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Vastaus"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Päivitys on poistettu."
@@ -5863,11 +6175,6 @@ msgstr "Virhe tapahtui uuden etäprofiilin lisäämisessä"
msgid "Duplicate notice"
msgstr "Poista päivitys"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ei voitu lisätä uutta tilausta."
@@ -5910,7 +6217,7 @@ msgstr "Tagit käyttäjän %s päivityksissä"
msgid "Unknown"
msgstr "Tuntematon toiminto"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tilaukset"
@@ -5918,24 +6225,24 @@ msgstr "Tilaukset"
msgid "All subscriptions"
msgstr "Kaikki tilaukset"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Tilaajat"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Kaikki tilaajat"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Käyttäjä"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Käyttäjänä alkaen"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Kaikki ryhmät"
@@ -5978,7 +6285,12 @@ msgstr "Vastaa tähän päivitykseen"
msgid "Repeat this notice"
msgstr "Vastaa tähän päivitykseen"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6001,6 +6313,10 @@ msgstr "Haku"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Haku"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6055,35 +6371,14 @@ msgstr "Ihmiset jotka ovat käyttäjän %s tilaajia"
msgid "Groups %s is a member of"
msgstr "Ryhmät, joiden jäsen %s on"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Käyttäjä on asettanut eston sinulle."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Ei voitu tilata."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Toista ei voitu asettaa tilaamaan sinua."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ei ole tilattu!."
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Ei voitu poistaa tilausta."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Kutsu"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Ei voitu poistaa tilausta."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Kutsu kavereita ja työkavereita liittymään palveluun %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6138,68 +6433,84 @@ msgstr "Kuva"
msgid "User actions"
msgstr "Käyttäjän toiminnot"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Profiiliasetukset"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Lähetä suora viesti tälle käyttäjälle"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Viesti"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Käyttäjän profiili"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Ylläpitäjät"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "muutama sekunti sitten"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "noin vuosi sitten"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 9fb5e88b2..c8d14b83d 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -14,75 +14,81 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:44+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:25+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accès"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Paramètres d’accès au site"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Inscription"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privé"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Interdire aux utilisateurs anonymes (non connectés) de voir le site ?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Sur invitation uniquement"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privé"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Autoriser l’inscription sur invitation seulement."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Fermé"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Sur invitation uniquement"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Désactiver les nouvelles inscriptions."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Enregistrer"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fermé"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Sauvegarder les paramètres d’accès"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Enregistrer"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Page non trouvée"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -96,46 +102,53 @@ msgstr "Page non trouvée"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Utilisateur non trouvé."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s et ses amis, page %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s et ses amis"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Flux pour les amis de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Flux pour les amis de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Flux pour les amis de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -143,7 +156,7 @@ msgstr ""
"Ceci est le flux pour %s et ses amis mais personne n’a rien posté pour le "
"moment."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -152,7 +165,8 @@ msgstr ""
"Essayez de vous abonner à plus d’utilisateurs, de vous [inscrire à un groupe]"
"(%%action.groups%%) ou de poster quelque chose vous-même."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -162,7 +176,7 @@ msgstr ""
"profil ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -171,12 +185,13 @@ msgstr ""
"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite faire "
"un clin d’œil à %s ou poster un avis à son intention."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Vous et vos amis"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Statuts de %1$s et ses amis dans %2$s!"
@@ -189,20 +204,20 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Méthode API non trouvée !"
@@ -236,8 +251,9 @@ msgstr "Impossible de mettre à jour l’utilisateur."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Aucun profil ne correspond à cet utilisateur."
@@ -263,7 +279,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -375,7 +391,7 @@ msgstr "Impossible de déterminer l’utilisateur source."
msgid "Could not find target user."
msgstr "Impossible de trouver l’utilisateur cible."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -383,62 +399,62 @@ msgstr ""
"Les pseudos ne peuvent contenir que des caractères minuscules et des "
"chiffres, sans espaces."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Pseudo déjà utilisé. Essayez-en un autre."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Pseudo invalide."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "L’adresse du site personnel n’est pas un URL valide. "
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Nom complet trop long (maximum de 255 caractères)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "La description est trop longue (%d caractères maximum)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Emplacement trop long (maximum de 255 caractères)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Trop d’alias ! Maximum %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Alias invalide : « %s »"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias « %s » déjà utilisé. Essayez-en un autre."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "L’alias ne peut pas être le même que le pseudo."
@@ -449,15 +465,15 @@ msgstr "L’alias ne peut pas être le même que le pseudo."
msgid "Group not found!"
msgstr "Groupe non trouvé !"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Vous êtes déjà membre de ce groupe."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Vous avez été bloqué de ce groupe par l’administrateur."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Impossible de joindre l’utilisateur %1$s au groupe %2$s."
@@ -466,7 +482,7 @@ msgstr "Impossible de joindre l’utilisateur %1$s au groupe %2$s."
msgid "You are not a member of this group."
msgstr "Vous n’êtes pas membre de ce groupe."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Impossible de retirer l’utilisateur %1$s du groupe %2$s."
@@ -497,7 +513,7 @@ msgstr "Jeton incorrect."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -506,7 +522,7 @@ msgstr "Jeton incorrect."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -545,7 +561,7 @@ msgstr "Le jeton de connexion %s a été refusé et révoqué."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -573,13 +589,13 @@ msgstr ""
"devriez donner l’accès à votre compte %4$s qu’aux tiers à qui vous faites "
"confiance."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Compte"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -657,23 +673,11 @@ msgstr "Format non supporté."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoris de %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s statuts favoris de %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Activité de %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Statuts de %1$s dans %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -699,17 +703,17 @@ msgstr "%s statuts de tout le monde !"
msgid "Repeated to %s"
msgstr "Repris pour %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Reprises de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Avis marqués avec %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mises à jour marquées avec %1$s dans %2$s !"
@@ -725,8 +729,7 @@ msgstr "Pièce jointe non trouvée."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Aucun pseudo."
@@ -738,7 +741,7 @@ msgstr "Aucune taille"
msgid "Invalid size."
msgstr "Taille incorrecte."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -757,30 +760,30 @@ msgid "User without matching profile"
msgstr "Utilisateur sans profil correspondant"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Paramètres de l’avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Image originale"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Aperçu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Supprimer"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Transfert"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Recadrer"
@@ -788,7 +791,7 @@ msgstr "Recadrer"
msgid "Pick a square area of the image to be your avatar"
msgstr "Sélectionnez une zone de forme carrée pour définir votre avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Données perdues."
@@ -823,22 +826,22 @@ msgstr ""
"serez pas informé des @-réponses de sa part."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Non"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Ne pas bloquer cet utilisateur"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Oui"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquer cet utilisateur"
@@ -846,39 +849,43 @@ msgstr "Bloquer cet utilisateur"
msgid "Failed to save block information."
msgstr "Impossible d’enregistrer les informations de blocage."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Aucun groupe trouvé."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s profils bloqués"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s profils bloqués, page %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Une liste des utilisateurs dont l’inscription à ce groupe est bloquée."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Débloquer l’utilisateur de ce groupe"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Débloquer"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Débloquer cet utilisateur"
@@ -934,7 +941,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avis"
@@ -953,7 +960,7 @@ msgstr "Vous n’êtes pas le propriétaire de cette application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Un problème est survenu avec votre jeton de session."
@@ -979,12 +986,13 @@ msgstr "Ne pas supprimer cette application"
msgid "Delete this application"
msgstr "Supprimer cette application"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Non connecté."
@@ -1013,7 +1021,7 @@ msgstr "Voulez-vous vraiment supprimer cet avis ?"
msgid "Do not delete this notice"
msgstr "Ne pas supprimer cet avis"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Supprimer cet avis"
@@ -1029,7 +1037,7 @@ msgstr "Vous pouvez seulement supprimer les utilisateurs locaux."
msgid "Delete user"
msgstr "Supprimer l’utilisateur"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1037,12 +1045,12 @@ msgstr ""
"Voulez-vous vraiment supprimer cet utilisateur ? Ceci effacera toutes les "
"données à son propos de la base de données, sans sauvegarde."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Supprimer cet utilisateur"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Conception"
@@ -1145,6 +1153,18 @@ msgstr "Restaurer les conceptions par défaut"
msgid "Reset back to default"
msgstr "Revenir aux valeurs par défaut"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Enregistrer"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Sauvegarder la conception"
@@ -1236,29 +1256,29 @@ msgstr "Modifier le groupe %s"
msgid "You must be logged in to create a group."
msgstr "Vous devez ouvrir une session pour créer un groupe."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Vous devez être administrateur pour modifier le groupe."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Remplissez ce formulaire pour modifier les options du groupe."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "la description est trop longue (%d caractères maximum)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Impossible de mettre à jour le groupe."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Impossible de créer les alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Vos options ont été enregistrées."
@@ -1378,7 +1398,7 @@ msgid "Cannot normalize that email address"
msgstr "Impossible d’utiliser cette adresse courriel"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse courriel invalide."
@@ -1570,6 +1590,26 @@ msgstr "Fichier non trouvé."
msgid "Cannot read file."
msgstr "Impossible de lire le fichier"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Jeton incorrect."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr ""
+"Vous ne pouvez pas mettre des utilisateur dans le bac à sable sur ce site."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Cet utilisateur est déjà réduit au silence."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1599,7 +1639,7 @@ msgstr "Cet utilisateur est déjà bloqué pour le groupe."
msgid "User is not a member of group."
msgstr "L’utilisateur n’est pas membre du groupe."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquer cet utilisateur du groupe"
@@ -1635,11 +1675,11 @@ msgstr "Aucun identifiant."
msgid "You must be logged in to edit a group."
msgstr "Vous devez ouvrir une session pour modifier un groupe."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Conception du groupe"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1647,20 +1687,20 @@ msgstr ""
"Personnalisez l’apparence de votre groupe avec une image d’arrière plan et "
"une palette de couleurs de votre choix"
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Impossible de mettre à jour votre conception."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Préférences de conception enregistrées."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo du groupe"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1668,62 +1708,68 @@ msgstr ""
"Vous pouvez choisir un logo pour votre groupe. La taille maximale du fichier "
"est de %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Utilisateur sans profil correspondant."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Sélectionnez une zone de forme carrée sur l’image qui sera le logo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo mis à jour."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "La mise à jour du logo a échoué."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Membres du groupe %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Membres du groupe %1$s - page %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Liste des utilisateurs inscrits à ce groupe."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrer"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquer"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Faire de cet utilisateur un administrateur du groupe"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Faire un administrateur"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Faire de cet utilisateur un administrateur"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Activité de %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Mises à jour des membres de %1$s dans %2$s !"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groupes"
@@ -1989,16 +2035,18 @@ msgstr "Message personnel"
msgid "Optionally add a personal message to the invitation."
msgstr "Ajouter un message personnel à l’invitation (optionnel)."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr "Envoyer"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s vous invite à vous inscrire sur %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2061,7 +2109,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Vous devez ouvrir une session pour rejoindre un groupe."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Aucun pseudo ou ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s a rejoint le groupe %2$s"
@@ -2070,11 +2122,11 @@ msgstr "%1$s a rejoint le groupe %2$s"
msgid "You must be logged in to leave a group."
msgstr "Vous devez ouvrir une session pour quitter un groupe."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Vous n’êtes pas membre de ce groupe."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s a quitté le groupe %2$s"
@@ -2093,8 +2145,7 @@ msgstr ""
"Erreur lors de la mise en place de l’utilisateur. Vous n’y êtes probablement "
"pas autorisé."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ouvrir une session"
@@ -2356,8 +2407,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@@ -2497,7 +2548,8 @@ msgstr "Impossible de sauvegarder le nouveau mot de passe."
msgid "Password saved."
msgstr "Mot de passe enregistré."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Chemins"
@@ -2530,7 +2582,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Serveur SSL invalide. La longueur maximale est de 255 caractères."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Site"
@@ -2618,7 +2669,7 @@ msgstr "Dossier des arrière plans"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Jamais"
@@ -2674,11 +2725,11 @@ msgstr "Cette marque est invalide : %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utilisateurs marqués par eux-mêmes avec %1$s - page %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contenu de l’avis invalide"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2705,7 +2756,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 à 64 lettres minuscules ou chiffres, sans ponctuation ni espaces"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nom complet"
@@ -2733,7 +2784,7 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2760,7 +2811,7 @@ msgstr ""
"Marques pour vous-même (lettres, chiffres, -, ., et _), séparées par des "
"virgules ou des espaces"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Langue"
@@ -2788,7 +2839,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La bio est trop longue (%d caractères maximum)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aucun fuseau horaire n’a été choisi."
@@ -2801,23 +2852,24 @@ msgstr "La langue est trop longue (255 caractères maximum)."
msgid "Invalid tag: \"%s\""
msgstr "Marque invalide : « %s »"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Impossible de mettre à jour l’auto-abonnement."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Impossible d’enregistrer les préférences de localisation."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Impossible d’enregistrer le profil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Impossible d’enregistrer les marques."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Préférences enregistrées."
@@ -2830,28 +2882,28 @@ msgstr "Au-delà de la limite de page (%s)"
msgid "Could not retrieve public stream."
msgstr "Impossible de récupérer le flux public."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Flux public - page %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Flux public"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fil du flux public (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fil du flux public (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fil du flux public (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2860,11 +2912,11 @@ msgstr ""
"Ceci est la chronologie publique de %%site.name%% mais personne n’a encore "
"rien posté."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Soyez le premier à poster !"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2872,7 +2924,7 @@ msgstr ""
"Pourquoi ne pas [créer un compte](%%action.register%%) et être le premier à "
"poster !"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2886,7 +2938,7 @@ msgstr ""
"vous avec vos amis, famille et collègues ! ([Plus d’informations](%%doc.help%"
"%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3068,8 +3120,7 @@ msgstr "Désolé, code d’invitation invalide."
msgid "Registration successful"
msgstr "Compte créé avec succès"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Créer un compte"
@@ -3111,7 +3162,7 @@ msgid "Same as password above. Required."
msgstr "Identique au mot de passe ci-dessus. Requis."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Courriel"
@@ -3220,7 +3271,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de votre profil sur un autre service de micro-blogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "S’abonner"
@@ -3257,7 +3308,7 @@ msgstr "Vous ne pouvez pas reprendre votre propre avis."
msgid "You already repeated that notice."
msgstr "Vous avez déjà repris cet avis."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repris"
@@ -3265,33 +3316,33 @@ msgstr "Repris"
msgid "Repeated!"
msgstr "Repris !"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Réponses à %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Réponses à %1$s, page %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Flux des réponses pour %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Flux des réponses pour %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Flux des réponses pour %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3300,7 +3351,7 @@ msgstr ""
"Ceci est la chronologie des réponses à %1$s mais %2$s n’a encore reçu aucun "
"avis à son intention."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3310,7 +3361,7 @@ msgstr ""
"abonner à plus de personnes ou vous [inscrire à des groupes](%%action.groups%"
"%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3325,6 +3376,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Réponses à %1$s sur %2$s !"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Vous ne pouvez pas réduire des utilisateurs au silence sur ce site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Utilisateur sans profil correspondant."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3338,8 +3399,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr "L’utilisateur est déjà dans le bac à sable."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessions"
@@ -3363,8 +3425,8 @@ msgstr "Déboguage de session"
msgid "Turn on debugging output for sessions."
msgstr "Activer la sortie de déboguage pour les sessions."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Sauvegarder les paramètres du site"
@@ -3394,8 +3456,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiques"
@@ -3457,22 +3519,22 @@ msgstr "Avis favoris de %1$s, page %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Impossible d’afficher les favoris."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Flux pour les amis de %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Flux pour les amis de %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Flux pour les amis de %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3481,7 +3543,7 @@ msgstr ""
"favori sur les avis que vous aimez pour les mémoriser à l’avenir ou les "
"mettre en lumière."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3490,7 +3552,7 @@ msgstr ""
"%s n’a pas ajouté d’avis à ses favoris pour le moment. Publiez quelque chose "
"d’intéressant, et cela pourrait être ajouté à ses favoris :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3501,7 +3563,7 @@ msgstr ""
"un compte](%%%%action.register%%%%), puis poster quelque chose "
"d’intéressant, qui serait ajouté à ses favoris :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "C’est un moyen de partager ce que vous aimez."
@@ -3515,67 +3577,67 @@ msgstr "Groupe %s"
msgid "%1$s group, page %2$d"
msgstr "Groupe %1$s, page %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profil du groupe"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Note"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Actions du groupe"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fil des avis du groupe %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fil des avis du groupe %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fil des avis du groupe %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "ami d’un ami pour le groupe %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(aucun)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tous les membres"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Créé"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3591,7 +3653,7 @@ msgstr ""
"action.register%%%%) pour devenir membre de ce groupe et bien plus ! ([En "
"lire plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3604,7 +3666,7 @@ msgstr ""
"logiciel libre [StatusNet](http://status.net/). Ses membres partagent des "
"messages courts à propos de leur vie et leurs intérêts. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administrateurs"
@@ -3729,148 +3791,139 @@ msgid "User is already silenced."
msgstr "Cet utilisateur est déjà réduit au silence."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Paramètres basiques pour ce site StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Le nom du site ne peut pas être vide."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Vous devez avoir une adresse électronique de contact valide."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Langue « %s » inconnue."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL de rapport d’instantanés invalide."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valeur de lancement d’instantanés invalide."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "La fréquence des instantanés doit être un nombre."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "La limite minimale de texte est de 140 caractères."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "La limite de doublon doit être d’une seconde ou plus."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Général"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom du site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Le nom de votre site, comme « Microblog de votre compagnie »"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Apporté par"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texte utilisé pour le lien de crédits au bas de chaque page"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Apporté par URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL utilisée pour le lien de crédits au bas de chaque page"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adresse de courriel de contact de votre site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Zone horaire par défaut"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Zone horaire par défaut pour ce site ; généralement UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Langue du site par défaut"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantanés"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Au hasard lors des requêtes web"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Dans une tâche programée"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantanés de données"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quand envoyer des données statistiques aux serveurs status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Fréquence"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Les instantanés seront envoyés une fois tous les N requêtes"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL de rapport"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Les instantanés seront envoyés à cette URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texte"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Nombre maximal de caractères pour les avis."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de doublons"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Combien de temps (en secondes) les utilisateurs doivent attendre pour poster "
"la même chose de nouveau."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Notice du site"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nouveau message"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Impossible de sauvegarder les parmètres de la conception."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Notice du site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Notice du site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Paramètres SMS"
@@ -3974,19 +4027,90 @@ msgstr ""
msgid "No code entered"
msgstr "Aucun code entré"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantanés"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Modifier la configuration du site"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valeur de lancement d’instantanés invalide."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La fréquence des instantanés doit être un nombre."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL de rapport d’instantanés invalide."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Au hasard lors des requêtes web"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Dans une tâche programée"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantanés de données"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quand envoyer des données statistiques aux serveurs status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Fréquence"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Les instantanés seront envoyés une fois tous les N requêtes"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL de rapport"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Les instantanés seront envoyés à cette URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Sauvegarder les paramètres du site"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Vous n’êtes pas abonné(e) à ce profil."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Impossible d’enregistrer l’abonnement."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ceci n’est pas un utilisateur local."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Cette action n'accepte que les requêtes de type POST."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Profil non-trouvé."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"Vous ne pouvez pas vous abonner à un profil OMB 0.1 distant par cette "
+"action."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonné"
@@ -4050,7 +4174,7 @@ msgstr "Vous suivez les avis de ces personnes."
msgid "These are the people whose notices %s listens to."
msgstr "Les avis de ces personnes sont suivis par %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4066,35 +4190,35 @@ msgstr ""
"êtes un [utilisateur de Twitter](%%action.twittersettings%%), vous pouvez "
"vous abonner automatiquement aux gens auquels vous êtes déjà abonné là-bas."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s ne suit actuellement personne."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Avis marqués avec %1$s, page %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Flux des avis pour la marque %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Flux des avis pour la marque %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Flux des avis pour la marque %s (Atom)"
@@ -4149,7 +4273,7 @@ msgstr ""
msgid "No such tag."
msgstr "Cette marque n’existe pas."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Méthode API en construction."
@@ -4173,7 +4297,7 @@ msgstr "Aucune identité de profil dans la requête."
msgid "Unsubscribed"
msgstr "Désabonné"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4181,71 +4305,72 @@ msgstr ""
"La licence du flux auquel vous êtes abonné(e), « %1$s », n’est pas compatible "
"avec la licence du site « %2$s »."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "Utilisateur"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Paramètres des utilisateurs pour ce site StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Limite de bio invalide : doit être numérique."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Texte de bienvenue invalide. La taille maximale est de 255 caractères."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Abonnement par défaut invalide : « %1$s » n’est pas un utilisateur."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Limite de bio"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Longueur maximale de la bio d’un profil en caractères."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nouveaux utilisateurs"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Accueil des nouveaux utilisateurs"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
"Texte de bienvenue pour les nouveaux utilisateurs (maximum 255 caractères)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Abonnements par défaut"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Abonner automatiquement les nouveaux utilisateurs à cet utilisateur."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Invitations"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Invitations activées"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
"S’il faut autoriser les utilisateurs à inviter de nouveaux utilisateurs."
@@ -4378,18 +4503,24 @@ msgstr "Groupes %1$s, page %2$d"
msgid "Search for more groups"
msgstr "Rechercher pour plus de groupes"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s n’est pas membre d’un groupe."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Essayez de [rechercher un groupe](%%action.groupsearch%%) et de vous y "
"inscrire."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Statuts de %1$s dans %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4445,7 +4576,7 @@ msgstr ""
msgid "Plugins"
msgstr "Extensions"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4484,6 +4615,10 @@ msgstr "N’appartient pas au groupe."
msgid "Group leave failed."
msgstr "La désinscription du groupe a échoué."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Impossible de mettre à jour le groupe local."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4501,27 +4636,27 @@ msgstr "Impossible d’insérer le message."
msgid "Could not update message with new URI."
msgstr "Impossible de mettre à jour le message avec un nouvel URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problème lors de l’enregistrement de l’avis ; trop long."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques "
"minutes."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4529,41 +4664,73 @@ msgstr ""
"Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau "
"dans quelques minutes."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Il vous est interdit de poster des avis sur ce site."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problème lors de l’enregistrement de l’avis."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Erreur de base de donnée en insérant la réponse :%s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Il vous avez été interdit de vous abonner."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Déjà abonné !"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Cet utilisateur vous a bloqué."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Pas abonné !"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Impossible de supprimer l’abonnement à soi-même."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossible de cesser l’abonnement"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Impossible de cesser l’abonnement"
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenue à %1$s, @%2$s !"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Impossible de créer le groupe."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Impossible de définir l'URI du groupe."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Impossible d’établir l’inscription au groupe."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Impossible d’enregistrer les informations du groupe local."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Modifier vos paramètres de profil"
@@ -4601,124 +4768,171 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Page sans nom"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigation primaire du site"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Accueil"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profil personnel et flux des amis"
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr "Modifier votre courriel, avatar, mot de passe, profil"
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personnel"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Connecter"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Modifier votre adresse électronique, avatar, mot de passe, profil"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Se connecter aux services"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Connecter"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modifier la configuration du site"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Inviter"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrer"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr "Inviter des amis et collègues à vous rejoindre dans %s"
+msgstr "Inviter des amis et collègues à vous rejoindre sur %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Fermeture de session"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Inviter"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Fermer la session"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Déconnexion"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Créer un compte"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "S'inscrire"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ouvrir une session"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Aide"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Connexion"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "À l’aide !"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Rechercher"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Aide"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Rechercher des personnes ou du texte"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "Rechercher"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Notice du site"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Vues locales"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Avis de la page"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navigation secondaire du site"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Aide"
+
+#: lib/action.php:754
msgid "About"
msgstr "À propos"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "CGU"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Confidentialité"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Insigne"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licence du logiciel StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4727,12 +4941,12 @@ msgstr ""
"**%%site.name%%** est un service de microblogging qui vous est proposé par "
"[%%site.broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** est un service de micro-blogging."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4743,99 +4957,151 @@ msgstr ""
"version %s, disponible sous la licence [GNU Affero General Public License] "
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licence du contenu du site"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Le contenu et les données de %1$s sont privés et confidentiels."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur de %1$s. Tous droits "
"réservés."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur du contributeur. Tous "
"droits réservés."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Tous "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Après"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Avant"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Impossible de gérer le contenu distant pour le moment."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Impossible de gérer le contenu XML embarqué pour le moment."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Impossible de gérer le contenu en Base64 embarqué pour le moment."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Vous ne pouvez pas faire de modifications sur ce site."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "La modification de ce panneau n’est pas autorisée."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() n’a pas été implémentée."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() n’a pas été implémentée."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossible de supprimer les paramètres de conception."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuration basique du site"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuration de la conception"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Conception"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuration utilisateur"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Utilisateur"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuration d’accès"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuration des chemins"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuration des sessions"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Notice du site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuration des chemins"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"La ressource de l’API a besoin de l’accès en lecture et en écriture, mais "
"vous n’y avez accès qu’en lecture."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4929,11 +5195,11 @@ msgstr "Avis sur lesquels cette pièce jointe apparaît."
msgid "Tags for this attachment"
msgstr "Marques de cette pièce jointe"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "La modification du mot de passe a échoué"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "La modification du mot de passe n’est pas autorisée"
@@ -5088,82 +5354,91 @@ msgstr "Problème lors de l’enregistrement de l’avis."
msgid "Specify the name of the user to subscribe to"
msgstr "Indiquez le nom de l’utilisateur auquel vous souhaitez vous abonner"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Utilisateur non trouvé."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Abonné à %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Indiquez le nom de l’utilisateur duquel vous souhaitez vous désabonner"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Désabonné de %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Cette commande n’a pas encore été implémentée."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Avertissements désactivés."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Impossible de désactiver les avertissements."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Avertissements activés."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Impossible d’activer les avertissements."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "La commande d’ouverture de session est désactivée"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Ce lien n’est utilisable qu’une seule fois, et est valable uniquement "
"pendant 2 minutes : %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Désabonné de %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Vous n’êtes abonné(e) à personne."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Vous êtes abonné à cette personne :"
msgstr[1] "Vous êtes abonné à ces personnes :"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Personne ne s’est abonné à vous."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Cette personne est abonnée à vous :"
msgstr[1] "Ces personnes sont abonnées à vous :"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Vous n’êtes membre d’aucun groupe."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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 :"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5177,6 +5452,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5215,6 +5491,7 @@ msgstr ""
"d <nickname> <text> - message direct à l’utilisateur\n"
"get <nickname> - obtenir le dernier avis de l’utilisateur\n"
"whois <nickname> - obtenir le profil de l’utilisateur\n"
+"lose <nickname> - forcer un utilisateur à arrêter de vous suivre\n"
"fav <nickname> - ajouter de dernier avis de l’utilisateur comme favori\n"
"fav #<notice_id> - ajouter l’avis correspondant à l’identifiant comme "
"favori\n"
@@ -5242,20 +5519,20 @@ msgstr ""
"tracks - pas encore implémenté.\n"
"tracking - pas encore implémenté.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Aucun fichier de configuration n’a été trouvé. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
"J’ai cherché des fichiers de configuration dans les emplacements suivants : "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Vous pouvez essayer de lancer l’installeur pour régler ce problème."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Aller au programme d’installation"
@@ -5354,6 +5631,11 @@ msgstr "Choissez une marque pour réduire la liste"
msgid "Go"
msgstr "Aller"
+#: lib/grantroleform.php:91
+#, php-format
+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 du site Web ou blogue du groupe ou sujet "
@@ -5448,23 +5730,23 @@ msgstr "Erreur système lors du transfert du fichier."
msgid "Not an image or corrupt file."
msgstr "Ceci n’est pas une image, ou c’est un fichier corrompu."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Format de fichier d’image non supporté."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Fichier perdu."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Type de fichier inconnu"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "Mo"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "Ko"
@@ -5754,7 +6036,7 @@ msgstr ""
"pour démarrer des conversations avec d’autres utilisateurs. Ceux-ci peuvent "
"vous envoyer des messages destinés à vous seul(e)."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "de"
@@ -5847,6 +6129,11 @@ msgstr "À"
msgid "Available characters"
msgstr "Caractères restants"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Envoyer"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Envoyer un avis"
@@ -5880,48 +6167,48 @@ msgstr ""
"Désolé, l’obtention de votre localisation prend plus de temps que prévu. "
"Veuillez réessayer plus tard."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u° %2$u' %3$u\" %4$s %5$u° %6$u' %7$u\" %8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "O"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "chez"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "dans le contexte"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repris par"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Répondre à cet avis"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Répondre"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Avis repris"
@@ -5953,10 +6240,6 @@ msgstr "Erreur lors de l’insertion du profil distant"
msgid "Duplicate notice"
msgstr "Dupliquer l’avis"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Il vous avez été interdit de vous abonner."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Impossible d’insérer un nouvel abonnement."
@@ -5998,7 +6281,7 @@ msgstr "Marques dans les avis de %s"
msgid "Unknown"
msgstr "Inconnu"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnements"
@@ -6006,23 +6289,23 @@ msgstr "Abonnements"
msgid "All subscriptions"
msgstr "Tous les abonnements"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnés"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tous les abonnés"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de l’utilisateur"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membre depuis"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tous les groupes"
@@ -6062,7 +6345,12 @@ msgstr "Reprendre cet avis ?"
msgid "Repeat this notice"
msgstr "Reprendre cet avis"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquer cet utilisateur de de groupe"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur."
@@ -6082,6 +6370,10 @@ msgstr "Rechercher sur le site"
msgid "Keyword(s)"
msgstr "Mot(s) clef(s)"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Rechercher"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Aide sur la recherche"
@@ -6133,33 +6425,14 @@ msgstr "Abonnés de %s"
msgid "Groups %s is a member of"
msgstr "Groupes de %s"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Déjà abonné !"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Cet utilisateur vous a bloqué."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Impossible de s’abonner."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Impossible d’abonner une autre personne à votre profil."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Pas abonné !"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Impossible de supprimer l’abonnement à soi-même."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Inviter"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Impossible de cesser l’abonnement"
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Inviter des amis et collègues à vous rejoindre dans %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6211,67 +6484,84 @@ msgstr "Modifier l’avatar"
msgid "User actions"
msgstr "Actions de l’utilisateur"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Modifier les paramètres du profil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Modifier"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Envoyer un message à cet utilisateur"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Modérer"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profil de l’utilisateur"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrateurs"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modérer"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "il y a environ 1 an"
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 0358b8ecd..97c3d45f1 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -8,84 +8,91 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:47+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:28+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
"4;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Aceptar"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Configuracións de Twitter"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Rexistrar"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Privacidade"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "Invitar"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Bloquear"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Gardar"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Configuracións de Twitter"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Gardar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Non existe a etiqueta."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -99,79 +106,88 @@ msgstr "Non existe a etiqueta."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Ningún usuario."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s e amigos"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s e amigos"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Fonte para os amigos de %s"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Fonte para os amigos de %s"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Fonte para os amigos de %s"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s e amigos"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Actualizacións dende %1$s e amigos en %2$s!"
@@ -184,20 +200,20 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Método da API non atopado"
@@ -231,8 +247,9 @@ msgstr "Non se puido actualizar o usuario."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "O usuario non ten perfil."
@@ -257,7 +274,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -380,68 +397,68 @@ msgstr "Non se pudo recuperar a liña de tempo publica."
msgid "Could not find target user."
msgstr "Non se puido atopar ningún estado"
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "O alcume debe ter só letras minúsculas e números, e sen espazos."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "O alcume xa está sendo empregado por outro usuario. Tenta con outro."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Non é un alcume válido."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "A páxina persoal semella que non é unha URL válida."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "O nome completo é demasiado longo (max 255 car)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "O teu Bio é demasiado longo (max 140 car.)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "A localización é demasiado longa (max 255 car.)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "Etiqueta inválida: '%s'"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "O alcume xa está sendo empregado por outro usuario. Tenta con outro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -453,15 +470,15 @@ msgstr ""
msgid "Group not found!"
msgstr "Método da API non atopado"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Xa estas suscrito a estes usuarios:"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
@@ -470,7 +487,7 @@ msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
msgid "You are not a member of this group."
msgstr "Non estás suscrito a ese perfil"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
@@ -502,7 +519,7 @@ msgstr "Tamaño inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -511,7 +528,7 @@ msgstr "Tamaño inválido."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -546,7 +563,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -569,14 +586,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Sobre"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -658,23 +675,11 @@ msgstr "Formato de ficheiro de imaxe non soportado."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Favoritos dende %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s updates favorited by %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Liña de tempo de %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualizacións dende %1$s en %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -700,17 +705,17 @@ msgstr "%s chíos de calquera!"
msgid "Repeated to %s"
msgstr "Replies to %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Replies to %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Chíos tagueados con %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizacións dende %1$s en %2$s!"
@@ -727,8 +732,7 @@ msgstr "Ningún documento."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Sen alcume."
@@ -740,7 +744,7 @@ msgstr "Sen tamaño."
msgid "Invalid size."
msgstr "Tamaño inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -757,32 +761,32 @@ msgid "User without matching profile"
msgstr "Usuario sen un perfil que coincida."
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
#, fuzzy
msgid "Avatar settings"
msgstr "Configuracións de Twitter"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
#, fuzzy
msgid "Delete"
msgstr "eliminar"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Subir"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -790,7 +794,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -827,23 +831,23 @@ msgstr ""
"ser notificado de ningunha resposta-@ del."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Bloquear usuario"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Si"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Bloquear usuario"
@@ -852,41 +856,45 @@ msgstr "Bloquear usuario"
msgid "Failed to save block information."
msgstr "Erro ao gardar información de bloqueo."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "Non existe a etiqueta."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s e amigos"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "Desbloqueo de usuario fallido."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloquear"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "Bloquear usuario"
@@ -946,7 +954,7 @@ msgid "Conversation"
msgstr "Código de confirmación."
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Chíos"
@@ -968,7 +976,7 @@ msgstr "Non estás suscrito a ese perfil"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
@@ -995,12 +1003,13 @@ msgstr "Non se pode eliminar este chíos."
msgid "Delete this application"
msgstr "Eliminar chío"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Non está logueado."
@@ -1031,7 +1040,7 @@ msgstr "Estas seguro que queres eliminar este chío?"
msgid "Do not delete this notice"
msgstr "Non se pode eliminar este chíos."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "Eliminar chío"
@@ -1051,19 +1060,19 @@ msgstr "Non deberías eliminar o estado de outro usuario"
msgid "Delete user"
msgstr "eliminar"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Eliminar chío"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1173,6 +1182,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Gardar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1278,32 +1299,32 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "O teu Bio é demasiado longo (max 140 car.)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "Non se puido actualizar o usuario."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Non se puido crear o favorito."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
#, fuzzy
msgid "Options saved."
msgstr "Configuracións gardadas."
@@ -1426,7 +1447,7 @@ msgid "Cannot normalize that email address"
msgstr "Esa dirección de correo non se pode normalizar "
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non é un enderezo de correo válido."
@@ -1622,6 +1643,25 @@ msgstr "Ningún chío."
msgid "Cannot read file."
msgstr "Bloqueo de usuario fallido."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Tamaño inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Non podes enviar mensaxes a este usurio."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O usuario bloqueoute."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1654,7 +1694,7 @@ msgstr "O usuario bloqueoute."
msgid "User is not a member of group."
msgstr "%1s non é unha orixe fiable."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Bloquear usuario"
@@ -1692,96 +1732,102 @@ msgstr "Sen id."
msgid "You must be logged in to edit a group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Non se puido actualizar o usuario."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Preferencias gardadas."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Usuario sen un perfil que coincida."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "Avatar actualizado."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "Acounteceu un fallo ó actualizar o avatar."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Liña de tempo de %s"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualizacións dende %1$s en %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2035,16 +2081,19 @@ msgstr "Mensaxe persoal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalmente engadir unha mensaxe persoal á invitación."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s invitoute a unirse a él en %2$s."
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2104,7 +2153,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Sen alcume."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s / Favoritos dende %s"
@@ -2114,12 +2168,12 @@ msgstr "%s / Favoritos dende %s"
msgid "You must be logged in to leave a group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "Non estás suscrito a ese perfil"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s / Favoritos dende %s"
@@ -2137,8 +2191,7 @@ msgstr "Usuario ou contrasinal incorrectos."
msgid "Error setting user. You are probably not authorized."
msgstr "Non está autorizado."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inicio de sesión"
@@ -2396,8 +2449,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@@ -2545,7 +2598,8 @@ msgstr "Non se pode gardar a contrasinal."
msgid "Password saved."
msgstr "Contrasinal gardada."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2578,7 +2632,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "Invitar"
@@ -2674,7 +2727,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Recuperar"
@@ -2733,11 +2786,11 @@ msgstr "%s non é unha etiqueta de xente válida"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuarios auto-etiquetados como %s - páxina %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contido do chío inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2764,7 +2817,7 @@ msgstr ""
"De 1 a 64 letras minúsculas ou númeors, nin espazos nin signos de puntuación"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nome completo"
@@ -2793,7 +2846,7 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2820,7 +2873,7 @@ msgstr ""
"Etiquetas para o teu usuario (letras, números, -, ., e _), separados por "
"coma ou espazo"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Linguaxe"
@@ -2848,7 +2901,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "O teu Bio é demasiado longo (max 140 car.)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso Horario non seleccionado"
@@ -2861,24 +2914,25 @@ msgstr "A Linguaxe é demasiado longa (max 50 car.)."
msgid "Invalid tag: \"%s\""
msgstr "Etiqueta inválida: '%s'"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Non se puido actualizar o usuario para autosuscrición."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Non se puideron gardar as etiquetas."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Non se puido gardar o perfil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Non se puideron gardar as etiquetas."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Configuracións gardadas."
@@ -2891,48 +2945,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Non se pudo recuperar a liña de tempo publica."
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "Liña de tempo pública"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Liña de tempo pública"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2945,7 +2999,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3122,8 +3176,7 @@ msgstr "Acounteceu un erro co código de confirmación."
msgid "Registration successful"
msgstr "Xa estas rexistrado!!"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Rexistrar"
@@ -3168,7 +3221,7 @@ msgid "Same as password above. Required."
msgstr "A mesma contrasinal que arriba. Requerido."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo Electrónico"
@@ -3276,7 +3329,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Enderezo do teu perfil en outro servizo de microblogaxe compatíbel"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscribir"
@@ -3319,7 +3372,7 @@ msgstr "Non podes rexistrarte se non estas de acordo coa licenza."
msgid "You already repeated that notice."
msgstr "Xa bloqueaches a este usuario."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Crear"
@@ -3329,47 +3382,47 @@ msgstr "Crear"
msgid "Repeated!"
msgstr "Crear"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Replies to %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Mensaxe de %1$s en %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Fonte de chíos para %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Fonte de chíos para %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Fonte de chíos para %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3381,6 +3434,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Mensaxe de %1$s en %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Non podes enviar mensaxes a este usurio."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuario sen un perfil que coincida."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3396,8 +3459,9 @@ msgstr "Non podes enviar mensaxes a este usurio."
msgid "User is already sandboxed."
msgstr "O usuario bloqueoute."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3421,8 +3485,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Configuracións de Twitter"
@@ -3458,8 +3522,8 @@ msgstr "Invitación(s) enviada(s)."
msgid "Description"
msgstr "Subscricións"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3520,35 +3584,35 @@ msgstr "Chíos favoritos de %s"
msgid "Could not retrieve favorite notices."
msgstr "Non se pode "
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Fonte para os amigos de %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Fonte para os amigos de %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Fonte para os amigos de %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3556,7 +3620,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3570,73 +3634,73 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Tódalas subscricións"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Non existe o perfil."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
#, fuzzy
msgid "Note"
msgstr "Chíos"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
#, fuzzy
msgid "Group actions"
msgstr "Outras opcions"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Band. Saída para %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Membro dende"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
#, fuzzy
msgid "(None)"
msgstr "(nada)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Crear"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3650,7 +3714,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3663,7 +3727,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3784,150 +3848,139 @@ msgid "User is already silenced."
msgstr "O usuario bloqueoute."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Non é unha dirección de correo válida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Novo chío"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nova dirección de email para posterar en %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Localización"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Linguaxe preferida"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nova mensaxe"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Non se puideron gardar os teus axustes de Twitter!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Novo chío"
#: actions/smssettings.php:58
#, fuzzy
@@ -4032,19 +4085,90 @@ msgstr ""
msgid "No code entered"
msgstr "Non se inseriu ningún código"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Navegación de subscricións"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Configuracións de Twitter"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Non estás suscrito a ese perfil"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Non se pode gardar a subscrición."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Non é usuario local."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Ningún chío."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Non estás suscrito a ese perfil"
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Suscrito"
@@ -4104,7 +4228,7 @@ msgstr "Esa é a xente á que lle estas a escoitar os seus chíos"
msgid "These are the people whose notices %s listens to."
msgstr "Esta é a xente á que lle estas a escoitar os chíos %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4114,35 +4238,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s está a escoitar os teus chíos %2$s."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Usuarios auto-etiquetados como %s - páxina %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Fonte de chíos para %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Fonte de chíos para %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Fonte de chíos para %s"
@@ -4201,7 +4325,7 @@ msgstr ""
msgid "No such tag."
msgstr "Non existe a etiqueta."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método da API en contrución."
@@ -4228,83 +4352,85 @@ msgstr "Non hai identificador de perfil na peticion."
msgid "Unsubscribed"
msgstr "De-suscribido"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Usuario"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Perfil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "Invitar a novos usuarios"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Tódalas subscricións"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Suscribirse automáticamente a calquera que se suscriba a min (o mellor para "
"non humáns)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Invitación(s) enviada(s)."
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "Invitación(s) enviada(s)."
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4439,16 +4565,22 @@ msgstr "Tódalas subscricións"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "%1s non é unha orixe fiable."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualizacións dende %1$s en %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4492,7 +4624,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persoal"
@@ -4533,6 +4665,11 @@ msgstr "Non se puido actualizar o usuario."
msgid "Group leave failed."
msgstr "Non existe o perfil."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Non se puido actualizar o usuario."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4551,28 +4688,28 @@ msgstr "Non se pode inserir unha mensaxe."
msgid "Could not update message with new URI."
msgstr "Non se puido actualizar a mensaxe coa nova URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro ó inserir o hashtag na BD: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4581,44 +4718,81 @@ msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Tes restrinxido o envio de chíos neste sitio."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Erro ó inserir a contestación na BD: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "Este usuario non che permite suscribirte a el."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "O usuario bloqueoute."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Non está suscrito!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Non se pode eliminar a subscrición."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Non se pode eliminar a subscrición."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Non se pode eliminar a subscrición."
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Mensaxe de %1$s en %2$s"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Non se puido crear o favorito."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Non se pode gardar a subscrición."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Non se pode gardar a subscrición."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Non se pode gardar a subscrición."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Configuración de perfil"
@@ -4658,134 +4832,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Persoal"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Persoal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambiar contrasinal"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Conectar"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Non se pode redireccionar ao servidor: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "Conectar"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Navegación de subscricións"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitar"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
"Emprega este formulario para invitar ós teus amigos e colegas a empregar "
"este servizo."
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Sair"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear nova conta"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Rexistrar"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Axuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inicio de sesión"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Axuda"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Buscar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Axuda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Buscar"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Novo chío"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Novo chío"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Navegación de subscricións"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Axuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas frecuentes"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4794,12 +5022,12 @@ msgstr ""
"**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é un servizo de microbloguexo."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4810,108 +5038,162 @@ msgstr ""
"%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Atopar no contido dos chíos"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
#, fuzzy
msgid "All "
msgstr "Todos"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Despois"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Antes »"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Non podes enviar mensaxes a este usurio."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Non se permite o rexistro neste intre."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Comando non implementado."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Comando non implementado."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Non se puideron gardar os teus axustes de Twitter!"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Confirmar correo electrónico"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Invitar"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Confirmación de SMS"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Persoal"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Confirmación de SMS"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usuario"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Confirmación de SMS"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Confirmación de SMS"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Confirmación de SMS"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Novo chío"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Confirmación de SMS"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5007,12 +5289,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Contrasinal gardada."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Contrasinal gardada."
@@ -5170,55 +5452,64 @@ msgstr "Aconteceu un erro ó gardar o chío."
msgid "Specify the name of the user to subscribe to"
msgstr "Especifica o nome do usuario ó que queres suscribirte"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Ningún usuario."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Suscrito a %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifica o nome de usuario ó que queres deixar de seguir"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Desuscribir de %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Comando non implementado."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificación desactivada."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "No se pode desactivar a notificación."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificación habilitada."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Non se pode activar a notificación."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Desuscribir de %s"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Xa estas suscrito a estes usuarios:"
@@ -5227,12 +5518,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Outro usuario non se puido suscribir a ti."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Outro usuario non se puido suscribir a ti."
@@ -5241,12 +5532,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Non estás suscrito a ese perfil"
@@ -5255,7 +5546,7 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:728
+#: lib/command.php:769
#, fuzzy
msgid ""
"Commands:\n"
@@ -5270,6 +5561,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5323,20 +5615,20 @@ msgstr ""
"tracks - non implementado por agora.\n"
"tracking - non implementado por agora.\n"
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Sen código de confirmación."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5439,6 +5731,11 @@ msgstr "Elixe unha etiqueta para reducila lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5533,25 +5830,25 @@ msgstr "Aconteceu un erro no sistema namentras se estaba cargando o ficheiro."
msgid "Not an image or corrupt file."
msgstr "Non é unha imaxe ou está corrupta."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato de ficheiro de imaxe non soportado."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "Bloqueo de usuario fallido."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
#, fuzzy
msgid "Unknown file type"
msgstr "tipo de ficheiro non soportado"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5821,7 +6118,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " dende "
@@ -5914,6 +6211,12 @@ msgstr "A"
msgid "Available characters"
msgstr "6 ou máis caracteres"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Enviar"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5948,53 +6251,53 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "No"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Sen contido!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "Non se pode eliminar este chíos."
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "contestar"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Chío publicado"
@@ -6031,11 +6334,6 @@ msgstr "Aconteceu un erro ó inserir o perfil remoto"
msgid "Duplicate notice"
msgstr "Eliminar chío"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Este usuario non che permite suscribirte a el."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Non se puido inserir a nova subscrición."
@@ -6078,7 +6376,7 @@ msgstr "O usuario non ten último chio."
msgid "Unknown"
msgstr "Acción descoñecida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscricións"
@@ -6086,25 +6384,25 @@ msgstr "Subscricións"
msgid "All subscriptions"
msgstr "Tódalas subscricións"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Usuario"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro dende"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
#, fuzzy
msgid "All groups"
msgstr "Tódalas etiquetas"
@@ -6149,7 +6447,12 @@ msgstr "Non se pode eliminar este chíos."
msgid "Repeat this notice"
msgstr "Non se pode eliminar este chíos."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6172,6 +6475,10 @@ msgstr "Buscar"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Buscar"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6227,35 +6534,16 @@ msgstr "Suscrito a %s"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "O usuario bloqueoute."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "No se pode suscribir."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Outro usuario non se puido suscribir a ti."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Non está suscrito!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Non se pode eliminar a subscrición."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invitar"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Non se pode eliminar a subscrición."
+#: lib/subgroupnav.php:106
+#, fuzzy, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+"Emprega este formulario para invitar ós teus amigos e colegas a empregar "
+"este servizo."
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6313,70 +6601,85 @@ msgstr "Avatar"
msgid "User actions"
msgstr "Outras opcions"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Configuración de perfil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
#, fuzzy
msgid "Send a direct message to this user"
msgstr "Non podes enviar mensaxes a este usurio."
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
#, fuzzy
msgid "Message"
msgstr "Nova mensaxe"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "O usuario non ten perfil."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fai uns segundos"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fai un ano"
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index fb8f12031..ea9275685 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,82 +7,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:50+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:31+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "קבל"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "הגדרות"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "הירש×"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "פרטיות"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
msgid "Invite only"
msgstr ""
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "×ין משתמש ×›×–×”."
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "שמור"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "הגדרות"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "שמור"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "×ין הודעה כזו."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -96,79 +103,88 @@ msgstr "×ין הודעה כזו."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "×ין משתמש ×›×–×”."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s וחברי×"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s וחברי×"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s וחברי×"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -181,20 +197,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "קוד ×”×ישור ×œ× × ×ž×¦×."
@@ -228,8 +244,9 @@ msgstr "עידכון המשתמש נכשל."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "למשתמש ×ין פרופיל."
@@ -254,7 +271,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -371,68 +388,68 @@ msgstr "עידכון המשתמש נכשל."
msgid "Could not find target user."
msgstr "עידכון המשתמש נכשל."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "כינוי יכול להכיל רק ×ותיות ×נגליות קטנות ומספרי×, ×•×œ×œ× ×¨×•×•×—×™×."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "כינוי ×–×” כבר תפוס. נסה כינוי ×חר."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "×©× ×ž×©×ª×ž×© ×œ× ×—×•×§×™."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "ל×תר הבית יש כתובת ×œ× ×—×•×§×™×ª."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "×”×©× ×”×ž×œ× ×רוך מידי (מותרות 255 ×ותיות בלבד)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיות)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "×©× ×”×ž×™×§×•× ×רוך מידי (מותר עד 255 ×ותיות)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "כתובת ×תר הבית '%s' ××™× ×” חוקית"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "כינוי ×–×” כבר תפוס. נסה כינוי ×חר."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -444,16 +461,16 @@ msgstr ""
msgid "Group not found!"
msgstr "×œ× × ×ž×¦×"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "כבר נכנסת למערכת!"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "נכשלה ההפניה לשרת: %s"
@@ -463,7 +480,7 @@ msgstr "נכשלה ההפניה לשרת: %s"
msgid "You are not a member of this group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "נכשלה יצירת OpenID מתוך: %s"
@@ -495,7 +512,7 @@ msgstr "גודל ×œ× ×—×•×§×™."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -504,7 +521,7 @@ msgstr "גודל ×œ× ×—×•×§×™."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -539,7 +556,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -562,14 +579,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "×ודות"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -649,23 +666,11 @@ msgstr "פורמט התמונה ×ינו נתמך."
msgid "%1$s / Favorites from %2$s"
msgstr "הסטטוס של %1$s ב-%2$s "
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "מיקרובלוג מ×ת %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -691,17 +696,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr "תגובת עבור %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "תגובת עבור %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "מיקרובלוג מ×ת %s"
@@ -719,8 +724,7 @@ msgstr "×ין מסמך ×›×–×”."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "×ין כינוי"
@@ -732,7 +736,7 @@ msgstr "×ין גודל."
msgid "Invalid size."
msgstr "גודל ×œ× ×—×•×§×™."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "תמונה"
@@ -749,32 +753,32 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
#, fuzzy
msgid "Avatar settings"
msgstr "הגדרות"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
#, fuzzy
msgid "Delete"
msgstr "מחק"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "ההעלה"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -782,7 +786,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -817,23 +821,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "ל×"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "×ין משתמש ×›×–×”."
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "כן"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "×ין משתמש ×›×–×”."
@@ -842,41 +846,45 @@ msgstr "×ין משתמש ×›×–×”."
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "×ין הודעה כזו."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "למשתמש ×ין פרופיל."
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s וחברי×"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "×ין משתמש ×›×–×”."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "×ין משתמש ×›×–×”."
@@ -935,7 +943,7 @@ msgid "Conversation"
msgstr "מיקו×"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "הודעות"
@@ -957,7 +965,7 @@ msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -983,12 +991,13 @@ msgstr "×ין הודעה כזו."
msgid "Delete this application"
msgstr "ת×ר ×ת עצמך ו×ת נוש××™ העניין שלך ב-140 ×ותיות"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "×œ× ×ž×—×•×‘×¨."
@@ -1016,7 +1025,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "×ין הודעה כזו."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -1035,19 +1044,19 @@ msgstr "ניתן להשתמש במנוי המקומי!"
msgid "Delete user"
msgstr "מחק"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "×ין משתמש ×›×–×”."
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1157,6 +1166,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "שמור"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1257,31 +1278,31 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיות)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "עידכון המשתמש נכשל."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "שמירת מידע התמונה נכשל"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
#, fuzzy
msgid "Options saved."
msgstr "ההגדרות נשמרו."
@@ -1400,7 +1421,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1595,6 +1616,25 @@ msgstr "×ין הודעה כזו."
msgid "Cannot read file."
msgstr "×ין הודעה כזו."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "גודל ×œ× ×—×•×§×™."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "למשתמש ×ין פרופיל."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1626,7 +1666,7 @@ msgstr "למשתמש ×ין פרופיל."
msgid "User is not a member of group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "×ין משתמש ×›×–×”."
@@ -1662,97 +1702,103 @@ msgstr "×ין זיהוי."
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "קבוצות"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "עידכון המשתמש נכשל."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "העדפות נשמרו."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "למשתמש ×ין פרופיל."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "התמונה עודכנה."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "עדכון התמונה נכשל."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "מיקרובלוג מ×ת %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "קבוצות"
@@ -2001,16 +2047,19 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "שלח"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2045,7 +2094,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "×ין כינוי"
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2054,12 +2108,12 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "הסטטוס של %1$s ב-%2$s "
@@ -2077,8 +2131,7 @@ msgstr "×©× ×ž×©×ª×ž×© ×ו סיסמה ×œ× × ×›×•× ×™×."
msgid "Error setting user. You are probably not authorized."
msgstr "×œ× ×ž×•×¨×©×”."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "היכנס"
@@ -2327,8 +2380,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2476,7 +2529,8 @@ msgstr "×œ× × ×™×ª×Ÿ לשמור ×ת הסיסמה"
msgid "Password saved."
msgstr "הסיסמה נשמרה."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2509,7 +2563,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2604,7 +2657,7 @@ msgstr ""
msgid "SSL"
msgstr "סמס"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "שיחזור"
@@ -2663,11 +2716,11 @@ msgstr "×œ× ×¢×•×ž×“ ×‘×›×œ×œ×™× ×œ-OpenID."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "מיקרובלוג מ×ת %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "תוכן ההודעה ×œ× ×—×•×§×™"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2691,7 +2744,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 עד 64 ×ותיות ×נגליות קטנות ×ו מספרי×, ×œ×œ× ×¡×™×ž× ×™ פיסוק ×ו רווחי×."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "×©× ×ž×œ×"
@@ -2720,7 +2773,7 @@ msgid "Bio"
msgstr "ביוגרפיה"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2745,7 +2798,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "שפה"
@@ -2771,7 +2824,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיות)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2784,25 +2837,26 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "כתובת ×תר הבית '%s' ××™× ×” חוקית"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "שמירת הפרופיל נכשלה."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "שמירת הפרופיל נכשלה."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "שמירת הפרופיל נכשלה."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "ההגדרות נשמרו."
@@ -2815,48 +2869,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "קו זמן ציבורי"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "קו זמן ציבורי"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2865,7 +2919,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3036,8 +3090,7 @@ msgstr "שגי××” ב×ישור הקוד."
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "הירש×"
@@ -3076,7 +3129,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -3164,7 +3217,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "כתובת הפרופיל שלך בשרות ביקרובלוג תו×× ×חר"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "×”×™×¨×©× ×›×ž× ×•×™"
@@ -3205,7 +3258,7 @@ msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון"
msgid "You already repeated that notice."
msgstr "כבר נכנסת למערכת!"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "צור"
@@ -3215,47 +3268,47 @@ msgstr "צור"
msgid "Repeated!"
msgstr "צור"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "תגובת עבור %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "תגובת עבור %s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "הזנת הודעות של %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "הזנת הודעות של %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "הזנת הודעות של %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3267,6 +3320,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "תגובת עבור %s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "למשתמש ×ין פרופיל."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3282,8 +3345,9 @@ msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgid "User is already sandboxed."
msgstr "למשתמש ×ין פרופיל."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3307,8 +3371,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "הגדרות"
@@ -3343,8 +3407,8 @@ msgstr "מיקו×"
msgid "Description"
msgstr "הרשמות"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "סטטיסטיקה"
@@ -3404,35 +3468,35 @@ msgstr "%s וחברי×"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "הזנות ×”×—×‘×¨×™× ×©×œ %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3440,7 +3504,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3454,71 +3518,71 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "כל המנויי×"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "×ין הודעה כזו."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
#, fuzzy
msgid "Note"
msgstr "הודעות"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "חבר מ××–"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "צור"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3528,7 +3592,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3537,7 +3601,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3649,147 +3713,136 @@ msgid "User is already silenced."
msgstr "למשתמש ×ין פרופיל."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "מיקו×"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "בעיה בשמירת ההודעה."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "הודעה חדשה"
#: actions/smssettings.php:58
#, fuzzy
@@ -3886,22 +3939,92 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "הרשמות"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "הגדרות"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "יצירת המנוי נכשלה."
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "×ין משתמש ×›×–×”."
+msgid "No such profile."
+msgstr "×ין הודעה כזו."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
+
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "×”×™×¨×©× ×›×ž× ×•×™"
@@ -3962,7 +4085,7 @@ msgstr "×לה ×”×× ×©×™× ×©×œ×”×•×“×¢×•×ª ×©×œ×”× ×תה מ×זין."
msgid "These are the people whose notices %s listens to."
msgstr "×לה ×”×× ×©×™× ×©%s מ×זין להודעות שלה×."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3972,36 +4095,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s כעת מ×זין להודעות שלך ב-%2$s"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "×ין זיהוי Jabber ×›×–×”."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "סמס"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "מיקרובלוג מ×ת %s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "הזנת הודעות של %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "הזנת הודעות של %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "הזנת הודעות של %s"
@@ -4055,7 +4178,7 @@ msgstr ""
msgid "No such tag."
msgstr "×ין הודעה כזו."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -4084,80 +4207,82 @@ msgstr "השרת ×œ× ×”×—×–×™×¨ כתובת פרופיל"
msgid "Unsubscribed"
msgstr "בטל מנוי"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "מתשמש"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "פרופיל"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "מחק"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "כל המנויי×"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "ההרשמה ×ושרה"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "מיקו×"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4289,16 +4414,22 @@ msgstr "כל המנויי×"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4342,7 +4473,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "×ישי"
@@ -4383,6 +4514,11 @@ msgstr "עידכון המשתמש נכשל."
msgid "Group leave failed."
msgstr "×ין הודעה כזו."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "עידכון המשתמש נכשל."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4400,70 +4536,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "שגי×ת מסד × ×ª×•× ×™× ×‘×”×›× ×¡×ª התגובה: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+#, fuzzy
+msgid "User has blocked you."
+msgstr "למשתמש ×ין פרופיל."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "×œ× ×ž× ×•×™!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "שמירת מידע התמונה נכשל"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "יצירת המנוי נכשלה."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "יצירת המנוי נכשלה."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "יצירת המנוי נכשלה."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4503,131 +4676,186 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "בית"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "×ישי"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "התחבר"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "שנה סיסמה"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "נכשלה ההפניה לשרת: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "התחבר"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "הרשמות"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "צ×"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "גודל ×œ× ×—×•×§×™."
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "צ×"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "צור חשבון חדש"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "הירש×"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "עזרה"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "היכנס"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "עזרה"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "חיפוש"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "עזרה"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "חיפוש"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "הודעה חדשה"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "הודעה חדשה"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "הרשמות"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "עזרה"
+
+#: lib/action.php:754
msgid "About"
msgstr "×ודות"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "רשימת ש×לות נפוצות"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "פרטיות"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "מקור"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "צור קשר"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4636,12 +4864,12 @@ msgstr ""
"**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4652,101 +4880,155 @@ msgstr ""
"s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)"
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "הודעה חדשה"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "<< ×חרי"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "לפני >>"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "הרשמות"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "הודעה חדשה"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "×ישי"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "הרשמות"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "מתשמש"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "הרשמות"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "הרשמות"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "הרשמות"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "הודעה חדשה"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "הרשמות"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4842,12 +5124,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "הסיסמה נשמרה."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "הסיסמה נשמרה."
@@ -5003,83 +5285,93 @@ msgstr "בעיה בשמירת ההודעה."
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "×ין משתמש ×›×–×”."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "בטל מנוי"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "הרשמה מרוחקת"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "הרשמה מרוחקת"
msgstr[1] "הרשמה מרוחקת"
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5093,6 +5385,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5120,20 +5413,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "×ין קוד ×ישור."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5234,6 +5527,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5328,24 +5626,24 @@ msgstr "שגי×ת מערכת בהעל×ת הקובץ."
msgid "Not an image or corrupt file."
msgstr "זהו ×œ× ×§×•×‘×¥ תמונה, ×ו שחל בו שיבוש."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "פורמט התמונה ×ינו נתמך."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "×ין הודעה כזו."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5558,7 +5856,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr ""
@@ -5649,6 +5947,12 @@ msgstr "×ל"
msgid "Available characters"
msgstr "לפחות 6 ×ותיות"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "שלח"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5683,52 +5987,52 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "ל×"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "×ין תוכן!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "צור"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "הגב"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "הודעות"
@@ -5762,10 +6066,6 @@ msgstr "שגי××” בהכנסת פרופיל מרוחק"
msgid "Duplicate notice"
msgstr "הודעה חדשה"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "הכנסת מנוי חדש נכשלה."
@@ -5807,7 +6107,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "הרשמות"
@@ -5815,25 +6115,25 @@ msgstr "הרשמות"
msgid "All subscriptions"
msgstr "כל המנויי×"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "מנויי×"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "מנויי×"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "מתשמש"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "חבר מ××–"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5877,7 +6177,12 @@ msgstr "×ין הודעה כזו."
msgid "Repeat this notice"
msgstr "×ין הודעה כזו."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "×ין משתמש ×›×–×”."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5899,6 +6204,10 @@ msgstr "חיפוש"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "חיפוש"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5953,37 +6262,15 @@ msgstr "הרשמה מרוחקת"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-#, fuzzy
-msgid "User has blocked you."
-msgstr "למשתמש ×ין פרופיל."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "×œ× ×ž× ×•×™!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -6038,69 +6325,84 @@ msgstr "תמונה"
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "הגדרות הפרופיל"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
#, fuzzy
msgid "Message"
msgstr "הודעה חדשה"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "למשתמש ×ין פרופיל."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "לפני מספר שניות"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "לפני כיו×"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "לפני ×›-%d ימי×"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "לפני ×›-%d חודשי×"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "לפני כשנה"
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index daecf17e8..b4a6ec7a8 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -9,79 +9,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:54+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:34+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || "
"n%100==4) ? 2 : 3)\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Přistup"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Sydłowe nastajenja składować"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Registrować"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Priwatny"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Jenož přeprosyć"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Priwatny"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "ZaÄinjeny"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Jenož přeprosyć"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Nowe registrowanja znjemóžnić."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Składować"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "ZaÄinjeny"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Sydłowe nastajenja składować"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Składować"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Strona njeeksistuje"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -95,78 +103,87 @@ msgstr "Strona njeeksistuje"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Wužiwar njeeksistuje"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s a přećeljo, strona %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s a přećeljo"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Kanal za přećelow wužiwarja %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Kanal za přećelow wužiwarja %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Kanal za přećelow wužiwarja %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ty a přećeljo"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -179,20 +196,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metoda njenamakana."
@@ -224,8 +241,9 @@ msgstr "Wužiwar njeje so dał aktualizować."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Wužiwar nima profil."
@@ -249,7 +267,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -359,68 +377,68 @@ msgstr ""
msgid "Could not find target user."
msgstr ""
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Přimjeno so hižo wužiwa. Spytaj druhe."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Žane płaćiwe přimjeno."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Startowa strona njeje płaćiwy URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Dospołne mjeno je předołho (maks. 255 znamješkow)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Wopisanje je předołho (maks. %d znamješkow)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Městno je předołho (maks. 255 znamješkow)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Přewjele aliasow! Maksimum: %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Njepłaćiwy alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias \"%s\" so hižo wužiwa. Spytaj druhi."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias njemóže samsny kaž přimjeno być."
@@ -431,15 +449,15 @@ msgstr "Alias njemóže samsny kaž přimjeno być."
msgid "Group not found!"
msgstr "Skupina njenamakana!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Sy hižo ÄÅ‚on teje skupiny."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Njebě móžno wužiwarja %1$s skupinje %2%s přidać."
@@ -448,7 +466,7 @@ msgstr "Njebě móžno wužiwarja %1$s skupinje %2%s přidać."
msgid "You are not a member of this group."
msgstr "Njejsy ÄÅ‚on tuteje skupiny."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Njebě móžno wužiwarja %1$s ze skupiny %2$s wotstronić."
@@ -480,7 +498,7 @@ msgstr "Njepłaćiwa wulkosć."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -489,7 +507,7 @@ msgstr "Njepłaćiwa wulkosć."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -523,7 +541,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -546,13 +564,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -628,23 +646,11 @@ msgstr "Njepodpěrany format."
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -670,17 +676,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr ""
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -696,8 +702,7 @@ msgstr "Přiwěšk njeeksistuje."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Žane přimjeno."
@@ -709,7 +714,7 @@ msgstr "Žana wulkosć."
msgid "Invalid size."
msgstr "Njepłaćiwa wulkosć."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Awatar"
@@ -727,30 +732,30 @@ msgid "User without matching profile"
msgstr "Wužiwar bjez hodźaceho so profila"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Nastajenja awatara"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Přehlad"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "ZniÄić"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Nahrać"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -758,7 +763,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -790,22 +795,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "NÄ›"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Tutoho wužiwarja njeblokować"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Haj"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Tutoho wužiwarja blokować"
@@ -813,39 +818,43 @@ msgstr "Tutoho wužiwarja blokować"
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Skupina njeeksistuje."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s zablokowa profile, stronu %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr ""
@@ -901,7 +910,7 @@ msgid "Conversation"
msgstr "Konwersacija"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Zdźělenki"
@@ -922,7 +931,7 @@ msgstr "Njejsy wobsedźer tuteje aplikacije."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -948,12 +957,13 @@ msgstr "Tutu zdźělenku njewušmórnyć"
msgid "Delete this application"
msgstr "Tutu zdźělenku wušmórnyć"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Njepřizjewjeny."
@@ -980,7 +990,7 @@ msgstr "Chceš woprawdźe tutu zdźělenku wušmórnyć?"
msgid "Do not delete this notice"
msgstr "Tutu zdźělenku njewušmórnyć"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Tutu zdźělenku wušmórnyć"
@@ -996,18 +1006,18 @@ msgstr "Móžeš jenož lokalnych wužiwarjow wušmórnyć."
msgid "Delete user"
msgstr "Wužiwarja wušmórnyć"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Tutoho wužiwarja wušmórnyć"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Design"
@@ -1109,6 +1119,18 @@ msgstr "Standardne designy wobnowić"
msgid "Reset back to default"
msgstr "Na standard wróćo stajić"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Składować"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Design składować"
@@ -1202,29 +1224,29 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wutworił."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Dyrbiš administrator być, zo by skupinu wobdźěłał."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Wuž tutón formular, zo by skupinu wobdźěłał."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "wopisanje je předołho (maks. %d znamješkow)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Skupina njeje so dała aktualizować."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Aliasy njejsu so dali wutworić."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Opcije składowane."
@@ -1340,7 +1362,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Njepłaćiwa e-mejlowa adresa."
@@ -1524,6 +1546,25 @@ msgstr "Dataja njeeksistuje."
msgid "Cannot read file."
msgstr "Dataja njeda so Äitać."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Njepłaćiwa wulkosć."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Wužiwar nima profil."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1553,7 +1594,7 @@ msgstr "Wužiwar je hižo za skupinu zablokowany."
msgid "User is not a member of group."
msgstr "Wužiwar njeje ÄÅ‚on skupiny."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Wužiwarja za skupinu blokować"
@@ -1585,30 +1626,30 @@ msgstr "Žadyn ID."
msgid "You must be logged in to edit a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wobdźěłał."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Skupinski design"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr ""
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Designowe nastajenja składowane."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Skupinske logo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1616,62 +1657,68 @@ msgstr ""
"Móžeš logowy wobraz za swoju skupinu nahrać. Maksimalna datajowa wulkosć je %"
"s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Wužiwar bjez hodźaceho so profila."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo zaktualizowane."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr ""
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Lisćina wužiwarjow w tutej skupinje."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokować"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Tutoho wužiwarja k administratorej Äinić"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Skupiny"
@@ -1904,16 +1951,19 @@ msgstr "Wosobinska powěsć"
msgid "Optionally add a personal message to the invitation."
msgstr "Wosobinsku powěsć po dobrozdaću přeprošenju přidać."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Pósłać"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1948,7 +1998,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Žane přimjeno."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -1957,11 +2012,11 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wopušćił."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Njejsy ÄÅ‚on teje skupiny."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr ""
@@ -1978,8 +2033,7 @@ msgstr "WopaÄne wužiwarske mjeno abo hesÅ‚o."
msgid "Error setting user. You are probably not authorized."
msgstr "Zmylk při nastajenju wužiwarja. Snano njejsy awtorizowany."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Přizjewić"
@@ -2219,8 +2273,8 @@ msgstr ""
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Njeje podpěrany datowy format."
@@ -2359,7 +2413,8 @@ msgstr ""
msgid "Password saved."
msgstr "Hesło składowane."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Šćežki"
@@ -2392,7 +2447,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Sydło"
@@ -2480,7 +2534,7 @@ msgstr "Pozadkowy zapis"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ženje"
@@ -2533,11 +2587,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Njepłaćiwy wobsah zdźělenki"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2560,7 +2614,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Dospołne mjeno"
@@ -2588,7 +2642,7 @@ msgid "Bio"
msgstr "Biografija"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2613,7 +2667,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "RÄ›Ä"
@@ -2639,7 +2693,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Biografija je předołha (maks. %d znamješkow)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ÄŒasowe pasmo njeje wubrane."
@@ -2652,23 +2706,24 @@ msgstr "Mjeno rÄ›Äe je pÅ™edoÅ‚he (maks. 50 znamjeÅ¡kow)."
msgid "Invalid tag: \"%s\""
msgstr ""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Nastajenja městna njedachu so składować."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr ""
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr ""
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Nastajenja składowane."
@@ -2681,45 +2736,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr ""
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2728,7 +2783,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2898,8 +2953,7 @@ msgstr "Wodaj, njepłaćiwy přeprošenski kod."
msgid "Registration successful"
msgstr "Registrowanje wuspěšne"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrować"
@@ -2938,7 +2992,7 @@ msgid "Same as password above. Required."
msgstr "Jenake kaž hesło horjeka. Trěbne."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mejl"
@@ -3022,7 +3076,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonować"
@@ -3058,7 +3112,7 @@ msgstr "Njemóžeš swójsku zdźělenku wospjetować."
msgid "You already repeated that notice."
msgstr "Sy tutu zdźělenku hižo wospjetował."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Wospjetowany"
@@ -3066,47 +3120,47 @@ msgstr "Wospjetowany"
msgid "Repeated!"
msgstr "Wospjetowany!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr ""
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr ""
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr ""
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr ""
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr ""
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3118,6 +3172,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Wužiwar bjez hodźaceho so profila."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3130,8 +3194,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Posedźenja"
@@ -3156,8 +3221,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Sydłowe nastajenja składować"
@@ -3187,8 +3252,8 @@ msgstr "Organizacija"
msgid "Description"
msgstr "Wopisanje"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistika"
@@ -3249,35 +3314,35 @@ msgstr "%1$s a přećeljo, strona %2$d"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr ""
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr ""
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr ""
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3285,7 +3350,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3299,67 +3364,67 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Skupinski profil"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasy"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Skupinske akcije"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Čłonojo"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Žadyn)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "WÅ¡itcy ÄÅ‚onojo"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Wutworjeny"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3369,7 +3434,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3378,7 +3443,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratorojo"
@@ -3488,146 +3553,137 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Designowe nastajenja za tute sydło StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Dyrbiš płaćiwu kontaktowu e-mejlowu adresu měć."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Njeznata rÄ›Ä \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Powšitkowny"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Sydłowe mjeno"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalny"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardne Äasowe pasmo"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Standardna sydÅ‚owa rÄ›Ä"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frekwenca"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limity"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstowy limit"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksimalna liÄba znamjeÅ¡kow za zdźělenki."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Zdźělenki"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nowa powěsć"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Wužiwar nima poslednju powěsć"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Njepłaćiwy wobsah zdźělenki"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Sydłowe nastajenja składować"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS-nastajenja"
@@ -3720,19 +3776,90 @@ msgstr ""
msgid "No code entered"
msgstr "Žadyn kod zapodaty"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "SMS-wobkrućenje"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frekwenca"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Sydłowe nastajenja składować"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Njejsy tón profil abonował."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr ""
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Njeje lokalny wužiwar."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Dataja njeeksistuje."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Njejsy tón profil abonował."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonowany"
@@ -3792,7 +3919,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3802,35 +3929,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr ""
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -3880,7 +4007,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3904,76 +4031,78 @@ msgstr ""
msgid "Unsubscribed"
msgstr "Wotskazany"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Wužiwar"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Wužiwarske nastajenja za sydło StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nowi wužiwarjo"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Powitanje noweho wužiwarja"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Powitanski tekst za nowych wužiwarjow (maks. 255 znamješkow)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Standardny abonement"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr ""
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Přeprošenja"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Přeprošenja zmóžnjene"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4093,16 +4222,22 @@ msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4146,7 +4281,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersija"
@@ -4183,6 +4318,11 @@ msgstr "Njeje dźěl skupiny."
msgid "Group leave failed."
msgstr "Wopušćenje skupiny je so njeporadźiło."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Skupina njeje so dała aktualizować."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4200,65 +4340,99 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:848
+#: classes/Notice.php:1459
#, php-format
-msgid "DB error inserting reply: %s"
+msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/Notice.php:1235
-#, php-format
-msgid "RT @%1$s %2$s"
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Hižo abonowany!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Wužiwar je će zablokował."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Njeje abonowany!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Sebjeabonement njeje so daÅ‚ zniÄić."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Abonoment njeje so daÅ‚ zniÄić."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Abonoment njeje so daÅ‚ zniÄić."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Skupina njeje so dała aktualizować."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Profil njeje so składować dał."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4296,136 +4470,201 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bjez titula"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr ""
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Wosobinski"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "Změń swoje hesło."
+
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "Zwiski"
-#: lib/action.php:444
+#: lib/action.php:443
+#, fuzzy
msgid "Connect"
msgstr "Zwjazać"
-#: lib/action.php:444
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr ""
+msgstr "SMS-wobkrućenje"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Přeprosyć"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
+"Wužij tutón formular, zo by swojich přećelow a kolegow přeprosył, zo bychu "
+"tutu słužbu wužiwali."
-#: lib/action.php:458
-msgid "Logout"
-msgstr ""
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Přeprosyć"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr ""
+msgstr "Šat za sydło."
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logo"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Konto załožić"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrować"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr ""
+msgstr "Při sydle přizjewić"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Pomoc"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Přizjewić"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomhaj!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Pytać"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Pomoc"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Za ludźimi abo tekstom pytać"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Pytać"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Pomoc"
+
+#: lib/action.php:754
msgid "About"
msgstr "Wo"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Huste prašenja"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Priwatnosć"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Žórło"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4433,96 +4672,150 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Změny na tutym woknje njejsu dowolene."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Sydło"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Design"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS-wobkrućenje"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Wužiwar"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS-wobkrućenje"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS-wobkrućenje"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Dwójna zdźělenka"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS-wobkrućenje"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4612,11 +4905,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Změnjenje hesła je so njeporadźiło"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Změnjenje hesła njeje dowolene"
@@ -4764,54 +5057,64 @@ msgstr ""
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Wužiwar njeeksistuje"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Wotskazany"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Sy tutu wosobu abonował:"
@@ -4819,11 +5122,11 @@ msgstr[1] "Sy tutej wosobje abonował:"
msgstr[2] "Sy tute wosoby abonował:"
msgstr[3] "Sy tute wosoby abonował:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Tuta wosoba je će abonowała:"
@@ -4831,11 +5134,11 @@ msgstr[1] "Tutej wosobje stej će abonowałoj:"
msgstr[2] "Tute wosoby su će abonowali:"
msgstr[3] "Tute wosoby su će abonowali:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Sy ÄÅ‚on tuteje skupiny:"
@@ -4843,7 +5146,7 @@ msgstr[1] "Sy ÄÅ‚on tuteju skupinow:"
msgstr[2] "Sy ÄÅ‚on tutych skupinow:"
msgstr[3] "Sy ÄÅ‚on tutych skupinow:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4857,6 +5160,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -4884,19 +5188,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Žana konfiguraciska dataja namakana. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4993,6 +5297,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5082,23 +5391,23 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Naša dataja je so zhubiła."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Njeznaty datajowy typ"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "KB"
@@ -5302,7 +5611,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "wot"
@@ -5391,6 +5700,12 @@ msgstr "Komu"
msgid "Available characters"
msgstr "K dispoziciji stejace znamješka"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Pósłać"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Zdźělenku pósłać"
@@ -5422,48 +5737,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "S"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "J"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "W"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "Z"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Wospjetowany wot"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Na tutu zdźělenku wotmołwić"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Wotmołwić"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Zdźělenka wospjetowana"
@@ -5495,10 +5810,6 @@ msgstr "Zmylk při zasunjenju zdaleneho profila"
msgid "Duplicate notice"
msgstr "Dwójna zdźělenka"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5540,7 +5851,7 @@ msgstr ""
msgid "Unknown"
msgstr "Njeznaty"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonementy"
@@ -5548,23 +5859,23 @@ msgstr "Abonementy"
msgid "All subscriptions"
msgstr "WÅ¡Ä› abonementy"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonenća"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Wšitcy abonenća"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Wužiwarski ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Čłon wot"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "WÅ¡Ä› skupiny"
@@ -5604,7 +5915,12 @@ msgstr "Tutu zdźělenku wospjetować?"
msgid "Repeat this notice"
msgstr "Tutu zdźělenku wospjetować"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Tutoho wužiwarja za tutu skupinu blokować"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5624,6 +5940,10 @@ msgstr "Pytanske sydło"
msgid "Keyword(s)"
msgstr "KluÄowe hesÅ‚a"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Pytać"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Pytanska pomoc"
@@ -5675,34 +5995,15 @@ msgstr ""
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Hižo abonowany!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Wužiwar je će zablokował."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Abonowanje njebě móžno"
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Přeprosyć"
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Njeje abonowany!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Sebjeabonement njeje so daÅ‚ zniÄić."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Abonoment njeje so daÅ‚ zniÄić."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -5753,67 +6054,83 @@ msgstr "Awatar wobdźěłać"
msgid "User actions"
msgstr "Wužiwarske akcije"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Profilowe nastajenja wobdźěłać"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Wobdźěłać"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Tutomu wužiwarja direktnu powěsć pósłać"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Powěsć"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Wužiwarski profil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratorojo"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "před něšto sekundami"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index 698f779dd..8f3976673 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,75 +8,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:14:57+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:37+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accesso"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Configurationes de accesso al sito"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registration"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Private"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Prohibir al usatores anonyme (sin session aperte) de vider le sito?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Solmente per invitation"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Private"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Permitter le registration solmente al invitatos."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Claudite"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Solmente per invitation"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Disactivar le creation de nove contos."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Salveguardar"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Claudite"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Salveguardar configurationes de accesso"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Salveguardar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Pagina non existe"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -90,46 +98,53 @@ msgstr "Pagina non existe"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Usator non existe."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s e amicos, pagina %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s e amicos"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Syndication pro le amicos de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Syndication pro le amicos de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Syndication pro le amicos de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -137,7 +152,7 @@ msgstr ""
"Isto es le chronologia pro %s e su amicos, ma necuno ha ancora publicate "
"alique."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -146,7 +161,8 @@ msgstr ""
"Proba subscriber te a altere personas, [face te membro de un gruppo](%%"
"action.groups%%) o publica alique tu mesme."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -155,7 +171,7 @@ msgstr ""
"Tu pote tentar [dar un pulsata a %1$s](../%2$s) in su profilo o [publicar un "
"message a su attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -164,12 +180,13 @@ msgstr ""
"Proque non [registrar un conto](%%%%action.register%%%%) e postea dar un "
"pulsata a %s o publicar un message a su attention."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tu e amicos"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Actualisationes de %1$s e su amicos in %2$s!"
@@ -182,20 +199,20 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Methodo API non trovate."
@@ -229,8 +246,9 @@ msgstr "Non poteva actualisar le usator."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Le usator non ha un profilo."
@@ -256,7 +274,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -366,68 +384,68 @@ msgstr "Non poteva determinar le usator de origine."
msgid "Could not find target user."
msgstr "Non poteva trovar le usator de destination."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Pseudonymo ja in uso. Proba un altere."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Non un pseudonymo valide."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Le pagina personal non es un URL valide."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Le nomine complete es troppo longe (max. 255 characteres)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Description es troppo longe (max %d charachteres)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Loco es troppo longe (max. 255 characteres)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Troppo de aliases! Maximo: %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Alias invalide: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Le alias \"%s\" es ja in uso. Proba un altere."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Le alias non pote esser identic al pseudonymo."
@@ -438,15 +456,15 @@ msgstr "Le alias non pote esser identic al pseudonymo."
msgid "Group not found!"
msgstr "Gruppo non trovate!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Tu es ja membro de iste gruppo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Le administrator te ha blocate de iste gruppo."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
@@ -455,7 +473,7 @@ msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
msgid "You are not a member of this group."
msgstr "Tu non es membro de iste gruppo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Non poteva remover le usator %1$s del gruppo %2$s."
@@ -486,7 +504,7 @@ msgstr "Indicio invalide."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -495,7 +513,7 @@ msgstr "Indicio invalide."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -532,7 +550,7 @@ msgstr "Le indicio de requesta %s ha essite refusate e revocate."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -558,13 +576,13 @@ msgstr ""
"<strong>%3$s</strong> le datos de tu conto de %4$s. Tu debe solmente dar "
"accesso a tu conto de %4$s a tertie personas in le quales tu ha confidentia."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -643,23 +661,11 @@ msgstr "Formato non supportate."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favorites de %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Chronologia de %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualisationes de %1$s in %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -686,17 +692,17 @@ msgstr "Actualisationes de totes in %s!"
msgid "Repeated to %s"
msgstr "Repetite a %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repetitiones de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notas con etiquetta %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualisationes con etiquetta %1$s in %2$s!"
@@ -712,8 +718,7 @@ msgstr "Annexo non existe."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Nulle pseudonymo."
@@ -725,7 +730,7 @@ msgstr "Nulle dimension."
msgid "Invalid size."
msgstr "Dimension invalide."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -743,30 +748,30 @@ msgid "User without matching profile"
msgstr "Usator sin profilo correspondente"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Configuration del avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Previsualisation"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Deler"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Incargar"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Taliar"
@@ -774,7 +779,7 @@ msgstr "Taliar"
msgid "Pick a square area of the image to be your avatar"
msgstr "Selige un area quadrate del imagine pro facer lo tu avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Datos del file perdite."
@@ -809,22 +814,22 @@ msgstr ""
"recipera notification de su @-responsas."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Non blocar iste usator"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Si"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocar iste usator"
@@ -832,39 +837,43 @@ msgstr "Blocar iste usator"
msgid "Failed to save block information."
msgstr "Falleva de salveguardar le information del blocada."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Gruppo non existe."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s profilos blocate"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s profilos blocate, pagina %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Un lista del usatores excludite del membrato de iste gruppo."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Disblocar le usator del gruppo"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Disblocar"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Disblocar iste usator"
@@ -920,7 +929,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notas"
@@ -939,7 +948,7 @@ msgstr "Tu non es le proprietario de iste application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Il habeva un problema con tu indicio de session."
@@ -965,12 +974,13 @@ msgstr "Non deler iste application"
msgid "Delete this application"
msgstr "Deler iste application"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Non identificate."
@@ -999,7 +1009,7 @@ msgstr "Es tu secur de voler deler iste nota?"
msgid "Do not delete this notice"
msgstr "Non deler iste nota"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Deler iste nota"
@@ -1015,7 +1025,7 @@ msgstr "Tu pote solmente deler usatores local."
msgid "Delete user"
msgstr "Deler usator"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1023,12 +1033,12 @@ msgstr ""
"Es tu secur de voler deler iste usator? Isto radera tote le datos super le "
"usator del base de datos, sin copia de reserva."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Deler iste usator"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Apparentia"
@@ -1131,6 +1141,18 @@ msgstr "Restaurar apparentias predefinite"
msgid "Reset back to default"
msgstr "Revenir al predefinitiones"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Salveguardar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Salveguardar apparentia"
@@ -1222,29 +1244,29 @@ msgstr "Modificar gruppo %s"
msgid "You must be logged in to create a group."
msgstr "Tu debe aperir un session pro crear un gruppo."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Tu debe esser administrator pro modificar le gruppo."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Usa iste formulario pro modificar le gruppo."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "description es troppo longe (max %d chars)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Non poteva actualisar gruppo."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Non poteva crear aliases."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Optiones salveguardate."
@@ -1363,7 +1385,7 @@ msgid "Cannot normalize that email address"
msgstr "Non pote normalisar iste adresse de e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse de e-mail invalide."
@@ -1555,6 +1577,25 @@ msgstr "File non existe."
msgid "Cannot read file."
msgstr "Non pote leger file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Indicio invalide."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Usator es ja silentiate."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1584,7 +1625,7 @@ msgstr "Le usator es ja blocate del gruppo."
msgid "User is not a member of group."
msgstr "Le usator non es membro del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blocar usator del gruppo"
@@ -1619,11 +1660,11 @@ msgstr "Nulle ID."
msgid "You must be logged in to edit a group."
msgstr "Tu debe aperir un session pro modificar un gruppo."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Apparentia del gruppo"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1631,20 +1672,20 @@ msgstr ""
"Personalisa le apparentia de tu gruppo con un imagine de fundo e un paletta "
"de colores de tu preferentia."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Non poteva actualisar tu apparentia."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Preferentias de apparentia salveguardate."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logotypo del gruppo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1652,62 +1693,68 @@ msgstr ""
"Tu pote incargar un imagine pro le logotypo de tu gruppo. Le dimension "
"maximal del file es %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Usator sin profilo correspondente"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Selige un area quadrate del imagine que devenira le logotypo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logotypo actualisate."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Falleva de actualisar le logotypo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Membros del gruppo %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Membros del gruppo %1$s, pagina %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Un lista de usatores in iste gruppo."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blocar"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Facer le usator administrator del gruppo"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Facer administrator"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Facer iste usator administrator"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Chronologia de %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualisationes de membros de %1$s in %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppos"
@@ -1967,16 +2014,19 @@ msgstr "Message personal"
msgid "Optionally add a personal message to the invitation."
msgstr "Si tu vole, adde un message personal al invitation."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Inviar"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s te ha invitate a accompaniar le/la in %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2037,7 +2087,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Tu debe aperir un session pro facer te membro de un gruppo."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Nulle pseudonymo."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s es ora membro del gruppo %2$s"
@@ -2046,11 +2101,11 @@ msgstr "%1$s es ora membro del gruppo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Tu debe aperir un session pro quitar un gruppo."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Tu non es membro de iste gruppo."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s quitava le gruppo %2$s"
@@ -2068,8 +2123,7 @@ msgid "Error setting user. You are probably not authorized."
msgstr ""
"Error de acceder al conto de usator. Tu probabilemente non es autorisate."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Aperir session"
@@ -2327,8 +2381,8 @@ msgstr "typo de contento "
msgid "Only "
msgstr "Solmente "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Formato de datos non supportate."
@@ -2468,7 +2522,8 @@ msgstr "Non pote salveguardar le nove contrasigno."
msgid "Password saved."
msgstr "Contrasigno salveguardate."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camminos"
@@ -2501,7 +2556,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Servitor SSL invalide. Le longitude maximal es 255 characteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Sito"
@@ -2589,7 +2643,7 @@ msgstr "Directorio al fundos"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunquam"
@@ -2644,11 +2698,11 @@ msgstr "Etiquetta de personas invalide: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usatores auto-etiquettate con %1$s - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Le contento del nota es invalide"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2675,7 +2729,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 minusculas o numeros, sin punctuation o spatios"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nomine complete"
@@ -2703,7 +2757,7 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2730,7 +2784,7 @@ msgstr ""
"Etiquettas pro te (litteras, numeros, -, ., e _), separate per commas o "
"spatios"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2757,7 +2811,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Bio es troppo longe (max %d chars)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horari non seligite."
@@ -2770,23 +2824,24 @@ msgstr "Lingua es troppo longe (max 50 chars)."
msgid "Invalid tag: \"%s\""
msgstr "Etiquetta invalide: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Non poteva actualisar usator pro autosubscription."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Non poteva salveguardar le preferentias de loco."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Non poteva salveguardar profilo."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Non poteva salveguardar etiquettas."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Preferentias confirmate."
@@ -2799,28 +2854,28 @@ msgstr "Ultra le limite de pagina (%s)"
msgid "Could not retrieve public stream."
msgstr "Non poteva recuperar le fluxo public."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Chronologia public, pagina %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Chronologia public"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Syndication del fluxo public (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Syndication del fluxo public (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Syndication del fluxo public (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2829,11 +2884,11 @@ msgstr ""
"Isto es le chronologia public pro %%site.name%%, ma nulle persona ha ancora "
"scribite alique."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Sia le prime a publicar!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2841,7 +2896,7 @@ msgstr ""
"Proque non [registrar un conto](%%action.register%%) e devenir le prime a "
"publicar?"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2854,7 +2909,7 @@ msgstr ""
"[Inscribe te ora](%%action.register%%) pro condivider notas super te con "
"amicos, familia e collegas! ([Leger plus](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3032,8 +3087,7 @@ msgstr "Pardono, le codice de invitation es invalide."
msgid "Registration successful"
msgstr "Registration succedite"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Crear conto"
@@ -3074,7 +3128,7 @@ msgid "Same as password above. Required."
msgstr "Identic al contrasigno hic supra. Requirite."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3181,7 +3235,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de tu profilo in un altere servicio de microblogging compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscriber"
@@ -3219,7 +3273,7 @@ msgstr "Tu non pote repeter tu proprie nota."
msgid "You already repeated that notice."
msgstr "Tu ha ja repetite iste nota."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetite"
@@ -3227,33 +3281,33 @@ msgstr "Repetite"
msgid "Repeated!"
msgstr "Repetite!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Responsas a %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Responsas a %1$s, pagina %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Syndication de responsas pro %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Syndication de responsas pro %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Syndication de responsas pro %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3262,7 +3316,7 @@ msgstr ""
"Isto es le chronologia de responsas a %1$s, ma %2$s non ha ancora recipite "
"alcun nota a su attention."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3271,7 +3325,7 @@ msgstr ""
"Tu pote facer conversation con altere usatores, subscriber te a plus "
"personas o [devenir membro de gruppos](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3285,6 +3339,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Responsas a %1$s in %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Tu non pote silentiar usatores in iste sito."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usator sin profilo correspondente"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3297,8 +3361,9 @@ msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
msgid "User is already sandboxed."
msgstr "Usator es ja in cassa de sablo."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessiones"
@@ -3322,8 +3387,8 @@ msgstr "Cercar defectos de session"
msgid "Turn on debugging output for sessions."
msgstr "Producer informationes technic pro cercar defectos in sessiones."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salveguardar configurationes del sito"
@@ -3353,8 +3418,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statisticas"
@@ -3416,22 +3481,22 @@ msgstr "Notas favorite de %1$s, pagina %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Non poteva recuperar notas favorite."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Syndication del favorites de %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Syndication del favorites de %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Syndication del favorites de %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3440,7 +3505,7 @@ msgstr ""
"Favorite sub notas que te place pro memorisar los pro plus tarde o pro "
"mitter los in evidentia."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3449,7 +3514,7 @@ msgstr ""
"%s non ha ancora addite alcun nota a su favorites. Publica alique "
"interessante que ille favoritisarea :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3460,7 +3525,7 @@ msgstr ""
"conto](%%%%action.register%%%%) e postea publicar alique interessante que "
"ille favoritisarea :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Isto es un modo de condivider lo que te place."
@@ -3474,67 +3539,67 @@ msgstr "Gruppo %s"
msgid "%1$s group, page %2$d"
msgstr "Gruppo %1$s, pagina %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profilo del gruppo"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliases"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Actiones del gruppo"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syndication de notas pro le gruppo %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Amico de un amico pro le gruppo %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nulle)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tote le membros"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Create"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3549,7 +3614,7 @@ msgstr ""
"lor vita e interesses. [Crea un conto](%%%%action.register%%%%) pro devenir "
"parte de iste gruppo e multe alteres! ([Lege plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3562,7 +3627,7 @@ msgstr ""
"[StatusNet](http://status.net/). Su membros condivide breve messages super "
"lor vita e interesses. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratores"
@@ -3685,148 +3750,139 @@ msgid "User is already silenced."
msgstr "Usator es ja silentiate."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurationes de base pro iste sito de StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Le longitude del nomine del sito debe esser plus que zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Tu debe haber un valide adresse de e-mail pro contacto."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" incognite."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Le URL pro reportar instantaneos es invalide."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valor de execution de instantaneo invalide."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Le frequentia de instantaneos debe esser un numero."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Le limite minimal del texto es 140 characteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Le limite de duplicatos debe esser 1 o plus secundas."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nomine del sito"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Le nomine de tu sito, como \"Le microblog de TuCompania\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Realisate per"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Le texto usate pro le ligamine al creditos in le pede de cata pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL pro \"Realisate per\""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usate pro le ligamine al creditos in le pede de cata pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Le adresse de e-mail de contacto pro tu sito"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horari predefinite"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horari predefinite pro le sito; normalmente UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Lingua predefinite del sito"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantaneos"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatorimente durante un accesso web"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "In un processo planificate"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantaneos de datos"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviar datos statistic al servitores de status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentia"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Un instantaneo essera inviate a cata N accessos web"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL pro reporto"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Le instantaneos essera inviate a iste URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Numero maximal de characteres pro notas."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatos"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quante tempore (in secundas) le usatores debe attender ante de poter "
"publicar le mesme cosa de novo."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso del sito"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nove message"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Impossibile salveguardar le configurationes del apparentia."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso del sito"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso del sito"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Parametros de SMS"
@@ -3926,19 +3982,90 @@ msgstr ""
msgid "No code entered"
msgstr "Nulle codice entrate"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantaneos"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Modificar le configuration del sito"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valor de execution de instantaneo invalide."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Le frequentia de instantaneos debe esser un numero."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Le URL pro reportar instantaneos es invalide."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatorimente durante un accesso web"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "In un processo planificate"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantaneos de datos"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando inviar datos statistic al servitores de status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentia"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Un instantaneo essera inviate a cata N accessos web"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL pro reporto"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Le instantaneos essera inviate a iste URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Salveguardar configurationes del sito"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Tu non es subscribite a iste profilo."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Non poteva salveguardar le subscription."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Le usator non es local."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "File non existe."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Tu non es subscribite a iste profilo."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscribite"
@@ -4002,7 +4129,7 @@ msgstr "Tu seque le notas de iste personas."
msgid "These are the people whose notices %s listens to."
msgstr "%s seque le notas de iste personas."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4018,35 +4145,35 @@ msgstr ""
"action.twittersettings%%), tu pote automaticamente subscriber te a personas "
"que tu ja seque la."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s non seque alcuno."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Notas etiquettate con %1$s, pagina %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Syndication de notas pro le etiquetta %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Syndication de notas pro le etiquetta %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Syndication de notas pro le etiquetta %s (Atom)"
@@ -4101,7 +4228,7 @@ msgstr ""
msgid "No such tag."
msgstr "Etiquetta non existe."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Methodo API in construction."
@@ -4125,7 +4252,7 @@ msgstr "Nulle ID de profilo in requesta."
msgid "Unsubscribed"
msgstr "Subscription cancellate"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4133,70 +4260,72 @@ msgstr ""
"Le licentia del fluxo que tu ascolta, ‘%1$s’, non es compatibile con le "
"licentia del sito ‘%2$s’."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Usator"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Configurationes de usator pro iste sito de StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Limite de biographia invalide. Debe esser un numero."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Texto de benvenita invalide. Longitude maximal es 255 characteres."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Subscription predefinite invalide: '%1$s' non es usator."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profilo"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Limite de biographia"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Le longitude maximal del biographia de un profilo in characteres."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nove usatores"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Message de benvenita a nove usatores"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Texto de benvenita pro nove usatores (max. 255 characteres)"
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Subscription predefinite"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Subscriber automaticamente le nove usatores a iste usator."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Invitationes"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Invitationes activate"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Si le usatores pote invitar nove usatores."
@@ -4326,17 +4455,23 @@ msgstr "Gruppos %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Cercar altere gruppos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s non es membro de alcun gruppo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Tenta [cercar gruppos](%%action.groupsearch%%) e facer te membro de illos."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualisationes de %1$s in %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4392,7 +4527,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4431,6 +4566,11 @@ msgstr "Non es membro del gruppo."
msgid "Group leave failed."
msgstr "Le cancellation del membrato del gruppo ha fallite."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Non poteva actualisar gruppo."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4448,27 +4588,27 @@ msgstr "Non poteva inserer message."
msgid "Could not update message with new URI."
msgstr "Non poteva actualisar message con nove URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema salveguardar nota. Troppo longe."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema salveguardar nota. Usator incognite."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppo de notas troppo rapidemente; face un pausa e publica de novo post "
"alcun minutas."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4476,41 +4616,75 @@ msgstr ""
"Troppo de messages duplicate troppo rapidemente; face un pausa e publica de "
"novo post alcun minutas."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Il te es prohibite publicar notas in iste sito."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema salveguardar nota."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problema salveguardar le cassa de entrata del gruppo."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Error del base de datos durante le insertion del responsa: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Tu ha essite blocate del subscription."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Ja subscribite!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Le usator te ha blocate."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Non subscribite!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Non poteva deler auto-subscription."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Non poteva deler subscription."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Non poteva deler subscription."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenite a %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Non poteva crear gruppo."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Non poteva configurar le membrato del gruppo."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Non poteva configurar le membrato del gruppo."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Non poteva salveguardar le subscription."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Cambiar le optiones de tu profilo"
@@ -4548,124 +4722,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Pagina sin titulo"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigation primari del sito"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Initio"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personal e chronologia de amicos"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Connecter"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connecter con servicios"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Connecter"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modificar le configuration del sito"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invitar amicos e collegas a accompaniar te in %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Clauder session"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Terminar le session del sito"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Clauder session"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear un conto"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Crear conto"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Identificar te a iste sito"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Adjuta"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Aperir session"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Adjuta me!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Cercar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Adjuta"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cercar personas o texto"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Cercar"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso del sito"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas local"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso de pagina"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navigation secundari del sito"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Adjuta"
+
+#: lib/action.php:754
msgid "About"
msgstr "A proposito"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "CdS"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Confidentialitate"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Insignia"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licentia del software StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4674,12 +4912,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblog. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4690,96 +4928,150 @@ msgstr ""
"net/), version %s, disponibile sub le [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licentia del contento del sito"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Le contento e datos de %1$s es private e confidential."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Contento e datos sub copyright de %1$s. Tote le derectos reservate."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Contento e datos sub copyright del contributores. Tote le derectos reservate."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Totes "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licentia."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Post"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Ante"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Tu non pote facer modificationes in iste sito."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Le modification de iste pannello non es permittite."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() non implementate."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() non implementate."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossibile deler configuration de apparentia."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuration basic del sito"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuration del apparentia"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Apparentia"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuration del usator"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usator"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuration del accesso"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuration del camminos"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuration del sessiones"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Aviso del sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuration del camminos"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"Le ressource de API require accesso pro lectura e scriptura, ma tu ha "
"solmente accesso pro lectura."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4873,11 +5165,11 @@ msgstr "Notas ubi iste annexo appare"
msgid "Tags for this attachment"
msgstr "Etiquettas pro iste annexo"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Cambio del contrasigno fallite"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Cambio del contrasigno non permittite"
@@ -5028,82 +5320,92 @@ msgstr "Errur durante le salveguarda del nota."
msgid "Specify the name of the user to subscribe to"
msgstr "Specifica le nomine del usator al qual subscriber te"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Usator non existe"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Subscribite a %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specifica le nomine del usator al qual cancellar le subscription"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Subscription a %s cancellate"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Commando non ancora implementate."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notification disactivate."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Non pote disactivar notification."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notification activate."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Non pote activar notification."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Le commando de apertura de session es disactivate"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Iste ligamine pote esser usate solmente un vice, e es valide durante "
"solmente 2 minutas: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Subscription a %s cancellate"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Tu non es subscribite a alcuno."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Tu es subscribite a iste persona:"
msgstr[1] "Tu es subscribite a iste personas:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Necuno es subscribite a te."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Iste persona es subscribite a te:"
msgstr[1] "Iste personas es subscribite a te:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Tu non es membro de alcun gruppo."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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:"
-#: lib/command.php:728
+#: lib/command.php:769
+#, fuzzy
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5117,6 +5419,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5181,19 +5484,19 @@ msgstr ""
"tracks - non ancora implementate.\n"
"tracking - non ancora implementate.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Nulle file de configuration trovate. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Io cercava files de configuration in le sequente locos: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Considera executar le installator pro reparar isto."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir al installator."
@@ -5292,6 +5595,11 @@ msgstr "Selige etiquetta pro reducer lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+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 del pagina initial o blog del gruppo o topico"
@@ -5381,25 +5689,25 @@ msgstr "Error de systema durante le incargamento del file."
#: lib/imagefile.php:96
msgid "Not an image or corrupt file."
-msgstr "Le file non es un imagine o es defecte."
+msgstr "Le file non es un imagine o es defectuose."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato de file de imagine non supportate."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "File perdite."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Typo de file incognite"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "KB"
@@ -5689,7 +5997,7 @@ msgstr ""
"altere usatores in conversation. Altere personas pote inviar te messages que "
"solmente tu pote leger."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "de"
@@ -5782,6 +6090,12 @@ msgstr "A"
msgid "Available characters"
msgstr "Characteres disponibile"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Inviar"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Inviar un nota"
@@ -5815,48 +6129,48 @@ msgstr ""
"Pardono, le obtention de tu geolocalisation prende plus tempore que "
"previste. Per favor reproba plus tarde."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "W"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "a"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in contexto"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetite per"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder a iste nota"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Nota repetite"
@@ -5888,10 +6202,6 @@ msgstr "Error durante le insertion del profilo remote"
msgid "Duplicate notice"
msgstr "Duplicar nota"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Tu ha essite blocate del subscription."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Non poteva inserer nove subscription."
@@ -5933,7 +6243,7 @@ msgstr "Etiquettas in le notas de %s"
msgid "Unknown"
msgstr "Incognite"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscriptiones"
@@ -5941,23 +6251,23 @@ msgstr "Subscriptiones"
msgid "All subscriptions"
msgstr "Tote le subscriptiones"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscriptores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tote le subscriptores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID del usator"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro depost"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tote le gruppos"
@@ -5997,7 +6307,12 @@ msgstr "Repeter iste nota?"
msgid "Repeat this notice"
msgstr "Repeter iste nota"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Blocar iste usator de iste gruppo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Nulle signule usator definite pro le modo de singule usator."
@@ -6017,6 +6332,10 @@ msgstr "Cercar in sito"
msgid "Keyword(s)"
msgstr "Parola(s)-clave"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Cercar"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Adjuta super le recerca"
@@ -6068,33 +6387,14 @@ msgstr "Personas qui seque %s"
msgid "Groups %s is a member of"
msgstr "Gruppos del quales %s es membro"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Ja subscribite!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Le usator te ha blocate."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Non poteva subscriber te."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Non poteva subcriber altere persona a te."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Non subscribite!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Non poteva deler auto-subscription."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invitar"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Non poteva deler subscription."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Invitar amicos e collegas a accompaniar te in %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6146,67 +6446,84 @@ msgstr "Modificar avatar"
msgid "User actions"
msgstr "Actiones de usator"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Modificar configuration de profilo"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Modificar"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Inviar un message directe a iste usator"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profilo del usator"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "alcun secundas retro"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "circa un minuta retro"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minutas retro"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "circa un hora retro"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "circa %d horas retro"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "circa un die retro"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "circa %d dies retro"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "circa un mense retro"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "circa %d menses retro"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "circa un anno retro"
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index e88583025..84a90d7d8 100644
--- a/locale/is/LC_MESSAGES/statusnet.po
+++ b/locale/is/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:11+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:39+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@@ -21,71 +21,78 @@ msgstr ""
"= 31 && n % 100 != 41 && n % 100 != 51 && n % 100 != 61 && n % 100 != 71 && "
"n % 100 != 81 && n % 100 != 91);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Samþykkja"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Stillingar fyrir mynd"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Nýskrá"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Friðhelgi"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "Bjóða"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
msgid "Closed"
msgstr ""
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Vista"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Stillingar fyrir mynd"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Vista"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Ekkert þannig merki."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -99,78 +106,87 @@ msgstr "Ekkert þannig merki."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Enginn svoleiðis notandi."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s og vinirnir, síða %d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s og vinirnir"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr ""
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr ""
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr ""
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr ""
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Færslur frá %1$s og vinum á %2$s!"
@@ -183,20 +199,20 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Aðferð í forritsskilum fannst ekki!"
@@ -230,8 +246,9 @@ msgstr "Gat ekki uppfært notanda."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Notandi hefur enga persónulega síðu."
@@ -256,7 +273,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -373,68 +390,68 @@ msgstr ""
msgid "Could not find target user."
msgstr ""
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Stuttnefni geta bara verið lágstafir og tölustafir en engin bil."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Stuttnefni nú þegar í notkun. Prófaðu eitthvað annað."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ekki tækt stuttnefni."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Heimasíða er ekki gild vefslóð."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Fullt nafn er of langt (í mesta lagi 255 stafir)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "Lýsing er of löng (í mesta lagi 140 tákn)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr ""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -446,16 +463,16 @@ msgstr ""
msgid "Group not found!"
msgstr "Aðferð í forritsskilum fannst ekki!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "Þú ert nú þegar meðlimur í þessum hópi"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Gat ekki bætt notandanum %s í hópinn %s"
@@ -465,7 +482,7 @@ msgstr "Gat ekki bætt notandanum %s í hópinn %s"
msgid "You are not a member of this group."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
@@ -497,7 +514,7 @@ msgstr "Ótæk stærð."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -506,7 +523,7 @@ msgstr "Ótæk stærð."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -541,7 +558,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -564,13 +581,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Aðgangur"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -650,23 +667,11 @@ msgstr "Skráarsnið myndar ekki stutt."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Uppáhaldsbabl frá %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Rás %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Færslur frá %1$s á %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -692,17 +697,17 @@ msgstr "%s færslur frá öllum!"
msgid "Repeated to %s"
msgstr "Svör við %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Svör við %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Babl merkt með %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -718,8 +723,7 @@ msgstr ""
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ekkert stuttnefni."
@@ -731,7 +735,7 @@ msgstr "Engin stærð."
msgid "Invalid size."
msgstr "Ótæk stærð."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Mynd"
@@ -748,30 +752,30 @@ msgid "User without matching profile"
msgstr "Notandi með enga persónulega síðu sem passar við"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Stillingar fyrir mynd"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Upphafleg mynd"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Forsýn"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Eyða"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Hlaða upp"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Skera af"
@@ -780,7 +784,7 @@ msgid "Pick a square area of the image to be your avatar"
msgstr ""
"Veldu ferningslaga svæði á upphaflegu myndinni sem einkennismyndina þína"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Týndum skráargögnunum okkar"
@@ -813,23 +817,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nei"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Opna á þennan notanda"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Já"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Loka á þennan notanda"
@@ -837,39 +841,43 @@ msgstr "Loka á þennan notanda"
msgid "Failed to save block information."
msgstr "Mistókst að vista upplýsingar um notendalokun"
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Enginn þannig hópur."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s og vinirnir, síða %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Opna"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Opna á þennan notanda"
@@ -928,7 +936,7 @@ msgid "Conversation"
msgstr ""
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Babl"
@@ -950,7 +958,7 @@ msgstr "Þú ert ekki meðlimur í þessum hópi."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Það komu upp vandamál varðandi setutókann þinn."
@@ -976,12 +984,13 @@ msgstr "Gat ekki uppfært hóp."
msgid "Delete this application"
msgstr "Eyða þessu babli"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ekki innskráð(ur)."
@@ -1008,7 +1017,7 @@ msgstr "Ertu viss um að þú viljir eyða þessu babli?"
msgid "Do not delete this notice"
msgstr ""
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Eyða þessu babli"
@@ -1027,19 +1036,19 @@ msgstr "Þú getur ekki eytt stöðu annars notanda."
msgid "Delete user"
msgstr "Eyða"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Eyða þessu babli"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1146,6 +1155,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Vista"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1248,30 +1269,30 @@ msgstr "Breyta hópnum %s"
msgid "You must be logged in to create a group."
msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Þú verður að vera stjórnandi til að geta breytt hópnum"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Notaðu þetta eyðublað til að breyta hópnum."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "Lýsing er of löng (í mesta lagi 140 tákn)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Gat ekki uppfært hóp."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr ""
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Valmöguleikar vistaðir."
@@ -1391,7 +1412,7 @@ msgid "Cannot normalize that email address"
msgstr "Get ekki staðlað þetta tölvupóstfang"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ekki tækt tölvupóstfang."
@@ -1587,6 +1608,25 @@ msgstr "Ekkert svoleiðis babl."
msgid "Cannot read file."
msgstr "Týndum skránni okkar"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ótæk stærð."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Þú getur ekki sent þessum notanda skilaboð."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Notandi hefur enga persónulega síðu."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1616,7 +1656,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1649,92 +1689,98 @@ msgstr "Ekkert einkenni"
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr ""
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Einkennismynd hópsins"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Notandi með enga persónulega síðu sem passar við"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Einkennismynd uppfærð."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Tókst ekki að uppfæra einkennismynd"
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Hópmeðlimir %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "Hópmeðlimir %s, síða %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Listi yfir notendur í þessum hóp."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Stjórnandi"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Loka"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Rás %s"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Færslur frá %1$s á %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Hópar"
@@ -1986,16 +2032,19 @@ msgstr "Persónuleg skilaboð"
msgid "Optionally add a personal message to the invitation."
msgstr "Bættu persónulegum skilaboðum við boðskortið ef þú vilt."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Senda"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s hefur boðið þér að slást í hópinn með þeim á %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2056,7 +2105,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Þú verður að hafa skráð þig inn til að bæta þér í hóp."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Ekkert stuttnefni."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s bætti sér í hópinn %s"
@@ -2065,11 +2119,11 @@ msgstr "%s bætti sér í hópinn %s"
msgid "You must be logged in to leave a group."
msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s gekk úr hópnum %s"
@@ -2087,8 +2141,7 @@ msgstr "Rangt notendanafn eða lykilorð."
msgid "Error setting user. You are probably not authorized."
msgstr "Engin heimild."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Innskráning"
@@ -2347,8 +2400,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Enginn stuðningur við gagnasnið."
@@ -2495,7 +2548,8 @@ msgstr "Get ekki vistað nýja lykilorðið."
msgid "Password saved."
msgstr "Lykilorð vistað."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2528,7 +2582,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "Bjóða"
@@ -2623,7 +2676,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Endurheimta"
@@ -2682,11 +2735,11 @@ msgstr "Ekki gilt persónumerki: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Notendur sjálfmerktir með %s - síða %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ótækt bablinnihald"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2711,7 +2764,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 lágstafir eða tölustafir, engin greinarmerki eða bil"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Fullt nafn"
@@ -2742,7 +2795,7 @@ msgid "Bio"
msgstr "Lýsing"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2769,7 +2822,7 @@ msgstr ""
"Merki fyrir þig (bókstafir, tölustafir, -, ., og _), aðskilin með kommu eða "
"bili"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Tungumál"
@@ -2797,7 +2850,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Lýsingin er of löng (í mesta lagi 140 tákn)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tímabelti ekki valið."
@@ -2810,24 +2863,25 @@ msgstr "Tungumál er of langt (í mesta lagi 50 stafir)."
msgid "Invalid tag: \"%s\""
msgstr "Ógilt merki: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Gat ekki uppfært notanda í sjálfvirka áskrift."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Gat ekki vistað merki."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Gat ekki vistað persónulega síðu."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Gat ekki vistað merki."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Stillingar vistaðar."
@@ -2840,45 +2894,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Gat ekki sótt efni úr almenningsveitu."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Almenningsrás, síða %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Almenningsrás"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2887,7 +2941,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3060,8 +3114,7 @@ msgstr ""
msgid "Registration successful"
msgstr "Nýskráning tókst"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Nýskrá"
@@ -3101,7 +3154,7 @@ msgid "Same as password above. Required."
msgstr "Sama og lykilorðið hér fyrir ofan. Nauðsynlegt."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Tölvupóstur"
@@ -3206,7 +3259,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Veffang persónulegrar síðu á samvirkandi örbloggsþjónustu"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Gerast áskrifandi"
@@ -3251,7 +3304,7 @@ msgstr "Þú getur ekki nýskráð þig nema þú samþykkir leyfið."
msgid "You already repeated that notice."
msgstr "Þú hefur nú þegar lokað á þennan notanda."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "à sviðsljósinu"
@@ -3260,47 +3313,47 @@ msgstr "à sviðsljósinu"
msgid "Repeated!"
msgstr ""
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Svör við %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Skilaboð til %1$s á %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr ""
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr ""
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Bablveita fyrir hópinn %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3312,6 +3365,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Skilaboð til %1$s á %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Þú getur ekki sent þessum notanda skilaboð."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Notandi með enga persónulega síðu sem passar við"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3326,8 +3389,9 @@ msgstr "Þú getur ekki sent þessum notanda skilaboð."
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3351,8 +3415,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Stillingar fyrir mynd"
@@ -3387,8 +3451,8 @@ msgstr "Uppröðun"
msgid "Description"
msgstr "Lýsing"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tölfræði"
@@ -3449,35 +3513,35 @@ msgstr "Uppáhaldsbabl %s"
msgid "Could not retrieve favorite notices."
msgstr "Gat ekki sótt uppáhaldsbabl."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Bablveita uppáhaldsbabls %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Bablveita uppáhaldsbabls %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Bablveita uppáhaldsbabls %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3485,7 +3549,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3499,67 +3563,67 @@ msgstr "%s hópurinn"
msgid "%1$s group, page %2$d"
msgstr "Hópmeðlimir %s, síða %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Hópssíðan"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "Vefslóð"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Athugasemd"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Hópsaðgerðir"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s hópurinn"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Meðlimir"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ekkert)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Allir meðlimir"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr ""
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3569,7 +3633,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3578,7 +3642,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3690,150 +3754,139 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ekki tækt tölvupóstfang"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nýtt tölvupóstfang til að senda á %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Staðbundin sýn"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Tungumál (ákjósanlegt)"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ný skilaboð"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Vandamál komu upp við að vista babl."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Babl vefsíðunnar"
#: actions/smssettings.php:58
#, fuzzy
@@ -3935,19 +3988,90 @@ msgstr ""
msgid "No code entered"
msgstr "Enginn lykill sleginn inn"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Stikl aðalsíðu"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Stillingar fyrir mynd"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Þú ert ekki áskrifandi."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Gat ekki vistað áskrift."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ekki staðbundinn notandi."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Ekkert svoleiðis babl."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Þú ert ekki áskrifandi."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Þú ert nú í áskrift"
@@ -4007,7 +4131,7 @@ msgstr "Þetta er fólkið sem þú hlustar á bablið í."
msgid "These are the people whose notices %s listens to."
msgstr "Þetta er fólkið sem %s hlustar á bablið í."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4017,35 +4141,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber snarskilaboðaþjónusta"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Notendur sjálfmerktir með %s - síða %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Bablveita fyrir %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -4102,7 +4226,7 @@ msgstr ""
msgid "No such tag."
msgstr "Ekkert þannig merki."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Aðferð í forritsskilum er í þróun."
@@ -4129,83 +4253,85 @@ msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
msgid "Unsubscribed"
msgstr "Ekki lengur áskrifandi"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Notandi"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Persónuleg síða"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "Bjóða nýjum notendum að vera með"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Allar áskriftir"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Gerast sjálfkrafa áskrifandi að hverjum þeim sem gerist áskrifandi að þér "
"(best fyrir ómannlega notendur)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Boðskort hefur verið sent út"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "Boðskort hefur verið sent út"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4336,16 +4462,22 @@ msgstr "Hópmeðlimir %s, síða %d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Færslur frá %1$s á %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4389,7 +4521,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persónulegt"
@@ -4430,6 +4562,11 @@ msgstr "Gat ekki uppfært hóp."
msgid "Group leave failed."
msgstr "Hópssíðan"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Gat ekki uppfært hóp."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4448,68 +4585,105 @@ msgstr "Gat ekki skeytt skilaboðum inn í."
msgid "Could not update message with new URI."
msgstr "Gat ekki uppfært skilaboð með nýju veffangi."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Gat ekki vistað babl. Óþekktur notandi."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Of mikið babl í einu; slakaðu aðeins á og haltu svo áfram eftir nokkrar "
"mínútur."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Gagnagrunnsvilla við innsetningu svars: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Notandinn hefur lokað á þig."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Ekki í áskrift!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Gat ekki eytt áskrift."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Gat ekki eytt áskrift."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Gat ekki eytt áskrift."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Gat ekki búið til hóp."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Gat ekki skráð hópmeðlimi."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Gat ekki skráð hópmeðlimi."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Gat ekki vistað áskrift."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Breyta persónulegu stillingunum þínum"
@@ -4547,128 +4721,190 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ónafngreind síða"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Stikl aðalsíðu"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Heim"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persónuleg síða og vinarás"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Persónulegt"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr ""
"Breyttu tölvupóstinum þínum, einkennismyndinni þinni, lykilorðinu þínu, "
"persónulegu síðunni þinni"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Tengjast"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Gat ekki framsent til vefþjóns: %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Tengjast"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Stikl aðalsíðu"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Bjóða"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Stjórnandi"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Bjóða vinum og vandamönnum að slást í hópinn á %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Útskráning"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Bjóða"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Skrá þig út af síðunni"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Útskráning"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Búa til aðgang"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Nýskrá"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Skrá þig inn á síðuna"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hjálp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Innskráning"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjálp!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Leita"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjálp"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Leita að fólki eða texta"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Leita"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Babl vefsíðunnar"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Staðbundin sýn"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Babl síðunnar"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Stikl undirsíðu"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjálp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Um"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Spurt og svarað"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Friðhelgi"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Frumþula"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Tengiliður"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4677,12 +4913,12 @@ msgstr ""
"**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er örbloggsþjónusta."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4693,104 +4929,158 @@ msgstr ""
"sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Allt "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "leyfi."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Uppröðun"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Eftir"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Ãður"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Þú getur ekki sent þessum notanda skilaboð."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Nýskráning ekki leyfð."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Skipun hefur ekki verið fullbúin"
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Skipun hefur ekki verið fullbúin"
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Staðfesting tölvupóstfangs"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Bjóða"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS staðfesting"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Persónulegt"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS staðfesting"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Notandi"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS staðfesting"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS staðfesting"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS staðfesting"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Babl vefsíðunnar"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS staðfesting"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4885,12 +5175,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Lykilorðabreyting"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Lykilorðabreyting"
@@ -5044,83 +5334,92 @@ msgstr "Vandamál komu upp við að vista babl."
msgid "Specify the name of the user to subscribe to"
msgstr "Tilgreindu nafn notandans sem þú vilt gerast áskrifandi að"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Enginn svoleiðis notandi."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Nú ert þú áskrifandi að %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Tilgreindu nafn notandans sem þú vilt hætta sem áskrifandi að"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Nú ert þú ekki lengur áskrifandi að %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Skipun hefur ekki verið fullbúin"
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Tilkynningar af."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Get ekki slökkt á tilkynningum."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Tilkynningar á."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Get ekki kveikt á tilkynningum."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Nú ert þú ekki lengur áskrifandi að %s"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Þú ert ekki áskrifandi."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Þú ert nú þegar í áskrift að þessum notendum:"
msgstr[1] "Þú ert nú þegar í áskrift að þessum notendum:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
msgstr[1] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5134,6 +5433,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5161,20 +5461,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Enginn staðfestingarlykill."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Skrá þig inn á síðuna"
@@ -5275,6 +5575,11 @@ msgstr "Veldu merki til að þrengja lista"
msgid "Go"
msgstr "Ãfram"
+#: lib/grantroleform.php:91
+#, php-format
+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 "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
@@ -5366,23 +5671,23 @@ msgstr "Kerfisvilla kom upp við upphal skráar."
msgid "Not an image or corrupt file."
msgstr "Annaðhvort ekki mynd eða þá að skráin er gölluð."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Skráarsnið myndar ekki stutt."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Týndum skránni okkar"
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Óþekkt skráargerð"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5596,7 +5901,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr "frá"
@@ -5687,6 +5992,12 @@ msgstr "Til"
msgid "Available characters"
msgstr "Leyfileg tákn"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Senda"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Senda babl"
@@ -5720,50 +6031,50 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "Nei"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "à sviðsljósinu"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svara þessu babli"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Babl sent inn"
@@ -5797,11 +6108,6 @@ msgstr "Villa kom upp við að setja inn persónulega fjarsíðu"
msgid "Duplicate notice"
msgstr "Eyða babli"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Gat ekki sett inn nýja áskrift."
@@ -5844,7 +6150,7 @@ msgstr "Merki í babli %s"
msgid "Unknown"
msgstr "Óþekkt aðgerð"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Ãskriftir"
@@ -5852,23 +6158,23 @@ msgstr "Ãskriftir"
msgid "All subscriptions"
msgstr "Allar áskriftir"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Ãskrifendur"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Allir áskrifendur"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Meðlimur síðan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Allir hópar"
@@ -5911,7 +6217,12 @@ msgstr "Svara þessu babli"
msgid "Repeat this notice"
msgstr "Svara þessu babli"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5933,6 +6244,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Leita"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5986,35 +6301,14 @@ msgstr "Fólk sem eru áskrifendur að %s"
msgid "Groups %s is a member of"
msgstr "Hópar sem %s er meðlimur í"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Notandinn hefur lokað á þig."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Gat ekki farið í áskrift."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ekki í áskrift!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Gat ekki eytt áskrift."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Bjóða"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Gat ekki eytt áskrift."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Bjóða vinum og vandamönnum að slást í hópinn á %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6068,67 +6362,82 @@ msgstr ""
msgid "User actions"
msgstr "Notandaaðgerðir"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr ""
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Senda bein skilaboð til þessa notanda"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Skilaboð"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Persónuleg síða notanda"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fyrir nokkrum sekúndum"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index 37ac228b2..5f72eb1a7 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -9,77 +9,85 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:14+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:42+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accesso"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Impostazioni di accesso al sito"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registrazione"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privato"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Proibire agli utenti anonimi (che non hanno effettuato l'accesso) di vedere "
"il sito?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Solo invito"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privato"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Rende la registrazione solo su invito"
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Chiuso"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Solo invito"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Disabilita la creazione di nuovi account"
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Salva"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Chiuso"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Salva impostazioni di accesso"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Salva"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Pagina inesistente."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,46 +101,53 @@ msgstr "Pagina inesistente."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Utente inesistente."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s e amici, pagina %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s e amici"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed degli amici di %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed degli amici di %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed degli amici di %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -140,7 +155,7 @@ msgstr ""
"Questa è l'attività di %s e i suoi amici, ma nessuno ha ancora scritto "
"qualche cosa."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -149,7 +164,8 @@ msgstr ""
"Prova ad abbonarti a più persone, [entra in un gruppo](%%action.groups%%) o "
"scrivi un messaggio."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -159,7 +175,7 @@ msgstr ""
"qualche cosa alla sua attenzione](%%%%action.newnotice%%%%?status_textarea=%3"
"$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -168,12 +184,13 @@ msgstr ""
"Perché non [crei un account](%%%%action.register%%%%) e richiami %s o scrivi "
"un messaggio alla sua attenzione."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tu e i tuoi amici"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Messaggi da %1$s e amici su %2$s!"
@@ -186,20 +203,20 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Metodo delle API non trovato."
@@ -233,8 +250,9 @@ msgstr "Impossibile aggiornare l'utente."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "L'utente non ha un profilo."
@@ -260,7 +278,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -370,7 +388,7 @@ msgstr "Impossibile determinare l'utente sorgente."
msgid "Could not find target user."
msgstr "Impossibile trovare l'utente destinazione."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -378,62 +396,62 @@ msgstr ""
"Il soprannome deve essere composto solo da lettere minuscole e numeri, senza "
"spazi."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Soprannome già in uso. Prova con un altro."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Non è un soprannome valido."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "L'indirizzo della pagina web non è valido."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Nome troppo lungo (max 255 caratteri)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "La descrizione è troppo lunga (max %d caratteri)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Ubicazione troppo lunga (max 255 caratteri)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Troppi alias! Massimo %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Alias non valido: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "L'alias \"%s\" è già in uso. Prova con un altro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "L'alias non può essere lo stesso del soprannome."
@@ -444,15 +462,15 @@ msgstr "L'alias non può essere lo stesso del soprannome."
msgid "Group not found!"
msgstr "Gruppo non trovato!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Fai già parte di quel gruppo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "L'amministratore ti ha bloccato l'accesso a quel gruppo."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
@@ -461,7 +479,7 @@ msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
msgid "You are not a member of this group."
msgstr "Non fai parte di questo gruppo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s."
@@ -492,7 +510,7 @@ msgstr "Token non valido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -501,7 +519,7 @@ msgstr "Token non valido."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -536,7 +554,7 @@ msgstr "Il token di richiesta %s è stato rifiutato o revocato."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -562,13 +580,13 @@ msgstr ""
"<strong>%3$s</strong> ai dati del tuo account %4$s. È consigliato fornire "
"accesso al proprio account %4$s solo ad applicazioni di cui ci si può fidare."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -618,7 +636,7 @@ msgstr "Messaggio eliminato."
#: actions/apistatusesshow.php:144
msgid "No status with that ID found."
-msgstr "Nessun stato trovato con quel ID."
+msgstr "Nessuno stato trovato con quel ID."
#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
@@ -645,23 +663,11 @@ msgstr "Formato non supportato."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Preferiti da %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Attività di %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Messaggi da %1$s su %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -687,17 +693,17 @@ msgstr "Aggiornamenti di %s da tutti!"
msgid "Repeated to %s"
msgstr "Ripetuto a %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Ripetizioni di %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Messaggi etichettati con %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Messaggi etichettati con %1$s su %2$s!"
@@ -713,8 +719,7 @@ msgstr "Nessun allegato."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Nessun soprannome."
@@ -726,7 +731,7 @@ msgstr "Nessuna dimensione."
msgid "Invalid size."
msgstr "Dimensione non valida."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Immagine"
@@ -744,30 +749,30 @@ msgid "User without matching profile"
msgstr "Utente senza profilo corrispondente"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Impostazioni immagine"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Originale"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Anteprima"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Elimina"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Carica"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Ritaglia"
@@ -775,7 +780,7 @@ msgstr "Ritaglia"
msgid "Pick a square area of the image to be your avatar"
msgstr "Scegli un'area quadrata per la tua immagine personale"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Perso il nostro file di dati."
@@ -810,22 +815,22 @@ msgstr ""
"risposte che ti invierà."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Non bloccare questo utente"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Sì"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocca questo utente"
@@ -833,39 +838,43 @@ msgstr "Blocca questo utente"
msgid "Failed to save block information."
msgstr "Salvataggio delle informazioni per il blocco non riuscito."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Nessuna gruppo."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "Profili bloccati di %s"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Profili bloccati di %1$s, pagina %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Un elenco degli utenti a cui è bloccato l'accesso a questo gruppo."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Sblocca l'utente dal gruppo"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Sblocca"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Sblocca questo utente"
@@ -921,7 +930,7 @@ msgid "Conversation"
msgstr "Conversazione"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Messaggi"
@@ -940,7 +949,7 @@ msgstr "Questa applicazione non è di tua proprietà."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Si è verificato un problema con il tuo token di sessione."
@@ -965,12 +974,13 @@ msgstr "Non eliminare l'applicazione"
msgid "Delete this application"
msgstr "Elimina l'applicazione"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Accesso non effettuato."
@@ -999,7 +1009,7 @@ msgstr "Vuoi eliminare questo messaggio?"
msgid "Do not delete this notice"
msgstr "Non eliminare il messaggio"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Elimina questo messaggio"
@@ -1015,7 +1025,7 @@ msgstr "Puoi eliminare solo gli utenti locali."
msgid "Delete user"
msgstr "Elimina utente"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1023,12 +1033,12 @@ msgstr ""
"Vuoi eliminare questo utente? Questa azione eliminerà tutti i dati "
"dell'utente dal database, senza una copia di sicurezza."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Elimina questo utente"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Aspetto"
@@ -1131,6 +1141,18 @@ msgstr "Ripristina i valori predefiniti"
msgid "Reset back to default"
msgstr "Reimposta i valori predefiniti"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Salva"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Salva aspetto"
@@ -1222,29 +1244,29 @@ msgstr "Modifica il gruppo %s"
msgid "You must be logged in to create a group."
msgstr "Devi eseguire l'accesso per creare un gruppo."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Devi essere amministratore per modificare il gruppo."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Usa questo modulo per modificare il gruppo."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "La descrizione è troppo lunga (max %d caratteri)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Impossibile aggiornare il gruppo."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Impossibile creare gli alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Opzioni salvate."
@@ -1366,7 +1388,7 @@ msgid "Cannot normalize that email address"
msgstr "Impossibile normalizzare quell'indirizzo email"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non è un indirizzo email valido."
@@ -1559,6 +1581,25 @@ msgstr "Nessun file."
msgid "Cannot read file."
msgstr "Impossibile leggere il file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Token non valido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Non puoi mettere in \"sandbox\" gli utenti su questo sito."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "L'utente è già stato zittito."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1588,7 +1629,7 @@ msgstr "L'utente è già bloccato dal gruppo."
msgid "User is not a member of group."
msgstr "L'utente non fa parte del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blocca l'utente dal gruppo"
@@ -1623,11 +1664,11 @@ msgstr "Nessun ID."
msgid "You must be logged in to edit a group."
msgstr "Devi eseguire l'accesso per modificare un gruppo."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Aspetto del gruppo"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1635,20 +1676,20 @@ msgstr ""
"Personalizza l'aspetto del tuo gruppo con un'immagine di sfondo e dei colori "
"personalizzati."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Impossibile aggiornare l'aspetto."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Preferenze dell'aspetto salvate."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo del gruppo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1656,62 +1697,68 @@ msgstr ""
"Puoi caricare un'immagine per il logo del tuo gruppo. La dimensione massima "
"del file è di %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Utente senza profilo corrispondente."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Scegli un'area quadrata dell'immagine per il logo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo aggiornato."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Aggiornamento del logo non riuscito."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Membri del gruppo %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Membri del gruppo %1$s, pagina %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Un elenco degli utenti in questo gruppo."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Amministra"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blocca"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Rende l'utente amministratore del gruppo"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Rendi amm."
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Rende questo utente un amministratore"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Attività di %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Messaggi dai membri di %1$s su %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppi"
@@ -1970,16 +2017,19 @@ msgstr "Messaggio personale"
msgid "Optionally add a personal message to the invitation."
msgstr "Puoi aggiungere un messaggio personale agli inviti."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Invia"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "Hai ricevuto un invito per seguire %1$s su %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2040,7 +2090,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Devi eseguire l'accesso per iscriverti a un gruppo."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Nessun soprannome o ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s fa ora parte del gruppo %2$s"
@@ -2049,11 +2103,11 @@ msgstr "%1$s fa ora parte del gruppo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Devi eseguire l'accesso per lasciare un gruppo."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Non fai parte di quel gruppo."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ha lasciato il gruppo %2$s"
@@ -2070,8 +2124,7 @@ msgstr "Nome utente o password non corretto."
msgid "Error setting user. You are probably not authorized."
msgstr "Errore nell'impostare l'utente. Forse non hai l'autorizzazione."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Accedi"
@@ -2325,8 +2378,8 @@ msgstr "tipo di contenuto "
msgid "Only "
msgstr "Solo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Non è un formato di dati supportato."
@@ -2467,7 +2520,8 @@ msgstr "Impossibile salvare la nuova password."
msgid "Password saved."
msgstr "Password salvata."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Percorsi"
@@ -2500,7 +2554,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Server SSL non valido. La lunghezza massima è di 255 caratteri."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Sito"
@@ -2588,7 +2641,7 @@ msgstr "Directory dello sfondo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
@@ -2643,11 +2696,11 @@ msgstr "Non è un'etichetta valida di persona: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utenti auto-etichettati con %1$s - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contenuto del messaggio non valido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2675,7 +2728,7 @@ msgstr ""
"1-64 lettere minuscole o numeri, senza spazi o simboli di punteggiatura"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nome"
@@ -2703,7 +2756,7 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2729,7 +2782,7 @@ msgid ""
msgstr ""
"Le tue etichette (lettere, numeri, -, . e _), separate da virgole o spazi"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2757,7 +2810,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografia è troppo lunga (max %d caratteri)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso orario non selezionato"
@@ -2770,23 +2823,24 @@ msgstr "La lingua è troppo lunga (max 50 caratteri)."
msgid "Invalid tag: \"%s\""
msgstr "Etichetta non valida: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Impossibile aggiornare l'utente per auto-abbonarsi."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Impossibile salvare le preferenze della posizione."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Impossibile salvare il profilo."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Impossibile salvare le etichette."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Impostazioni salvate."
@@ -2799,28 +2853,28 @@ msgstr "Oltre il limite della pagina (%s)"
msgid "Could not retrieve public stream."
msgstr "Impossibile recuperare l'attività pubblica."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Attività pubblica, pagina %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Attività pubblica"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed dell'attività pubblica (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed dell'attività pubblica (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Feed dell'attività pubblica (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2829,18 +2883,18 @@ msgstr ""
"Questa è l'attività pubblica di %%site.name%%, ma nessuno ha ancora scritto "
"qualche cosa."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Fallo tu!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
"Perché non [crei un account](%%action.register%%) e scrivi qualche cosa!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2853,7 +2907,7 @@ msgstr ""
"net/). [Registrati](%%action.register%%) per condividere messaggi con i tuoi "
"amici, i tuoi familiari e colleghi! ([Maggiori informazioni](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3030,10 +3084,9 @@ msgstr "Codice di invito non valido."
msgid "Registration successful"
msgstr "Registrazione riuscita"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
-msgstr "Registra"
+msgstr "Registrati"
#: actions/register.php:135
msgid "Registration not allowed."
@@ -3074,7 +3127,7 @@ msgid "Same as password above. Required."
msgstr "Stessa password di sopra; richiesta"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3181,7 +3234,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del tuo profilo su un altro servizio di microblog compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abbonati"
@@ -3219,7 +3272,7 @@ msgstr "Non puoi ripetere i tuoi stessi messaggi."
msgid "You already repeated that notice."
msgstr "Hai già ripetuto quel messaggio."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Ripetuti"
@@ -3227,33 +3280,33 @@ msgstr "Ripetuti"
msgid "Repeated!"
msgstr "Ripetuti!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Risposte a %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Risposte a %1$s, pagina %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Feed delle risposte di %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Feed delle risposte di %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Feed delle risposte di %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3262,7 +3315,7 @@ msgstr ""
"Questa è l'attività delle risposte a %1$s, ma %2$s non ha ricevuto ancora "
"alcun messaggio."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3271,7 +3324,7 @@ msgstr ""
"Puoi avviare una discussione con altri utenti, abbonarti a più persone o "
"[entrare in qualche gruppo](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3285,6 +3338,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Risposte a %1$s su %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Non puoi zittire gli utenti su questo sito."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Utente senza profilo corrispondente."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3297,8 +3360,9 @@ msgstr "Non puoi mettere in \"sandbox\" gli utenti su questo sito."
msgid "User is already sandboxed."
msgstr "L'utente è già nella \"sandbox\"."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessioni"
@@ -3322,8 +3386,8 @@ msgstr "Debug delle sessioni"
msgid "Turn on debugging output for sessions."
msgstr "Abilita il debug per le sessioni"
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salva impostazioni"
@@ -3353,8 +3417,8 @@ msgstr "Organizzazione"
msgid "Description"
msgstr "Descrizione"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiche"
@@ -3416,22 +3480,22 @@ msgstr "Messaggi preferiti di %1$s, pagina %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Impossibile recuperare i messaggi preferiti."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed dei preferiti di %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed dei preferiti di %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed dei preferiti di di %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3439,7 +3503,7 @@ msgstr ""
"Non hai ancora scelto alcun messaggio come preferito. Fai clic sul pulsate a "
"forma di cuore per salvare i messaggi e rileggerli in un altro momento."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3448,7 +3512,7 @@ msgstr ""
"%s non ha aggiunto alcun messaggio tra i suoi preferiti. Scrivi qualche cosa "
"di interessante in modo che lo inserisca tra i suoi preferiti. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3459,7 +3523,7 @@ msgstr ""
"account](%%%%action.register%%%%) e quindi scrivi qualche cosa di "
"interessante in modo che lo inserisca tra i suoi preferiti. :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Questo è un modo per condividere ciò che ti piace."
@@ -3473,67 +3537,67 @@ msgstr "Gruppo %s"
msgid "%1$s group, page %2$d"
msgstr "Gruppi di %1$s, pagina %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profilo del gruppo"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Azioni dei gruppi"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed dei messaggi per il gruppo %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF per il gruppo %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membri"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(nessuno)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tutti i membri"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Creato"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3549,7 +3613,7 @@ msgstr ""
"stesso](%%%%action.register%%%%) per far parte di questo gruppo e di molti "
"altri! ([Maggiori informazioni](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3561,7 +3625,7 @@ msgstr ""
"(http://it.wikipedia.org/wiki/Microblogging) basato sul software libero "
"[StatusNet](http://status.net/)."
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Amministratori"
@@ -3683,148 +3747,139 @@ msgid "User is already silenced."
msgstr "L'utente è già stato zittito."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Impostazioni di base per questo sito StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Il nome del sito non deve avere lunghezza parti a zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Devi avere un'email di contatto valida."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" sconosciuta."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL di segnalazione snapshot non valido."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valore di esecuzione dello snapshot non valido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "La frequenza degli snapshot deve essere un numero."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Il limite minimo del testo è di 140 caratteri."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Il limite per i duplicati deve essere di 1 o più secondi."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Generale"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome del sito"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Il nome del tuo sito, topo \"Acme Microblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Offerto da"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Testo usato per i crediti nel piè di pagina di ogni pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL per offerto da"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usato per i crediti nel piè di pagina di ogni pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Indirizzo email di contatto per il sito"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Locale"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso orario predefinito"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso orario predefinito; tipicamente UTC"
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Lingua predefinita"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Snapshot"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "A caso quando avviene un web hit"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "In un job pianificato"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Snapshot dei dati"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviare dati statistici a status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequenza"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Gli snapshot verranno inviati ogni N web hit"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL per la segnalazione"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Gli snapshot verranno inviati a questo URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limiti"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limiti del testo"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Numero massimo di caratteri per messaggo"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite duplicati"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo gli utenti devono attendere (in secondi) prima di inviare "
"nuovamente lo stesso messaggio"
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nuovo messaggio"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Impossibile salvare la impostazioni dell'aspetto."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Messaggio del sito"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Impostazioni SMS"
@@ -3924,19 +3979,89 @@ msgstr ""
msgid "No code entered"
msgstr "Nessun codice inserito"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Snapshot"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Modifica la configurazione del sito"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valore di esecuzione dello snapshot non valido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La frequenza degli snapshot deve essere un numero."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL di segnalazione snapshot non valido."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "A caso quando avviene un web hit"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "In un job pianificato"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Snapshot dei dati"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando inviare dati statistici a status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequenza"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Gli snapshot verranno inviati ogni N web hit"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL per la segnalazione"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Gli snapshot verranno inviati a questo URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Salva impostazioni"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Non hai una abbonamento a quel profilo."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Impossibile salvare l'abbonamento."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Non un utente locale."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Quest'azione accetta solo richieste POST."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Nessun profilo."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"Non è possibile abbonarsi a un profilo remoto OMB 0.1 con quest'azione."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abbonati"
@@ -4000,7 +4125,7 @@ msgstr "Queste sono le persone che stai seguendo."
msgid "These are the people whose notices %s listens to."
msgstr "Queste sono le persone seguite da %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4015,35 +4140,35 @@ msgstr ""
"[usi Twitter](%%action.twittersettings%%), puoi abbonarti automaticamente "
"alle persone che già seguivi lì."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s non sta seguendo nessuno."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Messaggi etichettati con %1$s, pagina %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Feed dei messaggi per l'etichetta %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Feed dei messaggi per l'etichetta %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Feed dei messaggi per l'etichetta %s (Atom)"
@@ -4099,7 +4224,7 @@ msgstr ""
msgid "No such tag."
msgstr "Nessuna etichetta."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Metodo delle API in lavorazione."
@@ -4123,7 +4248,7 @@ msgstr "Nessun ID di profilo nella richiesta."
msgid "Unsubscribed"
msgstr "Abbonamento annullato"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4131,71 +4256,73 @@ msgstr ""
"La licenza \"%1$s\" dello stream di chi ascolti non è compatibile con la "
"licenza \"%2$s\" di questo sito."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Utente"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Impostazioni utente per questo sito StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Limite per la biografia non valido. Deve essere numerico."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
"Testo di benvenuto non valido. La lunghezza massima è di 255 caratteri."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Abbonamento predefinito non valido: \"%1$s\" non è un utente."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profilo"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Limite biografia"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Lunghezza massima in caratteri della biografia"
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nuovi utenti"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Messaggio per nuovi utenti"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Messaggio di benvenuto per nuovi utenti (max 255 caratteri)"
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Abbonamento predefinito"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Abbonare automaticamente i nuovi utenti a questo utente"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Inviti"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Inviti abilitati"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Indica se consentire agli utenti di invitarne di nuovi"
@@ -4325,16 +4452,22 @@ msgstr "Gruppi di %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Cerca altri gruppi"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s non fa parte di alcun gruppo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Prova a [cercare dei gruppi](%%action.groupsearch%%) e iscriviti."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Messaggi da %1$s su %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4390,7 +4523,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugin"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versione"
@@ -4431,6 +4564,10 @@ msgstr "Non si fa parte del gruppo."
msgid "Group leave failed."
msgstr "Uscita dal gruppo non riuscita."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Impossibile aggiornare il gruppo locale."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4448,27 +4585,27 @@ msgstr "Impossibile inserire il messaggio."
msgid "Could not update message with new URI."
msgstr "Impossibile aggiornare il messaggio con il nuovo URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Errore del DB nell'inserire un hashtag: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema nel salvare il messaggio. Troppo lungo."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema nel salvare il messaggio. Utente sconosciuto."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppi messaggi troppo velocemente; fai una pausa e scrivi di nuovo tra "
"qualche minuto."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4476,41 +4613,73 @@ msgstr ""
"Troppi messaggi duplicati troppo velocemente; fai una pausa e scrivi di "
"nuovo tra qualche minuto."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Ti è proibito inviare messaggi su questo sito."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problema nel salvare la casella della posta del gruppo."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Errore del DB nell'inserire la risposta: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Non ti è possibile abbonarti."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Hai già l'abbonamento!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "L'utente non ti consente di seguirlo."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Non hai l'abbonamento!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Impossibile eliminare l'auto-abbonamento."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossibile eliminare l'abbonamento."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Impossibile eliminare l'abbonamento."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenuti su %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Impossibile creare il gruppo."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Impossibile impostare l'URI del gruppo."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Impossibile impostare la membership al gruppo."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Impossibile salvare le informazioni del gruppo locale."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Modifica le impostazioni del tuo profilo"
@@ -4548,124 +4717,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Pagina senza nome"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Esplorazione sito primaria"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Home"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personale e attività degli amici"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personale"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Modifica la tua email, immagine, password o il tuo profilo"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Connetti"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connettiti con altri servizi"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Connetti"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modifica la configurazione del sito"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invita"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Amministra"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invita amici e colleghi a seguirti su %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Esci"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invita"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Termina la tua sessione sul sito"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Esci"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crea un account"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrati"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Accedi al sito"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Aiuto"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Accedi"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Aiutami!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Cerca"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Aiuto"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cerca persone o del testo"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Cerca"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Messaggio del sito"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Viste locali"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Pagina messaggio"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Esplorazione secondaria del sito"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Aiuto"
+
+#: lib/action.php:754
msgid "About"
msgstr "Informazioni"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Sorgenti"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contatti"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licenza del software StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4674,12 +4907,12 @@ msgstr ""
"**%%site.name%%** è un servizio di microblog offerto da [%%site.broughtby%%]"
"(%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** è un servizio di microblog. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4690,98 +4923,152 @@ msgstr ""
"s, disponibile nei termini della licenza [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licenza del contenuto del sito"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "I contenuti e i dati di %1$s sono privati e confidenziali."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"I contenuti e i dati sono copyright di %1$s. Tutti i diritti riservati."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"I contenuti e i dati sono forniti dai collaboratori. Tutti i diritti "
"riservati."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Tutti "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licenza."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginazione"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Successivi"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Precedenti"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Impossibile gestire contenuti remoti."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Impossibile gestire contenuti XML incorporati."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Impossibile gestire contenuti Base64."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Non puoi apportare modifiche al sito."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Le modifiche al pannello non sono consentite."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() non implementata."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() non implementata."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossibile eliminare le impostazioni dell'aspetto."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configurazione di base"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configurazione aspetto"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Aspetto"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configurazione utente"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Utente"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configurazione di accesso"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configurazione percorsi"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configurazione sessioni"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Messaggio del sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configurazione percorsi"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"Le risorse API richiedono accesso lettura-scrittura, ma si dispone del solo "
"accesso in lettura."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4874,11 +5161,11 @@ msgstr "Messaggi in cui appare questo allegato"
msgid "Tags for this attachment"
msgstr "Etichette per questo allegato"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Modifica della password non riuscita"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "La modifica della password non è permessa"
@@ -5029,82 +5316,91 @@ msgstr "Errore nel salvare il messaggio."
msgid "Specify the name of the user to subscribe to"
msgstr "Specifica il nome dell'utente a cui abbonarti."
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Utente inesistente."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Abbonati a %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specifica il nome dell'utente da cui annullare l'abbonamento."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Abbonamento a %s annullato"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Comando non ancora implementato."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notifiche disattivate."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Impossibile disattivare le notifiche."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notifiche attivate."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Impossibile attivare le notifiche."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Il comando di accesso è disabilitato"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Questo collegamento è utilizzabile una sola volta ed è valido solo per 2 "
"minuti: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "%s ha annullato l'abbonamento"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Il tuo abbonamento è stato annullato."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Persona di cui hai già un abbonamento:"
msgstr[1] "Persone di cui hai già un abbonamento:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Nessuno è abbonato ai tuoi messaggi."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Questa persona è abbonata ai tuoi messaggi:"
msgstr[1] "Queste persone sono abbonate ai tuoi messaggi:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Non fai parte di alcun gruppo."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5118,6 +5414,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5156,6 +5453,7 @@ msgstr ""
"d <soprannome> <testo> - invia un messaggio diretto all'utente\n"
"get <soprannome> - recupera l'ultimo messaggio dell'utente\n"
"whois <soprannome> - recupera le informazioni del profilo dell'utente\n"
+"lose <soprannome> - forza un utente nel non seguirti più\n"
"fav <soprannome> - aggiunge l'ultimo messaggio dell'utente tra i tuoi "
"preferiti\n"
"fav #<ID_messaggio> - aggiunge un messaggio con quell'ID tra i tuoi "
@@ -5184,21 +5482,21 @@ msgstr ""
"tracks - non ancora implementato\n"
"tracking - non ancora implementato\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Non è stato trovato alcun file di configurazione. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "I file di configurazione sono stati cercati in questi posti: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
"Potrebbe essere necessario lanciare il programma d'installazione per "
"correggere il problema."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Vai al programma d'installazione."
@@ -5297,6 +5595,11 @@ msgstr "Scegli un'etichetta per ridurre l'elenco"
msgid "Go"
msgstr "Vai"
+#: lib/grantroleform.php:91
+#, php-format
+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 della pagina web, blog del gruppo o l'argomento"
@@ -5387,23 +5690,23 @@ msgstr "Errore di sistema nel caricare il file."
msgid "Not an image or corrupt file."
msgstr "Non è un'immagine o il file è danneggiato."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato file immagine non supportato."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Perso il nostro file."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tipo di file sconosciuto"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5693,7 +5996,7 @@ msgstr ""
"iniziare una conversazione con altri utenti. Altre persone possono mandare "
"messaggi riservati solamente a te."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "via"
@@ -5785,6 +6088,11 @@ msgstr "A"
msgid "Available characters"
msgstr "Caratteri disponibili"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Invia"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Invia un messaggio"
@@ -5818,48 +6126,48 @@ msgstr ""
"Il recupero della tua posizione geografica sta impiegando più tempo del "
"previsto. Riprova più tardi."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "O"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "presso"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in una discussione"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Ripetuto da"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Rispondi a questo messaggio"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Rispondi"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Messaggio ripetuto"
@@ -5891,10 +6199,6 @@ msgstr "Errore nell'inserire il profilo remoto"
msgid "Duplicate notice"
msgstr "Messaggio duplicato"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Non ti è possibile abbonarti."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Impossibile inserire un nuovo abbonamento."
@@ -5936,7 +6240,7 @@ msgstr "Etichette nei messaggi di %s"
msgid "Unknown"
msgstr "Sconosciuto"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abbonamenti"
@@ -5944,23 +6248,23 @@ msgstr "Abbonamenti"
msgid "All subscriptions"
msgstr "Tutti gli abbonamenti"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abbonati"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tutti gli abbonati"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID utente"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro dal"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tutti i gruppi"
@@ -6000,7 +6304,12 @@ msgstr "Ripetere questo messaggio?"
msgid "Repeat this notice"
msgstr "Ripeti questo messaggio"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Blocca l'utente da questo gruppo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Nessun utente singolo definito per la modalità single-user."
@@ -6020,6 +6329,10 @@ msgstr "Cerca nel sito"
msgid "Keyword(s)"
msgstr "Parole"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Cerca"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Aiuto sulla ricerca"
@@ -6071,33 +6384,14 @@ msgstr "Persone abbonate a %s"
msgid "Groups %s is a member of"
msgstr "Gruppi di cui %s fa parte"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Hai già l'abbonamento!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "L'utente non ti consente di seguirlo."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Impossibile abbonarsi."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Impossibile abbonare altri a te."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Non hai l'abbonamento!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Impossibile eliminare l'auto-abbonamento."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invita"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Impossibile eliminare l'abbonamento."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Invita amici e colleghi a seguirti su %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6149,67 +6443,84 @@ msgstr "Modifica immagine"
msgid "User actions"
msgstr "Azioni utente"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Modifica impostazioni del profilo"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Modifica"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Invia un messaggio diretto a questo utente"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Messaggio"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profilo utente"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Amministratori"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modera"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "circa un anno fa"
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index 3063f9538..def172250 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -11,75 +11,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:17+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:45+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "アクセス"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "サイトアクセス設定"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "登録"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "プライベート"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "匿åユーザー(ログインã—ã¦ã„ã¾ã›ã‚“)ãŒã‚µã‚¤ãƒˆã‚’見るã®ã‚’ç¦æ­¢ã—ã¾ã™ã‹?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "招待ã®ã¿"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "プライベート"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "招待ã®ã¿ç™»éŒ²ã™ã‚‹"
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "é–‰ã˜ã‚‰ã‚ŒãŸ"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "招待ã®ã¿"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "æ–°è¦ç™»éŒ²ã‚’無効。"
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "ä¿å­˜"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "é–‰ã˜ã‚‰ã‚ŒãŸ"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "アクセス設定ã®ä¿å­˜"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,52 +101,59 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s ã¨å‹äººã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s ã¨å‹äºº"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "%s ã®å‹äººã®ãƒ•ã‚£ãƒ¼ãƒ‰ (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "%s ã®å‹äººã®ãƒ•ã‚£ãƒ¼ãƒ‰ (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "%s ã®å‹äººã®ãƒ•ã‚£ãƒ¼ãƒ‰ (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "ã“れ㯠%s ã¨å‹äººã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã§ã™ã€‚ã¾ã èª°ã‚‚投稿ã—ã¦ã„ã¾ã›ã‚“。"
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -147,7 +162,8 @@ msgstr ""
"ã‚‚ã£ã¨å¤šãã®äººã‚’フォローã—ã¦ã¿ã¾ã—ょã†ã€‚[グループã«å‚加](%%action.groups%%) "
"ã—ã¦ã¿ãŸã‚Šã€ä½•ã‹æŠ•ç¨¿ã—ã¦ã¿ã¾ã—ょã†ã€‚"
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -156,7 +172,7 @@ msgstr ""
"プロフィールã‹ã‚‰ [%1$s ã•ã‚“ã«åˆå›³](../%2$s) ã—ãŸã‚Šã€[知らã›ãŸã„ã“ã¨ã«ã¤ã„ã¦æŠ•"
"稿](%%%%action.newnotice%%%%?status_textarea=%3$s) ã—ãŸã‚Šã§ãã¾ã™ã€‚"
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -165,12 +181,13 @@ msgstr ""
"[アカウントを登録](%%%%action.register%%%%) ã—㦠%s ã•ã‚“ã«åˆå›³ã—ãŸã‚Šã€ãŠçŸ¥ã‚‰"
"ã›ã‚’é€ã£ã¦ã¿ã¾ã›ã‚“ã‹ã€‚"
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "ã‚ãªãŸã¨å‹äºº"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
@@ -183,20 +200,20 @@ msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
@@ -230,8 +247,9 @@ msgstr "ユーザを更新ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "ユーザã¯ãƒ—ロフィールをもã£ã¦ã„ã¾ã›ã‚“。"
@@ -257,7 +275,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -368,7 +386,7 @@ msgstr "ソースユーザーを決定ã§ãã¾ã›ã‚“。"
msgid "Could not find target user."
msgstr "ターゲットユーザーを見ã¤ã‘られã¾ã›ã‚“。"
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -376,62 +394,62 @@ msgstr ""
"ニックãƒãƒ¼ãƒ ã«ã¯ã€å°æ–‡å­—アルファベットã¨æ•°å­—ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚スペースã¯ä½¿ç”¨"
"ã§ãã¾ã›ã‚“。"
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "ãã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚ä»–ã®ã‚‚ã®ã‚’試ã—ã¦ã¿ã¦ä¸‹ã•ã„。"
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "有効ãªãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "ホームページã®URLãŒä¸é©åˆ‡ã§ã™ã€‚"
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "フルãƒãƒ¼ãƒ ãŒé•·ã™ãŽã¾ã™ã€‚(255å­—ã¾ã§ï¼‰"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "記述ãŒé•·ã™ãŽã¾ã™ã€‚(最長140字)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "場所ãŒé•·ã™ãŽã¾ã™ã€‚(255å­—ã¾ã§ï¼‰"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "別åãŒå¤šã™ãŽã¾ã™! 最大 %d。"
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "ä¸æ­£ãªåˆ¥å: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "別å \"%s\" ã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚ä»–ã®ã‚‚ã®ã‚’試ã—ã¦ã¿ã¦ä¸‹ã•ã„。"
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "別åã¯ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã¨åŒã˜ã§ã¯ã„ã‘ã¾ã›ã‚“。"
@@ -442,15 +460,15 @@ msgstr "別åã¯ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã¨åŒã˜ã§ã¯ã„ã‘ã¾ã›ã‚“。"
msgid "Group not found!"
msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "ã™ã§ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "管ç†è€…ã«ã‚ˆã£ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "ユーザ %1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã§ãã¾ã›ã‚“。"
@@ -459,7 +477,7 @@ msgstr "ユーザ %1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã§ãã¾ã›ã‚“。"
msgid "You are not a member of this group."
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "ユーザ %1$s をグループ %2$s ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。"
@@ -490,7 +508,7 @@ msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã€‚"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -499,7 +517,7 @@ msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã€‚"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -533,7 +551,7 @@ msgstr "リクエストトークン%sã¯ã€æ‹’å¦ã•ã‚Œã¦ã€å–り消ã•ã‚Œã¾ã
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -556,13 +574,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "アカウント"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -638,23 +656,11 @@ msgstr "サãƒãƒ¼ãƒˆå¤–ã®å½¢å¼ã§ã™ã€‚"
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / %2$s ã‹ã‚‰ã®ãŠæ°—ã«å…¥ã‚Š"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s 㯠%2$s ã§ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°ã—ã¾ã—㟠/ %2$s。"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%1$s ã‹ã‚‰ %2$s 上ã®æ›´æ–°ã‚’ã—ã¾ã—ãŸ!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -680,17 +686,17 @@ msgstr "皆ã‹ã‚‰ã® %s アップデート!"
msgid "Repeated to %s"
msgstr "%s ã¸ã®è¿”ä¿¡"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "%s ã®è¿”ä¿¡"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ã"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s ã« %1$s ã«ã‚ˆã‚‹æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
@@ -706,8 +712,7 @@ msgstr "ãã®ã‚ˆã†ãªæ·»ä»˜ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "ニックãƒãƒ¼ãƒ ãŒã‚ã‚Šã¾ã›ã‚“。"
@@ -719,7 +724,7 @@ msgstr "サイズãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Invalid size."
msgstr "ä¸æ­£ãªã‚µã‚¤ã‚ºã€‚"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "ã‚¢ãƒã‚¿ãƒ¼"
@@ -736,30 +741,30 @@ msgid "User without matching profile"
msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„ユーザ"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "ã‚¢ãƒã‚¿ãƒ¼è¨­å®š"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "オリジナル"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "プレビュー"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "削除"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "アップロード"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "切りå–ã‚Š"
@@ -767,7 +772,7 @@ msgstr "切りå–ã‚Š"
msgid "Pick a square area of the image to be your avatar"
msgstr "ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã¨ãªã‚‹ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’正方形ã§æŒ‡å®š"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "ファイルデータを紛失ã—ã¾ã—ãŸã€‚"
@@ -803,22 +808,22 @@ msgstr ""
"ã©ã‚“㪠@-返信 ã«ã¤ã„ã¦ã‚‚ãれらã‹ã‚‰é€šçŸ¥ã•ã‚Œãªã„ã§ã—ょã†ã€‚"
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’アンブロックã™ã‚‹"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Yes"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã™ã‚‹"
@@ -826,39 +831,43 @@ msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã™ã‚‹"
msgid "Failed to save block information."
msgstr "ブロック情報ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "ãã®ã‚ˆã†ãªã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s ブロックã•ã‚ŒãŸãƒ—ロファイル"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s ブロックã•ã‚ŒãŸãƒ—ロファイルã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®å‚加をブロックã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ã®ãƒªã‚¹ãƒˆã€‚"
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "グループã‹ã‚‰ã®ã‚¢ãƒ³ãƒ–ロックユーザ"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "アンブロック"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’アンブロックã™ã‚‹"
@@ -914,7 +923,7 @@ msgid "Conversation"
msgstr "会話"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "ã¤ã¶ã‚„ã"
@@ -933,7 +942,7 @@ msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "ã‚ãªãŸã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã€‚"
@@ -959,12 +968,13 @@ msgstr "ã“ã®ã‚¢ãƒ—リケーションを削除ã—ãªã„ã§ãã ã•ã„"
msgid "Delete this application"
msgstr "ã“ã®ã‚¢ãƒ—リケーションを削除"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "ログインã—ã¦ã„ã¾ã›ã‚“。"
@@ -993,7 +1003,7 @@ msgstr "本当ã«ã“ã®ã¤ã¶ã‚„ãを削除ã—ã¾ã™ã‹ï¼Ÿ"
msgid "Do not delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除ã§ãã¾ã›ã‚“。"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除"
@@ -1009,7 +1019,7 @@ msgstr "ローカルユーザã®ã¿å‰Šé™¤ã§ãã¾ã™ã€‚"
msgid "Delete user"
msgstr "ユーザ削除"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1017,12 +1027,12 @@ msgstr ""
"ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ãŸã„ã§ã™ã‹? ã“ã‚Œã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãªã—ã§ãƒ‡ãƒ¼ã‚¿"
"ベースã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ã«é–¢ã™ã‚‹ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’クリアã—ã¾ã™ã€‚"
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "デザイン"
@@ -1125,6 +1135,18 @@ msgstr "デフォルトデザインã«æˆ»ã™ã€‚"
msgid "Reset back to default"
msgstr "デフォルトã¸ãƒªã‚»ãƒƒãƒˆã™ã‚‹"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "ä¿å­˜"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "デザインã®ä¿å­˜"
@@ -1216,29 +1238,29 @@ msgstr "%s グループを編集"
msgid "You must be logged in to create a group."
msgstr "グループを作るã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "グループを編集ã™ã‚‹ã«ã¯ç®¡ç†è€…ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã‚°ãƒ«ãƒ¼ãƒ—を編集ã—ã¾ã™ã€‚"
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "記述ãŒé•·ã™ãŽã¾ã™ã€‚(最長 %d 字)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "グループを更新ã§ãã¾ã›ã‚“。"
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "別åを作æˆã§ãã¾ã›ã‚“。"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "オプションãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
@@ -1359,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’æ­£è¦åŒ–ã§ãã¾ã›ã‚“"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -1553,6 +1575,25 @@ msgstr "ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "Cannot read file."
msgstr "ファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“。"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã€‚"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã®ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ãƒ¦ãƒ¼ã‚¶ãŒã§ãã¾ã›ã‚“。"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "ユーザã¯æ—¢ã«é»™ã£ã¦ã„ã¾ã™ã€‚"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1582,7 +1623,7 @@ msgstr "ユーザã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚
msgid "User is not a member of group."
msgstr "ユーザã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "グループã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
@@ -1616,11 +1657,11 @@ msgstr "ID ãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "You must be logged in to edit a group."
msgstr "グループを編集ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "グループデザイン"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1628,20 +1669,20 @@ msgstr ""
"ã‚ãªãŸãŒé¸ã‚“ã ãƒ‘レットã®è‰²ã¨ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚¤ãƒ¡ãƒ¼ã‚¸ã§ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—をカス"
"タマイズã—ã¦ãã ã•ã„。"
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "ã‚ãªãŸã®ãƒ‡ã‚¶ã‚¤ãƒ³ã‚’æ›´æ–°ã§ãã¾ã›ã‚“。"
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "デザイン設定ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "グループロゴ"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1649,62 +1690,68 @@ msgstr ""
"ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—用ã«ãƒ­ã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’アップロードã§ãã¾ã™ã€‚最大ファイルサイズ㯠"
"%s。"
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„ユーザ"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "ロゴã¨ãªã‚‹ã‚¤ãƒ¡ãƒ¼ã‚¸ã®æ­£æ–¹å½¢ã‚’é¸æŠžã€‚"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "ロゴãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "ロゴã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s グループメンãƒãƒ¼"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s グループメンãƒãƒ¼ã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¦ãƒ¼ã‚¶ã®ãƒªã‚¹ãƒˆã€‚"
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "管ç†è€…"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "ブロック"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "ユーザをグループã®ç®¡ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "管ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’管ç†è€…ã«ã™ã‚‹"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$s 上㮠%1$s ã®ãƒ¡ãƒ³ãƒãƒ¼ã‹ã‚‰æ›´æ–°ã™ã‚‹"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "グループ"
@@ -1962,16 +2009,19 @@ msgstr "パーソナルメッセージ"
msgid "Optionally add a personal message to the invitation."
msgstr "ä»»æ„ã«æ‹›å¾…ã«ãƒ‘ーソナルメッセージを加ãˆã¦ãã ã•ã„。"
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "投稿"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s ãŒã‚ãªãŸã‚’ %2$s ã¸æ‹›å¾…ã—ã¾ã—ãŸ"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2032,7 +2082,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "グループã«å…¥ã‚‹ãŸã‚ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "ニックãƒãƒ¼ãƒ ãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã—ã¾ã—ãŸ"
@@ -2041,11 +2096,11 @@ msgstr "%1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã—ã¾ã—ãŸ"
msgid "You must be logged in to leave a group."
msgstr "グループã‹ã‚‰é›¢ã‚Œã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "ã‚ãªãŸã¯ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«æ®‹ã‚Šã¾ã—ãŸã€‚"
@@ -2062,8 +2117,7 @@ msgstr "ユーザåã¾ãŸã¯ãƒ‘スワードãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚"
msgid "Error setting user. You are probably not authorized."
msgstr "ユーザ設定エラー。 ã‚ãªãŸã¯ãŸã¶ã‚“承èªã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ログイン"
@@ -2316,8 +2370,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr "ã ã‘ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„データ形å¼ã€‚"
@@ -2458,7 +2512,8 @@ msgstr "æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“。"
msgid "Password saved."
msgstr "パスワードãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "パス"
@@ -2491,7 +2546,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "ä¸æ­£ãª SSL サーãƒãƒ¼ã€‚最大 255 文字ã¾ã§ã€‚"
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "サイト"
@@ -2579,7 +2633,7 @@ msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2634,11 +2688,11 @@ msgstr "æ­£ã—ã„ã‚¿ã‚°ã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "ユーザ自身ãŒã¤ã‘ãŸã‚¿ã‚° %1$s - ページ %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "ä¸æ­£ãªã¤ã¶ã‚„ã内容"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2664,7 +2718,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64文字ã®ã€å°æ–‡å­—アルファベットã‹æ•°å­—ã§ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„å¥èª­ç‚¹ã¯é™¤ã"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "フルãƒãƒ¼ãƒ "
@@ -2692,7 +2746,7 @@ msgid "Bio"
msgstr "自己紹介"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2719,7 +2773,7 @@ msgstr ""
"自分自身ã«ã¤ã„ã¦ã®ã‚¿ã‚° (アルファベットã€æ•°å­—ã€-ã€.ã€_)ã€ã‚«ãƒ³ãƒžã¾ãŸã¯ç©ºç™½åŒºåˆ‡"
"ã‚Šã§"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "言語"
@@ -2745,7 +2799,7 @@ msgstr "自分をフォローã—ã¦ã„る者を自動的ã«ãƒ•ã‚©ãƒ­ãƒ¼ã™ã‚‹ (B
msgid "Bio is too long (max %d chars)."
msgstr "自己紹介ãŒé•·ã™ãŽã¾ã™ (最長140文字)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "タイムゾーンãŒé¸ã°ã‚Œã¦ã„ã¾ã›ã‚“。"
@@ -2758,23 +2812,24 @@ msgstr "言語ãŒé•·ã™ãŽã¾ã™ã€‚(最大50å­—)"
msgid "Invalid tag: \"%s\""
msgstr "ä¸æ­£ãªã‚¿ã‚°: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "自動フォローã®ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ã‚’æ›´æ–°ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "場所情報をä¿å­˜ã§ãã¾ã›ã‚“。"
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "プロファイルをä¿å­˜ã§ãã¾ã›ã‚“"
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "ã‚¿ã‚°ã‚’ä¿å­˜ã§ãã¾ã›ã‚“。"
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "設定ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
@@ -2787,28 +2842,28 @@ msgstr "ページ制é™ã‚’超ãˆã¾ã—㟠(%s)"
msgid "Could not retrieve public stream."
msgstr "パブリックストリームを検索ã§ãã¾ã›ã‚“。"
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "パブリックタイムラインã€ãƒšãƒ¼ã‚¸ %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "パブリックタイムライン"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "パブリックストリームフィード (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "パブリックストリームフィード (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "パブリックストリームフィード (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2817,11 +2872,11 @@ msgstr ""
"ã“れ㯠%%site.name%% ã®ãƒ‘ブリックタイムラインã§ã™ã€ã—ã‹ã—ã¾ã èª°ã‚‚投稿ã—ã¦ã„ã¾"
"ã›ã‚“。"
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "投稿ã™ã‚‹1番目ã«ãªã£ã¦ãã ã•ã„!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2829,7 +2884,7 @@ msgstr ""
"ãªãœ [アカウント登録](%%action.register%%) ã—ãªã„ã®ã§ã™ã‹ã€ãã—ã¦æœ€åˆã®æŠ•ç¨¿ã‚’"
"ã—ã¦ãã ã•ã„!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2843,7 +2898,7 @@ msgstr ""
"æ—ãã—ã¦åŒåƒšãªã©ã«ã¤ã„ã¦ã®ã¤ã¶ã‚„ãを共有ã—ã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%doc.help%"
"%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3020,8 +3075,7 @@ msgstr "ã™ã¿ã¾ã›ã‚“ã€ä¸æ­£ãªæ‹›å¾…コード。"
msgid "Registration successful"
msgstr "登録æˆåŠŸ"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "登録"
@@ -3063,7 +3117,7 @@ msgid "Same as password above. Required."
msgstr "上ã®ãƒ‘スワードã¨åŒã˜ã§ã™ã€‚ 必須。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "メール"
@@ -3167,7 +3221,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "プロファイルサービスã¾ãŸã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ロギングサービスã®URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "フォロー"
@@ -3206,7 +3260,7 @@ msgstr "自分ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã›ã¾ã›ã‚“。"
msgid "You already repeated that notice."
msgstr "ã™ã§ã«ãã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¦ã„ã¾ã™ã€‚"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "ç¹°ã‚Šè¿”ã•ã‚ŒãŸ"
@@ -3214,33 +3268,33 @@ msgstr "ç¹°ã‚Šè¿”ã•ã‚ŒãŸ"
msgid "Repeated!"
msgstr "ç¹°ã‚Šè¿”ã•ã‚Œã¾ã—ãŸ!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "%s ã¸ã®è¿”ä¿¡"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "%1$s ã¸ã®è¿”ä¿¡ã€ãƒšãƒ¼ã‚¸ %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "%s ã®è¿”信フィード (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "%s ã®è¿”信フィード (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "%s ã®è¿”信フィード (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3249,7 +3303,7 @@ msgstr ""
"ã“れ㯠%1$s ã¸ã®è¿”信を表示ã—ãŸã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã§ã™ã€ã—ã‹ã— %2$s ã¯ã¾ã ã¤ã¶ã‚„ãã‚’"
"å—ã‘å–ã£ã¦ã„ã¾ã›ã‚“。"
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3258,7 +3312,7 @@ msgstr ""
"ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ã‚’会話をã™ã‚‹ã‹ã€å¤šãã®äººã€…をフォローã™ã‚‹ã‹ã€ã¾ãŸã¯ [ã‚°"
"ループã«åŠ ã‚ã‚‹](%%action.groups%%)ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3272,6 +3326,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%2$s 上㮠%1$s ã¸ã®è¿”ä¿¡!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ãƒ¦ãƒ¼ã‚¶ã‚’黙らã›ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„ユーザ"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3284,8 +3348,9 @@ msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã®ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ãƒ¦ãƒ¼ã‚¶ãŒã§ãã¾
msgid "User is already sandboxed."
msgstr "ユーザã¯ã™ã§ã«ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "セッション"
@@ -3309,8 +3374,8 @@ msgstr "セッションデãƒãƒƒã‚°"
msgid "Turn on debugging output for sessions."
msgstr "セッションã®ãŸã‚ã®ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã‚’オン。"
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "サイト設定ã®ä¿å­˜"
@@ -3340,8 +3405,8 @@ msgstr "組織"
msgid "Description"
msgstr "概è¦"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "統計データ"
@@ -3404,22 +3469,22 @@ msgstr "%1$s ã®ãŠæ°—ã«å…¥ã‚Šã®ã¤ã¶ã‚„ãã€ãƒšãƒ¼ã‚¸ %2$d"
msgid "Could not retrieve favorite notices."
msgstr "ãŠæ°—ã«å…¥ã‚Šã®ã¤ã¶ã‚„ãを検索ã§ãã¾ã›ã‚“。"
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "%s ã®ãŠæ°—ã«å…¥ã‚Šã®ãƒ•ã‚£ãƒ¼ãƒ‰ (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "%s ã®ãŠæ°—ã«å…¥ã‚Šã®ãƒ•ã‚£ãƒ¼ãƒ‰ (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "%s ã®ãŠæ°—ã«å…¥ã‚Šã®ãƒ•ã‚£ãƒ¼ãƒ‰ (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3428,7 +3493,7 @@ msgstr ""
"加ã™ã‚‹ã‚ãªãŸãŒãれらãŒãŠæ°—ã«å…¥ã‚Šã®ã¤ã¶ã‚„ãã®ã¨ãã«ãŠæ°—ã«å…¥ã‚Šãƒœã‚¿ãƒ³ã‚’クリック"
"ã™ã‚‹ã‹ã€ã¾ãŸã¯ãれらã®ä¸Šã§ã‚¹ãƒãƒƒãƒˆãƒ©ã‚¤ãƒˆã‚’ã¯ã˜ã„ã¦ãã ã•ã„。"
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3437,7 +3502,7 @@ msgstr ""
"%s ã¯ã¾ã å½¼ã®ãŠæ°—ã«å…¥ã‚Šã«å°‘ã—ã®ã¤ã¶ã‚„ãも加ãˆã¦ã„ã¾ã›ã‚“。 彼らãŒãŠæ°—ã«å…¥ã‚Šã«"
"加ãˆã‚‹ã“ã¨ãŠã‚‚ã—ã‚ã„ã‚‚ã®ã‚’投稿ã—ã¦ãã ã•ã„:)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3448,7 +3513,7 @@ msgstr ""
"%%%action.register%%%%) ã—ãªã„ã®ã§ã™ã‹ã€‚ãã—ã¦ã€å½¼ã‚‰ãŒãŠæ°—ã«å…¥ã‚Šã«åŠ ãˆã‚‹ãŠã‚‚"
"ã—ã‚ã„何ã‹ã‚’投稿ã—ã¾ã›ã‚“ã‹:)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "ã“ã‚Œã¯ã€ã‚ãªãŸãŒå¥½ããªã“ã¨ã‚’共有ã™ã‚‹æ–¹æ³•ã§ã™ã€‚"
@@ -3462,67 +3527,67 @@ msgstr "%s グループ"
msgid "%1$s group, page %2$d"
msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "グループプロファイル"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "ノート"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "別å"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "グループアクション"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s グループ㮠FOAF"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "メンãƒãƒ¼"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(ãªã—)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "å…¨ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "作æˆæ—¥"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3537,7 +3602,7 @@ msgstr ""
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚[今ã™ãå‚加](%%%%action.register%%%%) ã—ã¦ã“"
"ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€å“¡ã«ãªã‚Šã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3550,7 +3615,7 @@ msgstr ""
"wikipedia.org/wiki/Micro-blogging) サービス。メンãƒãƒ¼ã¯å½¼ã‚‰ã®æš®ã‚‰ã—ã¨èˆˆå‘³ã«é–¢"
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "管ç†è€…"
@@ -3672,151 +3737,142 @@ msgid "User is already silenced."
msgstr "ユーザã¯æ—¢ã«é»™ã£ã¦ã„ã¾ã™ã€‚"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "ã“ã® StatusNet サイトã®åŸºæœ¬è¨­å®šã€‚"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "サイトåã¯é•·ã•0ã§ã¯ã„ã‘ã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "有効ãªé€£çµ¡ç”¨ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "ä¸æ˜Žãªè¨€èªž \"%s\""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットレãƒãƒ¼ãƒˆURL。"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットランãƒãƒªãƒ¥ãƒ¼"
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "スナップショット頻度ã¯æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "最å°ã®ãƒ†ã‚­ã‚¹ãƒˆåˆ¶é™ã¯140å­—ã§ã™ã€‚"
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "デュープ制é™ã¯1秒以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "一般"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "サイトå"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "ã‚ãªãŸã®ã‚µã‚¤ãƒˆã®åå‰ã€\"Yourcompany Microblog\"ã®ã‚ˆã†ãªã€‚"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "æŒã£ã¦æ¥ã‚‰ã‚Œã¾ã™"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"クレジットã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ†ã‚­ã‚¹ãƒˆã¯ã€ãã‚Œãžã‚Œã®ãƒšãƒ¼ã‚¸ã®ãƒ•ãƒƒã‚¿ãƒ¼ã§ãƒªãƒ³ã‚¯ã•ã‚Œã¾"
"ã™ã€‚"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URLã§ã€æŒã£ã¦æ¥ã‚‰ã‚Œã¾ã™"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"クレジットã«ä½¿ç”¨ã•ã‚Œã‚‹URLã¯ã€ãã‚Œãžã‚Œã®ãƒšãƒ¼ã‚¸ã®ãƒ•ãƒƒã‚¿ãƒ¼ã§ãƒªãƒ³ã‚¯ã•ã‚Œã¾ã™ã€‚"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "ã‚ãªãŸã®ã‚µã‚¤ãƒˆã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã™ã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "ローカル"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "デフォルトタイムゾーン"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "サイトã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³; 通常UTC。"
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "デフォルトサイト言語"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "スナップショット"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "予定ã•ã‚Œã¦ã„るジョブã§"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "データスナップショット"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "ã„㤠status.net サーãƒã«çµ±è¨ˆãƒ‡ãƒ¼ã‚¿ã‚’é€ã‚Šã¾ã™ã‹"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "頻度"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "レãƒãƒ¼ãƒˆ URL"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "レãƒãƒ¼ãƒˆ URL"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "ã“ã®URLã«ã‚¹ãƒŠãƒƒãƒ—ショットをé€ã‚‹ã§ã—ょã†"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "制é™"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "テキスト制é™"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "ã¤ã¶ã‚„ãã®æ–‡å­—ã®æœ€å¤§æ•°"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "デュープ制é™"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"ã©ã‚Œãらã„é•·ã„é–“(秒)ã€ãƒ¦ãƒ¼ã‚¶ã¯ã€å†ã³åŒã˜ã‚‚ã®ã‚’投稿ã™ã‚‹ã®ã‚’å¾…ãŸãªã‘ã‚Œã°ãªã‚‰ãª"
"ã„ã‹ã€‚"
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "サイトã¤ã¶ã‚„ã"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "æ–°ã—ã„メッセージ"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "ã‚ãªãŸã®ãƒ‡ã‚¶ã‚¤ãƒ³è¨­å®šã‚’ä¿å­˜ã§ãã¾ã›ã‚“。"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "サイトã¤ã¶ã‚„ã"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "サイトã¤ã¶ã‚„ã"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS 設定"
@@ -3917,19 +3973,90 @@ msgstr ""
msgid "No code entered"
msgstr "コードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "スナップショット"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "サイト設定ã®å¤‰æ›´"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットランãƒãƒªãƒ¥ãƒ¼"
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "スナップショット頻度ã¯æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットレãƒãƒ¼ãƒˆURL。"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "予定ã•ã‚Œã¦ã„るジョブã§"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "データスナップショット"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "ã„㤠status.net サーãƒã«çµ±è¨ˆãƒ‡ãƒ¼ã‚¿ã‚’é€ã‚Šã¾ã™ã‹"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "頻度"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "レãƒãƒ¼ãƒˆ URL"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "レãƒãƒ¼ãƒˆ URL"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "ã“ã®URLã«ã‚¹ãƒŠãƒƒãƒ—ショットをé€ã‚‹ã§ã—ょã†"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "サイト設定ã®ä¿å­˜"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "ã‚ãªãŸã¯ãã®ãƒ—ロファイルã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "フォローをä¿å­˜ã§ãã¾ã›ã‚“。"
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "ローカルユーザã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "ã‚ãªãŸã¯ãã®ãƒ—ロファイルã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "フォローã—ã¦ã„ã‚‹"
@@ -3993,7 +4120,7 @@ msgstr "ã‚ãªãŸãŒã¤ã¶ã‚„ãã‚’èžã„ã¦ã„る人"
msgid "These are the people whose notices %s listens to."
msgstr "%s ãŒã¤ã¶ã‚„ãã‚’èžã„ã¦ã„る人"
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4009,35 +4136,35 @@ msgstr ""
"twittersettings%%)ã§ã‚ã‚Œã°ã€ã‚ãªãŸã¯è‡ªå‹•çš„ã«æ—¢ã«ãƒ•ã‚©ãƒ­ãƒ¼ã—ã¦ã„る人々をフォ"
"ローã§ãã¾ã™ã€‚"
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s ã¯ã ã‚Œã‚‚言ã†ã“ã¨ã‚’èžã„ã¦ã„ã¾ã›ã‚“。"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "%1$s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ãã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ãフィード (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ãフィード (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ãフィード (Atom)"
@@ -4090,7 +4217,7 @@ msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使用ã—ã¦ã€ãƒ•ã‚©ãƒ­ãƒ¼è€…ã‹ãƒ•ã‚©ãƒ­ãƒ¼ã«ã‚¿
msgid "No such tag."
msgstr "ãã®ã‚ˆã†ãªã‚¿ã‚°ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API メソッドãŒå·¥äº‹ä¸­ã§ã™ã€‚"
@@ -4114,7 +4241,7 @@ msgstr "リクエスト内ã«ãƒ—ロファイルIDãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Unsubscribed"
msgstr "フォロー解除済ã¿"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4122,70 +4249,72 @@ msgstr ""
"リスニーストリームライセンス ‘%1$s’ ã¯ã€ã‚µã‚¤ãƒˆãƒ©ã‚¤ã‚»ãƒ³ã‚¹ ‘%2$s’ ã¨äº’æ›æ€§ãŒã‚"
"ã‚Šã¾ã›ã‚“。"
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "ユーザ"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "ã“ã® StatusNet サイトã®ãƒ¦ãƒ¼ã‚¶è¨­å®šã€‚"
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "ä¸æ­£ãªè‡ªå·±ç´¹ä»‹åˆ¶é™ã€‚æ•°å­—ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "ä¸æ­£ãªã‚¦ã‚§ãƒ«ã‚«ãƒ ãƒ†ã‚­ã‚¹ãƒˆã€‚最大長ã¯255å­—ã§ã™ã€‚"
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "ä¸æ­£ãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ•ã‚©ãƒ­ãƒ¼ã§ã™: '%1$s' ã¯ãƒ¦ãƒ¼ã‚¶ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "プロファイル"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "自己紹介制é™"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "プロファイル自己紹介ã®æœ€å¤§æ–‡å­—長。"
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "æ–°ã—ã„ユーザ"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "æ–°ã—ã„ユーザを歓迎"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "æ–°ã—ã„ユーザã¸ã®ã‚¦ã‚§ãƒ«ã‚«ãƒ ãƒ†ã‚­ã‚¹ãƒˆ (最大255å­—)。"
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "デフォルトフォロー"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "自動的ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã«æ–°ã—ã„ユーザをフォローã—ã¦ãã ã•ã„。"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "招待"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "招待ãŒå¯èƒ½"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "ユーザãŒæ–°ã—ã„ユーザを招待ã™ã‚‹ã®ã‚’許容ã™ã‚‹ã‹ã©ã†ã‹ã€‚"
@@ -4316,16 +4445,22 @@ msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d"
msgid "Search for more groups"
msgstr "ã‚‚ã£ã¨ã‚°ãƒ«ãƒ¼ãƒ—を検索"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s ã¯ã©ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "[グループを探ã—ã¦](%%action.groupsearch%%)ãã‚Œã«åŠ å…¥ã—ã¦ãã ã•ã„。"
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%1$s ã‹ã‚‰ %2$s 上ã®æ›´æ–°ã‚’ã—ã¾ã—ãŸ!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4371,7 +4506,7 @@ msgstr ""
msgid "Plugins"
msgstr "プラグイン"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
@@ -4413,6 +4548,11 @@ msgstr "グループã®ä¸€éƒ¨ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "Group leave failed."
msgstr "グループ脱退ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "グループを更新ã§ãã¾ã›ã‚“。"
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4430,26 +4570,26 @@ msgstr "メッセージを追加ã§ãã¾ã›ã‚“。"
msgid "Could not update message with new URI."
msgstr "æ–°ã—ã„URIã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’アップデートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°è¿½åŠ  DB エラー: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚é•·ã™ãŽã§ã™ã€‚"
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ã§ã™ã€‚"
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"多ã™ãŽã‚‹ã¤ã¶ã‚„ããŒé€Ÿã™ãŽã¾ã™; 数分間ã®ä¼‘ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†æŠ•ç¨¿ã—ã¦ãã ã•ã„。"
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4457,41 +4597,75 @@ msgstr ""
"多ã™ãŽã‚‹é‡è¤‡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé€Ÿã™ãŽã¾ã™; 数分間休ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†åº¦æŠ•ç¨¿ã—ã¦ãã ã•"
"ã„。"
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã®ãŒç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "グループå—信箱をä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "返信を追加ã™ã‚‹éš›ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¨ãƒ©ãƒ¼ : %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "ã‚ãªãŸã¯ãƒ•ã‚©ãƒ­ãƒ¼ãŒç¦æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "ã™ã§ã«ãƒ•ã‚©ãƒ­ãƒ¼ã—ã¦ã„ã¾ã™!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "ユーザã¯ã‚ãªãŸã‚’ブロックã—ã¾ã—ãŸã€‚"
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "フォローã—ã¦ã„ã¾ã›ã‚“ï¼"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "自己フォローを削除ã§ãã¾ã›ã‚“。"
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "フォローを削除ã§ãã¾ã›ã‚“"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "フォローを削除ã§ãã¾ã›ã‚“"
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "よã†ã“ã %1$sã€@%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "グループを作æˆã§ãã¾ã›ã‚“。"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。"
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "フォローをä¿å­˜ã§ãã¾ã›ã‚“。"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "プロファイル設定ã®å¤‰æ›´"
@@ -4529,124 +4703,188 @@ msgstr ""
msgid "Untitled page"
msgstr "å称未設定ページ"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "プライマリサイトナビゲーション"
-#: lib/action.php:439
-msgid "Home"
-msgstr "ホーム"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "パーソナルプロファイルã¨å‹äººã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "パーソナル"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "メールアドレスã€ã‚¢ãƒã‚¿ãƒ¼ã€ãƒ‘スワードã€ãƒ—ロパティã®å¤‰æ›´"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "接続"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "サービスã¸æŽ¥ç¶š"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "接続"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "サイト設定ã®å¤‰æ›´"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "招待"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "管ç†è€…"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "å‹äººã‚„åŒåƒšãŒ %s ã§åŠ ã‚るよã†èª˜ã£ã¦ãã ã•ã„。"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "ログアウト"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "招待"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "サイトã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "ログアウト"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "アカウントを作æˆ"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "登録"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "サイトã¸ãƒ­ã‚°ã‚¤ãƒ³"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "ヘルプ"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ログイン"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "助ã‘ã¦ï¼"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "検索"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "ヘルプ"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "人々ã‹ãƒ†ã‚­ã‚¹ãƒˆã‚’検索"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "検索"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "サイトã¤ã¶ã‚„ã"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "ローカルビュー"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "ページã¤ã¶ã‚„ã"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "セカンダリサイトナビゲーション"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "ヘルプ"
+
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "よãã‚る質å•"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "プライãƒã‚·ãƒ¼"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "ソース"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "連絡先"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "ãƒãƒƒã‚¸"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet ソフトウェアライセンス"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4655,12 +4893,12 @@ msgstr ""
"**%%site.name%%** 㯠[%%site.broughtby%%](%%site.broughtbyurl%%) ãŒæä¾›ã™ã‚‹ãƒž"
"イクロブログサービスã§ã™ã€‚ "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ログサービスã§ã™ã€‚ "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4671,95 +4909,149 @@ msgstr ""
"ã„ã¦ã„ã¾ã™ã€‚ ライセンス [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)。"
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "サイト内容ライセンス"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "全㦠"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "ライセンス。"
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "ページ化"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "<<後"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "å‰>>"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã¸ã®å¤‰æ›´ã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã›ã‚“。"
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "ãã®ãƒ‘ãƒãƒ«ã¸ã®å¤‰æ›´ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "デザイン設定を削除ã§ãã¾ã›ã‚“。"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "基本サイト設定"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "サイト"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "デザイン設定"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "デザイン"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "ユーザ設定"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "ユーザ"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "アクセス設定"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "パス設定"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "セッション設定"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "サイトã¤ã¶ã‚„ã"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "パス設定"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"APIリソースã¯èª­ã¿æ›¸ãアクセスãŒå¿…è¦ã§ã™ã€ã—ã‹ã—ã‚ãªãŸã¯èª­ã¿ã‚¢ã‚¯ã‚»ã‚¹ã—ã‹æŒã£ã¦"
"ã„ã¾ã›ã‚“。"
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4851,11 +5143,11 @@ msgstr "ã“ã®æ·»ä»˜ãŒç¾ã‚Œã‚‹ã¤ã¶ã‚„ã"
msgid "Tags for this attachment"
msgstr "ã“ã®æ·»ä»˜ã®ã‚¿ã‚°"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "パスワード変更ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "パスワード変更ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
@@ -5006,77 +5298,87 @@ msgstr "ã¤ã¶ã‚„ãä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚"
msgid "Specify the name of the user to subscribe to"
msgstr "フォローã™ã‚‹ãƒ¦ãƒ¼ã‚¶ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "%s をフォローã—ã¾ã—ãŸ"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "フォローをやã‚るユーザã®åå‰ã‚’指定ã—ã¦ãã ã•ã„"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "コマンドã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "通知オフ。"
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "通知をオフã§ãã¾ã›ã‚“。"
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "通知オン。"
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "通知をオンã§ãã¾ã›ã‚“。"
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "ログインコマンドãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "ã“ã®ãƒªãƒ³ã‚¯ã¯ã€ã‹ã¤ã¦ã ã‘使用å¯èƒ½ã§ã‚ã‚Šã€2分間ã ã‘良ã„ã§ã™: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "ã‚ãªãŸã¯ã ã‚Œã«ã‚‚フォローã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ã‚ãªãŸã¯ã“ã®äººã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã™:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "誰もフォローã—ã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "ã“ã®äººã¯ã‚ãªãŸã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã‚‹:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "ã‚ãªãŸã¯ã©ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ã‚ãªãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5090,6 +5392,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5117,21 +5420,21 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "コンフィギュレーションファイルãŒã‚ã‚Šã¾ã›ã‚“。 "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "ç§ã¯ä»¥ä¸‹ã®å ´æ‰€ã§ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã—ã¾ã—ãŸ: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
"ã‚ãªãŸã¯ã€ã“れを修ç†ã™ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’å‹•ã‹ã—ãŸãŒã£ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›"
"ん。"
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "インストーラã¸ã€‚"
@@ -5230,6 +5533,11 @@ msgstr "ã‚¿ã‚°ã‚’é¸ã‚“ã§ã€ãƒªã‚¹ãƒˆã‚’ç‹­ãã—ã¦ãã ã•ã„"
msgid "Go"
msgstr "移動"
+#: lib/grantroleform.php:91
+#, php-format
+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"
@@ -5319,23 +5627,23 @@ msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロードã§ã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼"
msgid "Not an image or corrupt file."
msgstr "ç”»åƒã§ã¯ãªã„ã‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã¾ã™ã€‚"
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "サãƒãƒ¼ãƒˆå¤–ã®ç”»åƒå½¢å¼ã§ã™ã€‚"
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "ファイルを紛失。"
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5624,7 +5932,7 @@ msgstr ""
"ã«å¼•ã込むプライベートメッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚人々ã¯ã‚ãªãŸã ã‘ã¸ã®"
"メッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "from"
@@ -5719,6 +6027,12 @@ msgstr "To"
msgid "Available characters"
msgstr "利用å¯èƒ½ãªæ–‡å­—"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "投稿"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "ã¤ã¶ã‚„ãã‚’é€ã‚‹"
@@ -5752,52 +6066,52 @@ msgstr ""
"ã™ã¿ã¾ã›ã‚“ã€ã‚ãªãŸã®ä½ç½®ã‚’検索ã™ã‚‹ã®ãŒäºˆæƒ³ã‚ˆã‚Šé•·ãã‹ã‹ã£ã¦ã„ã¾ã™ã€å¾Œã§ã‚‚ã†ä¸€"
"度試ã¿ã¦ãã ã•ã„"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "北"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "S"
msgstr "å—"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
#, fuzzy
msgid "E"
msgstr "æ±"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
#, fuzzy
msgid "W"
msgstr "西"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "at"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãã¸è¿”ä¿¡"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "返信"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ãŸ"
@@ -5829,10 +6143,6 @@ msgstr "リモートプロファイル追加エラー"
msgid "Duplicate notice"
msgstr "é‡è¤‡ã—ãŸã¤ã¶ã‚„ã"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "ã‚ãªãŸã¯ãƒ•ã‚©ãƒ­ãƒ¼ãŒç¦æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "サブスクリプションを追加ã§ãã¾ã›ã‚“"
@@ -5874,7 +6184,7 @@ msgstr "%s ã®ã¤ã¶ã‚„ãã®ã‚¿ã‚°"
msgid "Unknown"
msgstr "ä¸æ˜Ž"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "フォロー"
@@ -5882,23 +6192,23 @@ msgstr "フォロー"
msgid "All subscriptions"
msgstr "ã™ã¹ã¦ã®ãƒ•ã‚©ãƒ­ãƒ¼"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "フォローã•ã‚Œã¦ã„ã‚‹"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "ã™ã¹ã¦ã®ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã‚‹"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ユーザID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "利用開始日"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "å…¨ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—"
@@ -5938,7 +6248,12 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã‹?"
msgid "Repeat this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "single-user モードã®ãŸã‚ã®ã‚·ãƒ³ã‚°ãƒ«ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
@@ -5958,6 +6273,10 @@ msgstr "サイト検索"
msgid "Keyword(s)"
msgstr "キーワード"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "検索"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ヘルプ検索"
@@ -6009,33 +6328,14 @@ msgstr "人々㯠%s をフォローã—ã¾ã—ãŸã€‚"
msgid "Groups %s is a member of"
msgstr "グループ %s ã¯ãƒ¡ãƒ³ãƒãƒ¼"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "ã™ã§ã«ãƒ•ã‚©ãƒ­ãƒ¼ã—ã¦ã„ã¾ã™!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "ユーザã¯ã‚ãªãŸã‚’ブロックã—ã¾ã—ãŸã€‚"
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "フォローã§ãã¾ã›ã‚“。"
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "ä»–ã®äººãŒã‚ãªãŸã‚’フォローã§ãã¾ã›ã‚“。"
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "フォローã—ã¦ã„ã¾ã›ã‚“ï¼"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "自己フォローを削除ã§ãã¾ã›ã‚“。"
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "招待"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "フォローを削除ã§ãã¾ã›ã‚“"
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "å‹äººã‚„åŒåƒšãŒ %s ã§åŠ ã‚るよã†èª˜ã£ã¦ãã ã•ã„。"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6087,68 +6387,85 @@ msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’編集ã™ã‚‹"
msgid "User actions"
msgstr "利用者アクション"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "プロファイル設定編集"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "編集"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "ã“ã®åˆ©ç”¨è€…ã«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "メッセージ"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
#, fuzzy
msgid "Moderate"
msgstr "管ç†"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ユーザプロファイル"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "管ç†è€…"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "管ç†"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "数秒å‰"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ç´„ 1 分å‰"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "ç´„ %d 分å‰"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ç´„ 1 時間å‰"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "ç´„ %d 時間å‰"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ç´„ 1 æ—¥å‰"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "ç´„ %d æ—¥å‰"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ç´„ 1 ヵ月å‰"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "ç´„ %d ヵ月å‰"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ç´„ 1 å¹´å‰"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index 7be2acfca..fa8b67239 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,83 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:20+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:48+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "수ë½"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "아바타 설정"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "회ì›ê°€ìž…"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "ê°œì¸ì •ë³´ 취급방침"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "초대"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "차단하기"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "저장"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "아바타 설정"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "저장"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "그러한 태그가 없습니다."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -97,79 +104,88 @@ msgstr "그러한 태그가 없습니다."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "그러한 사용ìžëŠ” 없습니다."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s 와 친구들, %d 페ì´ì§€"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s ë° ì¹œêµ¬ë“¤"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s ë° ì¹œêµ¬ë“¤"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
@@ -182,20 +198,20 @@ msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
@@ -229,8 +245,9 @@ msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "ì´ìš©ìžê°€ í”„ë¡œí•„ì„ ê°€ì§€ê³  있지 않습니다."
@@ -255,7 +272,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -374,7 +391,7 @@ msgstr "공개 streamì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다."
msgid "Could not find target user."
msgstr "ì–´ë– í•œ ìƒíƒœë„ ì°¾ì„ ìˆ˜ 없습니다."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -382,62 +399,62 @@ msgstr ""
"ë³„ëª…ì€ ë°˜ë“œì‹œ ì˜ì†Œë¬¸ìžì™€ 숫ìžë¡œë§Œ ì´ë£¨ì–´ì ¸ì•¼ 하며 스페ì´ìŠ¤ì˜ ì‚¬ìš©ì´ ë¶ˆê°€ 합니"
"다."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "ë³„ëª…ì´ ì´ë¯¸ 사용중 입니다. 다른 ë³„ëª…ì„ ì‹œë„í•´ 보십시오."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "유효한 ë³„ëª…ì´ ì•„ë‹™ë‹ˆë‹¤"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "홈페ì´ì§€ 주소형ì‹ì´ 올바르지 않습니다."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "ì‹¤ëª…ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤. (최대 255글ìž)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "ì„¤ëª…ì´ ë„ˆë¬´ 길어요. (최대 140글ìž)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "위치가 너무 ê¹ë‹ˆë‹¤. (최대 255글ìž)"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "유효하지 ì•Šì€íƒœê·¸: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "ë³„ëª…ì´ ì´ë¯¸ 사용중 입니다. 다른 ë³„ëª…ì„ ì‹œë„í•´ 보십시오."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -449,16 +466,16 @@ msgstr ""
msgid "Group not found!"
msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ê·¸ë£¹ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "그룹 %sì— %s는 가입할 수 없습니다."
@@ -468,7 +485,7 @@ msgstr "그룹 %sì— %s는 가입할 수 없습니다."
msgid "You are not a member of this group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다."
@@ -500,7 +517,7 @@ msgstr "옳지 ì•Šì€ í¬ê¸°"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -509,7 +526,7 @@ msgstr "옳지 ì•Šì€ í¬ê¸°"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -544,7 +561,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -567,13 +584,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "계정"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -654,23 +671,11 @@ msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / %sì˜ ì¢‹ì•„í•˜ëŠ” 글들"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 좋아하는 ê¸€ì´ ì—…ë°ì´íŠ¸ ë습니다. %Sì— ì˜í•´ / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s 타임ë¼ì¸"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -696,17 +701,17 @@ msgstr "모ë‘ë¡œë¶€í„°ì˜ ì—…ë°ì´íŠ¸ %sê°œ!"
msgid "Repeated to %s"
msgstr "%sì— ë‹µì‹ "
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "%sì— ë‹µì‹ "
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "%s íƒœê·¸ëœ í†µì§€"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!"
@@ -723,8 +728,7 @@ msgstr "그러한 문서는 없습니다."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "ë³„ëª…ì´ ì—†ìŠµë‹ˆë‹¤."
@@ -736,7 +740,7 @@ msgstr "사ì´ì¦ˆê°€ 없습니다."
msgid "Invalid size."
msgstr "옳지 ì•Šì€ í¬ê¸°"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "아바타"
@@ -753,30 +757,30 @@ msgid "User without matching profile"
msgstr "프로필 ë§¤ì¹­ì´ ì—†ëŠ” 사용ìž"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "아바타 설정"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "ì›ëž˜ 설정"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "미리보기"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "삭제"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "올리기"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "ìžë¥´ê¸°"
@@ -784,7 +788,7 @@ msgstr "ìžë¥´ê¸°"
msgid "Pick a square area of the image to be your avatar"
msgstr "ë‹¹ì‹ ì˜ ì•„ë°”íƒ€ê°€ ë  ì´ë¯¸ì§€ì˜ì—­ì„ 지정하세요."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "íŒŒì¼ ë°ì´í„°ë¥¼ 잃어버렸습니다."
@@ -818,23 +822,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "아니오"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "ì´ ì‚¬ìš©ìžë¥¼ 차단해제합니다."
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "네, 맞습니다."
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "ì´ ì‚¬ìš©ìž ì°¨ë‹¨í•˜ê¸°"
@@ -842,41 +846,45 @@ msgstr "ì´ ì‚¬ìš©ìž ì°¨ë‹¨í•˜ê¸°"
msgid "Failed to save block information."
msgstr "ì •ë³´ì°¨ë‹¨ì„ ì €ìž¥í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "그러한 ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "ì´ìš©ìž 프로필"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s 와 친구들, %d 페ì´ì§€"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
#, fuzzy
msgid "A list of the users blocked from joining this group."
msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸"
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "ì‚¬ìš©ìž ì°¨ë‹¨ í•´ì œì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "차단해제"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "ì´ ì‚¬ìš©ìžë¥¼ 차단해제합니다."
@@ -935,7 +943,7 @@ msgid "Conversation"
msgstr "ì¸ì¦ 코드"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "통지"
@@ -957,7 +965,7 @@ msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "ë‹¹ì‹ ì˜ ì„¸ì…˜í† í°ê´€ë ¨ 문제가 있습니다."
@@ -983,12 +991,13 @@ msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다."
msgid "Delete this application"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "로그ì¸í•˜ê³  있지 않습니다."
@@ -1018,7 +1027,7 @@ msgstr "ì •ë§ë¡œ 통지를 삭제하시겠습니까?"
msgid "Do not delete this notice"
msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
@@ -1037,19 +1046,19 @@ msgstr "ë‹¹ì‹ ì€ ë‹¤ë¥¸ 사용ìžì˜ ìƒíƒœë¥¼ 삭제하지 ì•Šì•„ë„ ëœë‹¤."
msgid "Delete user"
msgstr "삭제"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1160,6 +1169,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "저장"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1262,31 +1283,31 @@ msgstr "%s 그룹 편집"
msgid "You must be logged in to create a group."
msgstr "ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "ë‹¤ìŒ ì–‘ì‹ì„ ì´ìš©í•´ ê·¸ë£¹ì„ íŽ¸ì§‘í•˜ì‹­ì‹œì˜¤."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "ì„¤ëª…ì´ ë„ˆë¬´ 길어요. (최대 140글ìž)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "ì˜µì…˜ë“¤ì´ ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -1407,7 +1428,7 @@ msgid "Cannot normalize that email address"
msgstr "ê·¸ ì´ë©”ì¼ ì£¼ì†Œë¥¼ 정규화 í•  수 없습니다."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "유효한 ì´ë©”ì¼ ì£¼ì†Œê°€ 아닙니다."
@@ -1603,6 +1624,25 @@ msgstr "그러한 통지는 없습니다."
msgid "Cannot read file."
msgstr "파ì¼ì„ 잃어버렸습니다."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "옳지 ì•Šì€ í¬ê¸°"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1635,7 +1675,7 @@ msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
msgid "User is not a member of group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "사용ìžë¥¼ 차단합니다."
@@ -1672,98 +1712,104 @@ msgstr "ID가 없습니다."
msgid "You must be logged in to edit a group."
msgstr "ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "그룹"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "싱í¬ì„¤ì •ì´ 저장ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "그룹 로고"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, fuzzy, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "ë‹¹ì‹ ê·¸ë£¹ì˜ ë¡œê³  ì´ë¯¸ì§€ë¥¼ 업로드할 수 있습니다."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "프로필 ë§¤ì¹­ì´ ì—†ëŠ” 사용ìž"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
#, fuzzy
msgid "Pick a square area of the image to be the logo."
msgstr "ë‹¹ì‹ ì˜ ì•„ë°”íƒ€ê°€ ë  ì´ë¯¸ì§€ì˜ì—­ì„ 지정하세요."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "로고를 ì—…ë°ì´íŠ¸í–ˆìŠµë‹ˆë‹¤."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "로고 ì—…ë°ì´íŠ¸ì— 실패했습니다."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s 그룹 회ì›"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "%s 그룹 회ì›, %d페ì´ì§€"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸"
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "차단하기"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s 타임ë¼ì¸"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "그룹"
@@ -2012,16 +2058,19 @@ msgstr "ê°œì¸ì ì¸ 메시지"
msgid "Optionally add a personal message to the invitation."
msgstr "ì´ˆëŒ€ìž¥ì— ë©”ì‹œì§€ 첨부하기."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "보내기"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$së‹˜ì´ ê·€í•˜ë¥¼ %2$sì— ì´ˆëŒ€í•˜ì˜€ìŠµë‹ˆë‹¤."
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2077,7 +2126,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "ê·¸ë£¹ê°€ìž…ì„ ìœ„í•´ì„œëŠ” 로그ì¸ì´ 필요합니다."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "ë³„ëª…ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤."
@@ -2086,11 +2140,11 @@ msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤."
msgid "You must be logged in to leave a group."
msgstr "ê·¸ë£¹ì„ ë– ë‚˜ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s가 그룹%s를 떠났습니다."
@@ -2108,8 +2162,7 @@ msgstr "틀린 계정 ë˜ëŠ” 비밀 번호"
msgid "Error setting user. You are probably not authorized."
msgstr "ì¸ì¦ì´ ë˜ì§€ 않았습니다."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "로그ì¸"
@@ -2365,8 +2418,8 @@ msgstr "ì—°ê²°"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다."
@@ -2512,7 +2565,8 @@ msgstr "새 비밀번호를 저장 할 수 없습니다."
msgid "Password saved."
msgstr "비밀 번호 저장"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2545,7 +2599,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "초대"
@@ -2641,7 +2694,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "복구"
@@ -2700,11 +2753,11 @@ msgstr "유효한 태그가 아닙니다: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "ì´ìš©ìž 셀프 í…Œí¬ %s - %d 페ì´ì§€"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "옳지 ì•Šì€ í†µì§€ ë‚´ìš©"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2729,7 +2782,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64ìž ì‚¬ì´ì— ì˜ì†Œë¬¸ìž, 숫ìžë¡œë§Œ ì”니다. 기호나 ê³µë°±ì„ ì“°ë©´ 안 ë©ë‹ˆë‹¤."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "실명"
@@ -2758,7 +2811,7 @@ msgid "Bio"
msgstr "ìžê¸°ì†Œê°œ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2783,7 +2836,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "ë‹¹ì‹ ì„ ìœ„í•œ 태그, (문ìž,숫ìž,-, ., _ë¡œ 구성) 콤마 í˜¹ì€ ê³µë°±ìœ¼ë¡œ 구분."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "언어"
@@ -2809,7 +2862,7 @@ msgstr "나ì—게 구ë…하는 사람ì—게 ìžë™ êµ¬ë… ì‹ ì²­"
msgid "Bio is too long (max %d chars)."
msgstr "ìžê¸°ì†Œê°œê°€ 너무 ê¹ë‹ˆë‹¤. (최대 140글ìž)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "íƒ€ìž„ì¡´ì´ ì„¤ì • ë˜ì§€ 않았습니다."
@@ -2822,24 +2875,25 @@ msgstr "언어가 너무 ê¹ë‹ˆë‹¤. (최대 50글ìž)"
msgid "Invalid tag: \"%s\""
msgstr "유효하지 ì•Šì€íƒœê·¸: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "ìžë™êµ¬ë…ì— ì‚¬ìš©ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "태그를 저장할 수 없습니다."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í•  수 없습니다."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "태그를 저장할 수 없습니다."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "설정 저장"
@@ -2852,48 +2906,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "공개 streamì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "공개 타임ë¼ì¸, %d 페ì´ì§€"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "í¼ë¸”릭 타임ë¼ì¸"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2902,7 +2956,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3075,8 +3129,7 @@ msgstr "í™•ì¸ ì½”ë“œ 오류"
msgid "Registration successful"
msgstr "íšŒì› ê°€ìž…ì´ ì„±ê³µì ìž…니다."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "회ì›ê°€ìž…"
@@ -3117,7 +3170,7 @@ msgid "Same as password above. Required."
msgstr "위와 ê°™ì€ ë¹„ë°€ 번호. 필수 사항."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "ì´ë©”ì¼"
@@ -3222,7 +3275,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "다른 마ì´í¬ë¡œë¸”로깅 ì„œë¹„ìŠ¤ì˜ ê·€í•˜ì˜ í”„ë¡œí•„ URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "구ë…"
@@ -3265,7 +3318,7 @@ msgstr "ë¼ì´ì„ ìŠ¤ì— ë™ì˜í•˜ì§€ 않는다면 등ë¡í•  수 없습니다."
msgid "You already repeated that notice."
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ì‚¬ìš©ìžë¥¼ 차단하고 있습니다."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "ìƒì„±"
@@ -3275,47 +3328,47 @@ msgstr "ìƒì„±"
msgid "Repeated!"
msgstr "ìƒì„±"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "%sì— ë‹µì‹ "
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "%2$sì—ì„œ %1$s까지 메시지"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "%sì˜ í†µì§€ 피드"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "%sì˜ í†µì§€ 피드"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "%sì˜ í†µì§€ 피드"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3327,6 +3380,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%2$sì—ì„œ %1$s까지 메시지"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "프로필 ë§¤ì¹­ì´ ì—†ëŠ” 사용ìž"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3342,8 +3405,9 @@ msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
msgid "User is already sandboxed."
msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3367,8 +3431,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "아바타 설정"
@@ -3403,8 +3467,8 @@ msgstr "페ì´ì§€ìˆ˜"
msgid "Description"
msgstr "설명"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "통계"
@@ -3465,35 +3529,35 @@ msgstr "%s ë‹˜ì˜ ì¢‹ì•„í•˜ëŠ” 글들"
msgid "Could not retrieve favorite notices."
msgstr "좋아하는 ê²Œì‹œê¸€ì„ ë³µêµ¬í•  수 없습니다."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "%sì˜ ì¹œêµ¬ë“¤ì„ ìœ„í•œ 피드"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3501,7 +3565,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3515,68 +3579,68 @@ msgstr "%s 그룹"
msgid "%1$s group, page %2$d"
msgstr "%s 그룹 회ì›, %d페ì´ì§€"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "그룹 프로필"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "설명"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "그룹 í–‰ë™"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%sì˜ ë³´ë‚¸ìª½ì§€í•¨"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "회ì›"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(없습니다.)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "모든 회ì›"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "ìƒì„±"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3586,7 +3650,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3597,7 +3661,7 @@ msgstr ""
"**%s** 는 %%%%site.name%%%% [마ì´í¬ë¡œë¸”로깅)(http://en.wikipedia.org/wiki/"
"Micro-blogging)ì˜ ì‚¬ìš©ìž ê·¸ë£¹ìž…ë‹ˆë‹¤. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "관리ìž"
@@ -3713,150 +3777,139 @@ msgid "User is already silenced."
msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "유효한 ì´ë©”ì¼ ì£¼ì†Œê°€ 아닙니다."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "%sì— í¬ìŠ¤íŒ… í•  새로운 ì´ë©”ì¼ ì£¼ì†Œ"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "로컬 뷰"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "언어 설정"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "새로운 메시지입니다."
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "트위터 í™˜ê²½ì„¤ì •ì„ ì €ìž¥í•  수 없습니다."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "사ì´íŠ¸ 공지"
#: actions/smssettings.php:58
#, fuzzy
@@ -3959,19 +4012,90 @@ msgstr "ê·€í•˜ì˜ íœ´ëŒ€í°ì˜ 통신회사는 무엇입니까?"
msgid "No code entered"
msgstr "코드가 ìž…ë ¥ ë˜ì§€ 않았습니다."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "주 사ì´íŠ¸ 네비게ì´ì…˜"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "아바타 설정"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "구ë…ì„ ì €ìž¥í•  수 없습니다."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "로컬 ì‚¬ìš©ìž ì•„ë‹™ë‹ˆë‹¤."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "그러한 통지는 없습니다."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "구ë…하였습니다."
@@ -4031,7 +4155,7 @@ msgstr "ê·€í•˜ì˜ í†µì§€ë¥¼ 받고 있는 사람"
msgid "These are the people whose notices %s listens to."
msgstr "%së‹˜ì´ ë°›ê³  있는 í†µì§€ì˜ ì‚¬ëžŒ"
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4041,35 +4165,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s 는 지금 듣고 있습니다."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "ì´ìš©ìž 셀프 í…Œí¬ %s - %d 페ì´ì§€"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "%sì˜ í†µì§€ 피드"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "%sì˜ í†µì§€ 피드"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "%sì˜ í†µì§€ 피드"
@@ -4123,7 +4247,7 @@ msgstr "ë‹¹ì‹ ì˜ êµ¬ë…ìžë‚˜ 구ë…하는 ì‚¬ëžŒì— íƒœê¹…ì„ ìœ„í•´ ì´ ì–‘ì‹
msgid "No such tag."
msgstr "그러한 태그가 없습니다."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API 메서드를 구성중 입니다."
@@ -4150,81 +4274,83 @@ msgstr "요청한 프로필id가 없습니다."
msgid "Unsubscribed"
msgstr "구ë…취소 ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "ì´ìš©ìž"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "프로필"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "새 사용ìžë¥¼ 초대"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "모든 예약 구ë…"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "나ì—게 구ë…하는 사람ì—게 ìžë™ êµ¬ë… ì‹ ì²­"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "ì´ˆëŒ€ê¶Œì„ ë³´ëƒˆìŠµë‹ˆë‹¤"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "ì´ˆëŒ€ê¶Œì„ ë³´ëƒˆìŠµë‹ˆë‹¤"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4357,16 +4483,22 @@ msgstr "%s 그룹 회ì›, %d페ì´ì§€"
msgid "Search for more groups"
msgstr "프로필ì´ë‚˜ í…스트 검색"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4410,7 +4542,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "ê°œì¸ì ì¸"
@@ -4451,6 +4583,11 @@ msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다."
msgid "Group leave failed."
msgstr "그룹 프로필"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4469,28 +4606,28 @@ msgstr "메시지를 삽입할 수 없습니다."
msgid "Could not update message with new URI."
msgstr "새 URI와 함께 메시지를 ì—…ë°ì´íŠ¸í•  수 없습니다."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "해쉬테그를 추가 í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "게시글 저장문제. ì•Œë ¤ì§€ì§€ì•Šì€ íšŒì›"
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4499,42 +4636,79 @@ msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "ì´ ì‚¬ì´íŠ¸ì— 게시글 í¬ìŠ¤íŒ…으로부터 ë‹¹ì‹ ì€ ê¸ˆì§€ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "ë‹µì‹ ì„ ì¶”ê°€ í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "ì´ íšŒì›ì€ 구ë…으로부터 ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ë‹¤."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "구ë…하고 있지 않습니다!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%2$sì—ì„œ %1$s까지 메시지"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ 수 없습니다."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "구ë…ì„ ì €ìž¥í•  수 없습니다."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "프로필 세팅 바꾸기"
@@ -4573,127 +4747,189 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "제목없는 페ì´ì§€"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "주 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:439
-msgid "Home"
-msgstr "홈"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "ê°œì¸ í”„ë¡œí•„ê³¼ 친구 타임ë¼ì¸"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "ê°œì¸ì ì¸"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "ë‹¹ì‹ ì˜ ì´ë©”ì¼, 아바타, 비밀 번호, í”„ë¡œí•„ì„ ë³€ê²½í•˜ì„¸ìš”."
-#: lib/action.php:444
-msgid "Connect"
-msgstr "ì—°ê²°"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "ì„œë²„ì— ìž¬ì ‘ì† í•  수 없습니다 : %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "ì—°ê²°"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "주 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "초대"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "관리ìž"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "%sì— ì¹œêµ¬ë¥¼ 가입시키기 위해 친구와 ë™ë£Œë¥¼ 초대합니다."
-#: lib/action.php:458
-msgid "Logout"
-msgstr "로그아웃"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "초대"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "ì´ ì‚¬ì´íŠ¸ë¡œë¶€í„° 로그아웃"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "로그아웃"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "계정 만들기"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "회ì›ê°€ìž…"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "ì´ ì‚¬ì´íŠ¸ 로그ì¸"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "ë„움ë§"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "로그ì¸"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ë„ì›€ì´ í•„ìš”í•´!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "검색"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "ë„움ë§"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "프로필ì´ë‚˜ í…스트 검색"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "검색"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "사ì´íŠ¸ 공지"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "로컬 뷰"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "페ì´ì§€ 공지"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ë³´ì¡° 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "ë„움ë§"
+
+#: lib/action.php:754
msgid "About"
msgstr "ì •ë³´"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "ìžì£¼ 묻는 질문"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "ê°œì¸ì •ë³´ 취급방침"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "소스 코드"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "ì—°ë½í•˜ê¸°"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "찔러 보기"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4702,12 +4938,12 @@ msgstr ""
"**%%site.name%%** 는 [%%site.broughtby%%](%%site.broughtbyurl%%)가 제공하는 "
"마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 는 마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4718,105 +4954,159 @@ msgstr ""
"ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. StatusNet는 [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html) ë¼ì´ì„ ìŠ¤ì— ë”°ë¼ ì‚¬ìš©í•  수 있습니다."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "모든 것"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "페ì´ì§€ìˆ˜"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "ë’· 페ì´ì§€"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "ì•ž 페ì´ì§€"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "ê°€ìž…ì´ í—ˆìš©ë˜ì§€ 않습니다."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "ëª…ë ¹ì´ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "ëª…ë ¹ì´ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "트위터 í™˜ê²½ì„¤ì •ì„ ì €ìž¥í•  수 없습니다."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "ì´ë©”ì¼ ì£¼ì†Œ 확ì¸ì„œ"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "초대"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS ì¸ì¦"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "ê°œì¸ì ì¸"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS ì¸ì¦"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "ì´ìš©ìž"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS ì¸ì¦"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS ì¸ì¦"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS ì¸ì¦"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "사ì´íŠ¸ 공지"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS ì¸ì¦"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4912,12 +5202,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "비밀번호 변경"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "비밀번호 변경"
@@ -5071,80 +5361,89 @@ msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
msgid "Specify the name of the user to subscribe to"
msgstr "구ë…하려는 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤."
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "그러한 사용ìžëŠ” 없습니다."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "%sì—게 구ë…ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "구ë…ì„ í•´ì œí•˜ë ¤ëŠ” 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "ëª…ë ¹ì´ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "알림ë„기."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "ì•Œë¦¼ì„ ëŒ ìˆ˜ 없습니다."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "ì•Œë¦¼ì´ ì¼œì¡ŒìŠµë‹ˆë‹¤."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤."
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다."
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5158,6 +5457,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5185,20 +5485,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "í™•ì¸ ì½”ë“œê°€ 없습니다."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "ì´ ì‚¬ì´íŠ¸ 로그ì¸"
@@ -5300,6 +5600,11 @@ msgstr "ì¢ì€ 리스트ì—ì„œ 태그 ì„ íƒí•˜ê¸°"
msgid "Go"
msgstr "Go "
+#: lib/grantroleform.php:91
+#, php-format
+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"
@@ -5391,23 +5696,23 @@ msgstr "파ì¼ì„ ì˜¬ë¦¬ëŠ”ë° ì‹œìŠ¤í…œ 오류 ë°œìƒ"
msgid "Not an image or corrupt file."
msgstr "그림 파ì¼ì´ 아니거나 ì†ìƒëœ íŒŒì¼ ìž…ë‹ˆë‹¤."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "파ì¼ì„ 잃어버렸습니다."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "ì•Œ 수 없는 ì¢…ë¥˜ì˜ íŒŒì¼ìž…니다"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5619,7 +5924,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr "다ìŒì—ì„œ:"
@@ -5710,6 +6015,12 @@ msgstr "ì—게"
msgid "Available characters"
msgstr "사용 가능한 글ìž"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "보내기"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "게시글 보내기"
@@ -5743,51 +6054,51 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "아니오"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "ìƒì„±"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "답장하기"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -5821,11 +6132,6 @@ msgstr "리모트 프로필 추가 오류"
msgid "Duplicate notice"
msgstr "통지 삭제"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "ì´ íšŒì›ì€ 구ë…으로부터 ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ë‹¤."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "예약 구ë…ì„ ì¶”ê°€ í•  수 없습니다."
@@ -5868,7 +6174,7 @@ msgstr "%sì˜ ê²Œì‹œê¸€ì˜ íƒœê·¸"
msgid "Unknown"
msgstr "알려지지 ì•Šì€ í–‰ë™"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "구ë…"
@@ -5876,24 +6182,24 @@ msgstr "구ë…"
msgid "All subscriptions"
msgstr "모든 예약 구ë…"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "구ë…ìž"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "모든 구ë…ìž"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "ì´ìš©ìž"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "가입한 때"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "모든 그룹"
@@ -5936,7 +6242,12 @@ msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
msgid "Repeat this notice"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5959,6 +6270,10 @@ msgstr "검색"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "검색"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6013,35 +6328,14 @@ msgstr "%sì— ì˜í•´ 구ë…ë˜ëŠ” 사람들"
msgid "Groups %s is a member of"
msgstr "%s ê·¸ë£¹ë“¤ì€ ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤."
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "êµ¬ë… í•˜ì‹¤ 수 없습니다."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "구ë…하고 있지 않습니다!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "초대"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "%sì— ì¹œêµ¬ë¥¼ 가입시키기 위해 친구와 ë™ë£Œë¥¼ 초대합니다."
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6096,68 +6390,84 @@ msgstr "아바타"
msgid "User actions"
msgstr "ì‚¬ìš©ìž ë™ìž‘"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "프로필 세팅"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "ì´ íšŒì›ì—게 ì§ì ‘ 메시지를 보냅니다."
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "메시지"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ì´ìš©ìž 프로필"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "관리ìž"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "몇 초 전"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%dì¼ ì „"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1ë…„ ì „"
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 92209e72e..60e5a3c29 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -9,77 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:50+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural= n==1 || n%10==1 ? 0 : 1;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "ПриÑтап"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Ðагодувања за приÑтап на веб-Ñтраницата"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "РегиÑтрација"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Приватен"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Да им забранам на анонимните (ненајавени) кориÑници да ја гледаат веб-"
"Ñтраницата?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Само Ñо покана"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Приватно"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "РегиÑтрирање Ñамо Ñо покана."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Затворен"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Само Ñо покана"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Оневозможи нови региÑтрации."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Зачувај"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Затворен"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Зачувај нагодувања на приÑтап"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Зачувај"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Ðема таква Ñтраница"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,53 +99,60 @@ msgstr "Ðема таква Ñтраница"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Ðема таков кориÑник."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s и пријателите, ÑÑ‚Ñ€. %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s и пријатели"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Канал Ñо пријатели на %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Канал Ñо пријатели на %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Канал за пријатели на %S (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
"Ова е иÑторијата за %s и пријателите, но доÑега никој нема објавено ништо."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -148,7 +161,8 @@ msgstr ""
"Пробајте да Ñе претплатите на повеќе луѓе, [зачленете Ñе во група](%%action."
"groups%%) или објавете нешто Ñамите."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -158,7 +172,7 @@ msgstr ""
"на кориÑникот или да [објавите нешто што Ñакате тој да го прочита](%%%%"
"action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -168,12 +182,13 @@ msgstr ""
"го подбуцнете кориÑникот %s или да објавите забелешка што Ñакате тој да ја "
"прочита."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Вие и пријателите"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Подновувања од %1$s и пријатели на %2$s!"
@@ -186,20 +201,20 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API методот не е пронајден."
@@ -233,8 +248,9 @@ msgstr "Ðе можев да го подновам кориÑникот."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "КориÑникот нема профил."
@@ -260,7 +276,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -373,68 +389,68 @@ msgstr "Ðе можев да го утврдам целниот кориÑник
msgid "Could not find target user."
msgstr "Ðе можев да го пронајдам целниот кориÑник."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Прекарот мора да има Ñамо мали букви и бројки и да нема празни меÑта."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Тој прекар е во употреба. Одберете друг."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ðеправилен прекар."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Главната Ñтраница не е важечка URL-адреÑа."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Целото име е предолго (макÑимум 255 знаци)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "ОпиÑот е предолг (дозволено е највеќе %d знаци)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Локацијата е предолга (макÑимумот е 255 знаци)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Премногу алијаÑи! Дозволено е највеќе %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ðеважечки алијаÑ: „%s“"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "ÐлијаÑот „%s“ е зафатен. Одберете друг."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "ÐлијаÑот не може да биде иÑÑ‚ како прекарот."
@@ -445,15 +461,15 @@ msgstr "ÐлијаÑот не може да биде иÑÑ‚ како прекаÑ
msgid "Group not found!"
msgstr "Групата не е пронајдена!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Веќе членувате во таа група."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Блокирани Ñте од таа група од админиÑтраторот."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Ðе можам да го зачленам кориÑникот %1$s во групата 2$s."
@@ -462,7 +478,7 @@ msgstr "Ðе можам да го зачленам кориÑникот %1$s вÐ
msgid "You are not a member of this group."
msgstr "Ðе членувате во оваа група."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Ðе можев да го отÑтранам кориÑникот %1$s од групата %2$s."
@@ -493,7 +509,7 @@ msgstr "Погрешен жетон."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -502,7 +518,7 @@ msgstr "Погрешен жетон."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -536,7 +552,7 @@ msgstr "Жетонот на барањето %s е одбиен и поништÐ
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -562,13 +578,13 @@ msgstr ""
"<strong>%3$s</strong> податоците за Вашата %4$s Ñметка. Треба да дозволувате "
"приÑтап до Вашата %4$s Ñметка Ñамо на трети Ñтрани на кои им верувате."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Сметка"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -646,23 +662,11 @@ msgstr "Ðеподдржан формат."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Омилени од %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Подновувања на %1$s омилени на %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "ИÑторија на %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Подновувања од %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -688,17 +692,17 @@ msgstr "%s подновуввања од Ñите!"
msgid "Repeated to %s"
msgstr "Повторено за %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Повторувања на %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Забелешки означени Ñо %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Подновувањата Ñе означени Ñо %1$s на %2$s!"
@@ -714,8 +718,7 @@ msgstr "Ðема таков прилог."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ðема прекар."
@@ -727,7 +730,7 @@ msgstr "Ðема големина."
msgid "Invalid size."
msgstr "Погрешна големина."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватар"
@@ -746,30 +749,30 @@ msgid "User without matching profile"
msgstr "КориÑник без Ñоодветен профил"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Ðагодувања на аватарот"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Оригинал"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Преглед"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Бриши"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Подигни"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "ОтÑечи"
@@ -777,7 +780,7 @@ msgstr "ОтÑечи"
msgid "Pick a square area of the image to be your avatar"
msgstr "Одберете квадратна површина од Ñликата за аватар"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Податоците за податотеката Ñе изгубени."
@@ -813,22 +816,22 @@ msgstr ""
"од кориÑникот."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Ðе"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Ðе го блокирај кориÑников"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокирај го кориÑников"
@@ -836,39 +839,43 @@ msgstr "Блокирај го кориÑников"
msgid "Failed to save block information."
msgstr "Ðе можев да ги Ñнимам инофрмациите за блокот."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Ðема таква група."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s блокирани профили"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s блокирани профили, ÑÑ‚Ñ€. %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "ЛиÑтана кориÑниците блокирани од придружување во оваа група."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Одблокирај кориÑник од група"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Одблокирај"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Одблокирај го овој корÑник"
@@ -924,7 +931,7 @@ msgid "Conversation"
msgstr "Разговор"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Забелешки"
@@ -943,7 +950,7 @@ msgstr "Ðе Ñте ÑопÑтвеник на овој програм."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Се појави проблем Ñо Вашиот ÑеÑиÑки жетон."
@@ -969,12 +976,13 @@ msgstr "Ðе го бриши овој програм"
msgid "Delete this application"
msgstr "Избриши го програмов"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ðе Ñте најавени."
@@ -1003,7 +1011,7 @@ msgstr "Дали Ñте Ñигурни дека Ñакате да ја избрÐ
msgid "Do not delete this notice"
msgstr "Ðе ја бриши оваа забелешка"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Бриши ја оваа забелешка"
@@ -1019,7 +1027,7 @@ msgstr "Може да бришете Ñамо локални кориÑници.
msgid "Delete user"
msgstr "Бриши кориÑник"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1027,12 +1035,12 @@ msgstr ""
"Дали Ñе Ñигурни дека Ñакате да го избришете овој кориÑник? Ова воедно ќе ги "
"избрише Ñите податоци за кориÑникот од базата, без да може да Ñе вратат."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Избриши овој кориÑник"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Изглед"
@@ -1135,6 +1143,18 @@ msgstr "Врати оÑновно-зададени нагодувања"
msgid "Reset back to default"
msgstr "Врати по оÑновно"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Зачувај"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Зачувај изглед"
@@ -1226,29 +1246,29 @@ msgstr "Уреди ја групата %s"
msgid "You must be logged in to create a group."
msgstr "Мора да Ñте најавени за да можете да Ñоздавате групи."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Мора да Ñте админиÑтратор за да можете да ја уредите групата."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "ОБразецов Ñлужи за уредување на групата."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "опиÑот е предолг (макÑимум %d знаци)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Ðе можев да ја подновам групата."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Ðе можеше да Ñе Ñоздадат алијаÑи."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Ðагодувањата Ñе зачувани."
@@ -1369,7 +1389,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðеможам да ја нормализирам таа е-поштенÑка адреÑа"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеправилна адреÑа за е-пошта."
@@ -1562,6 +1582,25 @@ msgstr "Ðема таква податотека."
msgid "Cannot read file."
msgstr "Податотеката не може да Ñе прочита."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Погрешен жетон."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ðе можете да Ñтавате кориÑници во пеÑочен режим на оваа веб-Ñтраница."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "КориÑникот е веќе замолчен."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1591,7 +1630,7 @@ msgstr "КориÑникот е веќе блокиран од оваа груп
msgid "User is not a member of group."
msgstr "КориÑникот не членува во групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Блокирај кориÑник од група"
@@ -1628,11 +1667,11 @@ msgstr "Ðема ID."
msgid "You must be logged in to edit a group."
msgstr "Мора да Ñте најавени за да можете да уредувате група."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Изглед на групата"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1640,20 +1679,20 @@ msgstr ""
"Прилагодете го изгледот на Вашата група Ñо позадинÑка Ñлика и палета од бои "
"по Ваш избор."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ðе можев да го подновам Вашиот изглед."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Ðагодувањата Ñе зачувани."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Лого на групата"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1661,62 +1700,68 @@ msgstr ""
"Можете да подигнете Ñлика за логото на Вашата група. МакÑималната дозволена "
"големина на податотеката е %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "КориÑник без Ñоодветен профил."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Одберете квадратен проÑтор на Ñликата за лого."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Логото е подновено."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Подновата на логото не уÑпеа."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Членови на групата %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Членови на групата %1$s, ÑÑ‚Ñ€. %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "ЛиÑта на кориÑниците на овааг група."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐдминиÑтратор"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокирај"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Ðаправи го кориÑникот админиÑтратор на групата"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Ðаправи го/ја админиÑтратор"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Ðаправи го кориÑникот админиÑтратор"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "ИÑторија на %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Подновувања од членови на %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -1977,16 +2022,18 @@ msgstr "Лична порака"
msgid "Optionally add a personal message to the invitation."
msgstr "Можете да додадете и лична порака во поканата."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr "ИÑпрати"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s ве покани да Ñе придружите на %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2047,7 +2094,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Мора да Ñте најавени за да можете да Ñе зачлените во група."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Ðема прекар или ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s Ñе зачлени во групата %2$s"
@@ -2056,11 +2107,11 @@ msgstr "%1$s Ñе зачлени во групата %2$s"
msgid "You must be logged in to leave a group."
msgstr "Мора да Ñте најавени за да можете да ја напуштите групата."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Ðе членувате во таа група."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s ја напушти групата %2$s"
@@ -2077,8 +2128,7 @@ msgstr "Ðеточно кориÑничко име или лозинка"
msgid "Error setting user. You are probably not authorized."
msgstr "Грешка при поÑтавувањето на кориÑникот. Веројатно не Ñе заверени."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ðајава"
@@ -2335,8 +2385,8 @@ msgstr "тип на Ñодржини "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ова не е поддржан формат на податотека."
@@ -2477,7 +2527,8 @@ msgstr "Ðе можам да ја зачувам новата лозинка."
msgid "Password saved."
msgstr "Лозинката е зачувана."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Патеки"
@@ -2510,7 +2561,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ðеважечки SSL-Ñервер. Дозволени Ñе најмногу 255 знаци"
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Веб-Ñтраница"
@@ -2598,7 +2648,7 @@ msgstr "Директориум на позадината"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикогаш"
@@ -2654,11 +2704,11 @@ msgstr "Ðе е важечка ознака за луѓе: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "КориÑтници Ñамоозначени Ñо %1$s - ÑÑ‚Ñ€. %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ðеважечка Ñодржина на забелешката"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2685,7 +2735,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 мали букви или бројки. Без интерпукциÑки знаци и празни меÑта."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Цело име"
@@ -2713,7 +2763,7 @@ msgid "Bio"
msgstr "Биографија"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2740,7 +2790,7 @@ msgstr ""
"Ознаки за Ð’Ð°Ñ Ñамите (букви, бројки, -, . и _), одделени Ñо запирка или "
"празно меÑто"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Јазик"
@@ -2768,7 +2818,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Биографијата е преголема (највеќе до %d знаци)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Ðе е избрана чаÑовна зона."
@@ -2781,23 +2831,24 @@ msgstr "Јазикот е предлог (највеќе до 50 знаци)."
msgid "Invalid tag: \"%s\""
msgstr "Ðеважечка ознака: „%s“"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Ðе можев да го подновам кориÑникот за автопретплата."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Ðе можев да ги зачувам нагодувањата за локација"
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Ðе можам да го зачувам профилот."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Ðе можев да ги зачувам ознаките."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Ðагодувањата Ñе зачувани"
@@ -2810,28 +2861,28 @@ msgstr "Ðадминато е ограничувањето на Ñтраница
msgid "Could not retrieve public stream."
msgstr "Ðе можам да го вратам јавниот поток."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Јавна иÑторија, ÑÑ‚Ñ€. %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Јавна иÑторија"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Канал на јавниот поток (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Канал на јавниот поток (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Канал на јавниот поток (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2839,11 +2890,11 @@ msgid ""
msgstr ""
"Ова е јавната иÑторија за %%site.name%%, но доÑега никој ништо нема објавено."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Создајте ја првата забелешка!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2851,7 +2902,7 @@ msgstr ""
"Зошто не [региÑтрирате Ñметка](%%action.register%%) и Ñтанете првиот "
"објавувач!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2865,7 +2916,7 @@ msgstr ""
"Ñподелувате забелешки за Ñебе Ñо приајтелите, ÑемејÑтвото и колегите! "
"([Прочитајте повеќе](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3045,8 +3096,7 @@ msgstr "Жалиме, неважечки код за поканата."
msgid "Registration successful"
msgstr "РегиÑтрацијата е уÑпешна"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтрирај Ñе"
@@ -3089,7 +3139,7 @@ msgid "Same as password above. Required."
msgstr "ИÑто што и лозинката погоре. Задолжително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-пошта"
@@ -3196,7 +3246,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL на Вашиот профил на друга компатибилна Ñлужба за микроблогирање."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Претплати Ñе"
@@ -3234,7 +3284,7 @@ msgstr "Ðе можете да повторувате ÑопÑтвена забÐ
msgid "You already repeated that notice."
msgstr "Веќе ја имате повторено таа забелешка."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3242,33 +3292,33 @@ msgstr "Повторено"
msgid "Repeated!"
msgstr "Повторено!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Одговори иÑпратени до %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Одговори на %1$s, ÑÑ‚Ñ€. %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Канал Ñо одговори за %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Канал Ñо одговори за %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Канал Ñо одговори за %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3277,7 +3327,7 @@ msgstr ""
"Ова е иÑторијата на која Ñе прикажани одговорите на %1$s, но %2$s Ñè уште "
"нема добиено порака од некој што Ñака да ја прочита."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3286,7 +3336,7 @@ msgstr ""
"Можете да започнувате разговори Ñо други кориÑници, да Ñе претплаќате на "
"други луѓе или да [Ñе зачленувате во групи](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3300,6 +3350,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Одговори на %1$s на %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ðе можете да замолчувате кориÑници на оваа веб-Ñтраница."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "КориÑник без Ñоодветен профил."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3312,8 +3372,9 @@ msgstr "Ðе можете да Ñтавате кориÑници во пеÑоч
msgid "User is already sandboxed."
msgstr "КориÑникот е веќе во пеÑочен режим."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "СеÑии"
@@ -3337,8 +3398,8 @@ msgstr "Поправка на грешки во ÑеÑија"
msgid "Turn on debugging output for sessions."
msgstr "Вклучи извод од поправка на грешки за ÑеÑии."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Зачувај нагодувања на веб-Ñтраницата"
@@ -3368,8 +3429,8 @@ msgstr "Организација"
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
@@ -3433,22 +3494,22 @@ msgstr "Омилени забелешки на %1$s, ÑÑ‚Ñ€. %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Ðе можев да ги вратам омилените забелешки."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Канал за омилени забелешки на %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Канал за омилени забелешки на %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Канал за омилени забелешки на %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3457,7 +3518,7 @@ msgstr ""
"омилена забелешка веднаш до Ñамата забелешката што Ви Ñе допаѓа за да ја "
"обележите за подоцна, или за да Ñ Ð´Ð°Ð´ÐµÑ‚Ðµ на важноÑÑ‚."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3466,7 +3527,7 @@ msgstr ""
"%s Ñè уште нема додадено забелешки како омилени. Објавете нешто интереÑно, "
"што кориÑникот би го обележал како омилено :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3477,7 +3538,7 @@ msgstr ""
"%%action.register%%%%) и потоа објавите нешто интереÑно што кориÑникот би го "
"додал како омилено :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Ова е начин да го Ñподелите она што Ви Ñе допаѓа."
@@ -3491,67 +3552,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Група %1$s, ÑÑ‚Ñ€. %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профил на група"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Забелешка"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ÐлијаÑи"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Групни дејÑтва"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Канал Ñо забелешки за групата %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Канал Ñо забелешки за групата %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Канал Ñо забелешки за групата%s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF за групата %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Членови"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ðема)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Сите членови"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Создадено"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3567,7 +3628,7 @@ msgstr ""
"Ñе](%%%%action.register%%%%) за да Ñтанете дел од оваа група и многу повеќе! "
"([Прочитајте повеќе](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3580,7 +3641,7 @@ msgstr ""
"Ñлободната програмÑка алатка [StatusNet](http://status.net/). Ðејзините "
"членови Ñи разменуваат кратки пораки за нивниот живот и интереÑи. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -3702,152 +3763,143 @@ msgid "User is already silenced."
msgstr "КориÑникот е веќе замолчен."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "ОÑновни нагодувања за оваа StatusNet веб-Ñтраница."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Должината на името на веб-Ñтраницата не може да изнеÑува нула."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Мора да имате важечка контактна е-поштенÑка адреÑа."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Ðепознат јазик „%s“"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Ðеважечки URL за извештај од Ñнимката."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Ðеважечка вредноÑÑ‚ на пуштањето на Ñнимката."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "ЧеÑтотата на Ñнимките мора да биде бројка."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничување на текÑтот изнеÑува 140 знаци."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничувањето на дуплирањето мора да изнеÑува барем 1 Ñекунда."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Општи"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на веб-Ñтраницата"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Името на Вашата веб-Ñтраница, како на пр. „Микроблог на Вашафирма“"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Овозможено од"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"ТекÑÑ‚ за врÑката за наведување на авторите во долната колонцифра на Ñекоја "
"Ñтраница"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-адреÑа на овозможувачот на уÑлугите"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL-адреÑата која е кориÑти за врÑки за автори во долната колоцифра на "
"Ñекоја Ñтраница"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна е-пошта за Вашата веб-Ñтраница"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локално"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ОÑновна чаÑовна зона"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Матична чаÑовна зона за веб-Ñтраницата; обично UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "ОÑновен јазик"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "По ÑлучајноÑÑ‚ во текот на поÑета"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Во зададена задача"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снимки од податоци"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Кога да им Ñе иÑпраќаат ÑтатиÑтички податоци на status.net Ñерверите"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "ЧеÑтота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ќе Ñе иÑпраќаат Ñнимки на Ñекои N поÑети"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL на извештајот"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимките ќе Ñе иÑпраќаат на оваа URL-адреÑа"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ограничувања"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ограничување на текÑтот"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимален број на знаци за забелешки."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ограничување на дуплирањето"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Колку долго треба да почекаат кориÑниците (во Ñекунди) за да можат повторно "
"да го објават иÑтото."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ðапомена за веб-Ñтраницата"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ðова порака"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Ðе можам да ги зачувам Вашите нагодувања за изглед."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Ðапомена за веб-Ñтраницата"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ðапомена за веб-Ñтраницата"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Ðагодувања за СМС"
@@ -3947,19 +3999,89 @@ msgstr ""
msgid "No code entered"
msgstr "Ðема внеÑено код"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снимки"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Промена на поÑтавките на веб-Ñтраницата"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Ðеважечка вредноÑÑ‚ на пуштањето на Ñнимката."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "ЧеÑтотата на Ñнимките мора да биде бројка."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Ðеважечки URL за извештај од Ñнимката."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "По ÑлучајноÑÑ‚ во текот на поÑета"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Во зададена задача"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снимки од податоци"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Кога да им Ñе иÑпраќаат ÑтатиÑтички податоци на status.net Ñерверите"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "ЧеÑтота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Ќе Ñе иÑпраќаат Ñнимки на Ñекои N поÑети"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL на извештајот"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снимките ќе Ñе иÑпраќаат на оваа URL-адреÑа"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Зачувај нагодувања на веб-Ñтраницата"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Ðе Ñте претплатени на тој профил."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Ðе можев да ја зачувам претплатата."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ðе е локален кориÑник."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Ова дејÑтво прифаќа Ñамо POST-барања"
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Ðема таков профил."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"Ðе можете да Ñе претплатите на OMB 0.1 оддалечен профил Ñо ова дејÑтво."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Претплатено"
@@ -4023,7 +4145,7 @@ msgstr "Ова Ñе луѓето чии забелешки ги Ñледите."
msgid "These are the people whose notices %s listens to."
msgstr "Ова Ñе луѓето чии забелешки ги Ñледи %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4038,35 +4160,35 @@ msgstr ""
"(%%action.featured%%). Ðко Ñте [кориÑник на Twitter](%%action.twittersettings"
"%%), тука можете автоматÑки да Ñе претплатите на луѓе кои таму ги Ñледите."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s не Ñледи никого."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "СМС"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Забелешки означени Ñо %1$s, ÑÑ‚Ñ€. %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Канал Ñо забелешки за ознаката %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Канал Ñо забелешки за ознаката %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Канал Ñо забелешки за ознаката %s (Atom)"
@@ -4120,7 +4242,7 @@ msgstr "Со овој образец додавајте ознаки во Ваш
msgid "No such tag."
msgstr "Ðема таква ознака."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-методот е во изработка."
@@ -4144,7 +4266,7 @@ msgstr "Во барањето нема id на профилот."
msgid "Unsubscribed"
msgstr "Претплатата е откажана"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4152,70 +4274,71 @@ msgstr ""
"Лиценцата на потокот на Ñледачот „%1$s“ не е компатибилна Ñо лиценцата на "
"веб-Ñтраницата „%2$s“."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "КориÑник"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "КориÑнички нагодувања за оваа StatusNet веб-Ñтраница."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Ðеважечко ограничување за биографијата. Мора да е бројчено."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "ÐЕважечки текÑÑ‚ за добредојде. Дозволени Ñе највеќе 255 знаци."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Ðеважечки Ð¾Ð¿Ð¸Ñ Ð¿Ð¾ оÑновно: „%1$s“ не е кориÑник."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Профил"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Ограничување за биографијата"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "МакÑимална големина на профилната биографија во знаци."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Ðови кориÑници"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Добредојде за нов кориÑник"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "ТекÑÑ‚ за добредојде на нови кориÑници (највеќе до 255 знаци)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "ОÑновно-зададена претплата"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "ÐвтоматÑки претплатувај нови кориÑници на овој кориÑник."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Покани"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Поканите Ñе овозможени"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Дали да им е дозволено на кориÑниците да канат други кориÑници."
@@ -4346,18 +4469,24 @@ msgstr "Групи %1$s, ÑÑ‚Ñ€. %2$d"
msgid "Search for more groups"
msgstr "Пребарај уште групи"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не членува во ниедна група."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Обидете Ñе Ñо [пребарување на групи](%%action.groupsearch%%) и придружете им "
"Ñе."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Подновувања од %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4413,7 +4542,7 @@ msgstr ""
msgid "Plugins"
msgstr "Приклучоци"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Верзија"
@@ -4453,6 +4582,10 @@ msgstr "Ðе е дел од групата."
msgid "Group leave failed."
msgstr "Ðапуштањето на групата не уÑпеа."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Ðе можев да ја подновам локалната група."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4470,27 +4603,27 @@ msgstr "Ðе можев да ја иÑпратам пораката."
msgid "Could not update message with new URI."
msgstr "Ðе можев да ја подновам пораката Ñо нов URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознака: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблем Ñо зачувувањето на белешката. Премногу долго."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблем Ñо зачувувањето на белешката. Ðепознат кориÑник."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Премногу забелњшки за прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4498,41 +4631,74 @@ msgstr ""
"Премногу дуплирани пораки во прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забрането Ви е да објавувате забелешки на оваа веб-Ñтраница."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем во зачувувањето на белешката."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблем при зачувувањето на групното приемно Ñандаче."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Одговор од внеÑот во базата: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Блокирани Ñте од претплаќање."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Веќе претплатено!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "КориÑникот Ве има блокирано."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Ðе Ñте претплатени!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Ðе можам да ја избришам Ñамопретплатата."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Претплата не може да Ñе избрише."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Претплата не може да Ñе избрише."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добредојдовте на %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Ðе можев да ја Ñоздадам групата."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Ðе можев да поÑтавам URI на групата."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Ðе можев да назначам членÑтво во групата."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Ðе можев да ги зачувам информациите за локалните групи."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Смени профилни нагодувања"
@@ -4570,124 +4736,171 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Страница без наÑлов"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Главна навигација"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Дома"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
-msgstr "Личен профил и иÑторија на пријатели"
+msgstr "Личен профил и хронологија на пријатели"
+
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Лично"
-#: lib/action.php:441
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Промена на е-пошта, аватар, лозинка, профил"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Поврзи Ñе"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Поврзи Ñе Ñо уÑлуги"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Поврзи Ñе"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Промена на конфигурацијата на веб-Ñтраницата"
+msgstr "Промена на поÑтавките на веб-Ñтраницата"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Покани"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ðдмин"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Поканете пријатели и колеги да Ви Ñе придружат на %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Одјави Ñе"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Покани"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Одјава"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Одјава"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Создај Ñметка"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "РегиÑтрација"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ðајава"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Помош"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ðајава"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ðапомош!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Барај"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помош"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пребарајте луѓе или текÑÑ‚"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "Барај"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Ðапомена за веб-Ñтраницата"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Локални прегледи"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Ðапомена за Ñтраницата"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Споредна навигација"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помош"
+
+#: lib/action.php:754
msgid "About"
msgstr "За"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧПП"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "УÑлови"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПриватноÑÑ‚"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Изворен код"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Значка"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценца на програмот StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4696,12 +4909,12 @@ msgstr ""
"**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање што ви го овозможува [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4712,99 +4925,151 @@ msgstr ""
"верзија %s, доÑтапен пд [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценца на Ñодржините на веб-Ñтраницата"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содржината и податоците на %1$s Ñе лични и доверливи."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"ÐвторÑките права на Ñодржината и податоците Ñе во ÑопÑтвеноÑÑ‚ на %1$s. Сите "
"права задржани."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑките права на Ñодржината и податоците им припаѓаат на учеÑниците. Сите "
"права задржани."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Сите "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "лиценца."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Прелом на Ñтраници"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "По"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Пред"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Сè уште не е поддржана обработката на оддалечена Ñодржина."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Сè уште не е поддржана обработката на XML Ñодржина."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Сè уште не е доÑтапна обработката на вметната Base64 Ñодржина."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Ðе можете да ја менувате оваа веб-Ñтраница."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Менувањето на тој алатник не е дозволено."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не е имплементирано."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не е имплементирано."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Ðе можам да ги избришам нагодувањата за изглед."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ОÑновни нагодувања на веб-Ñтраницата"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Веб-Ñтраница"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Конфигурација на изгледот"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Изглед"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Конфигурација на кориÑник"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "КориÑник"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Конфигурација на приÑтапот"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Конфигурација на патеки"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Конфигурација на ÑеÑиите"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Ðапомена за веб-Ñтраницата"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Конфигурација на патеки"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"API-реÑурÑот бара да може и да чита и да запишува, а вие можете Ñамо да "
"читате."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr "ÐеуÑпешен обид за API-заверка, прекар = %1$s, прокÑи = %2$s, IP = %3$s"
@@ -4895,11 +5160,11 @@ msgstr "Забелешки кадешто Ñе јавува овој прилоÐ
msgid "Tags for this attachment"
msgstr "Ознаки за овој прилог"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Менувањето на лозинката не уÑпеа"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Менувањето на лозинка не е дозволено"
@@ -5053,80 +5318,89 @@ msgstr "Грешка при зачувувањето на белешката."
msgid "Specify the name of the user to subscribe to"
msgstr "Ðазначете го името на кориÑникот на којшто Ñакате да Ñе претплатите"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Ðема таков кориÑник"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Претплатено на %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Ðазначете го името на кориÑникот од кого откажувате претплата."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Претплатата на %s е откажана"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Ðаредбата Ñè уште не е имплементирана."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "ИзвеÑтувањето е иÑклучено."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Ðе можам да иÑклучам извеÑтување."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "ИзвеÑтувањето е вклучено."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Ðе можам да вклучам извеÑтување."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Ðаредбата за најава е оневозможена"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "Оваа врÑка може да Ñе употреби Ñамо еднаш, и трае Ñамо 2 минути: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Откажана претплата на %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Ðе Ñте претплатени никому."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ðикој не е претплатен на ВаÑ."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Оддалечена претплата"
msgstr[1] "Оддалечена претплата"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Ðе членувате во ниедна група."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5140,6 +5414,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5204,19 +5479,19 @@ msgstr ""
"tracks - Ñè уште не е имплементирано.\n"
"tracking - Ñè уште не е имплементирано.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ðема пронајдено конфигурациÑка податотека. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Побарав конфигурациони податотеки на Ñледниве меÑта: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Препорачуваме да го пуштите инÑталатерот за да го поправите ова."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Оди на инÑталаторот."
@@ -5315,6 +5590,11 @@ msgstr "Одберете ознака за да ја уточните лиÑта
msgid "Go"
msgstr "Оди"
+#: lib/grantroleform.php:91
+#, php-format
+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 на Ñтраницата или блогот на групата или темата"
@@ -5406,23 +5686,23 @@ msgstr "СиÑтемÑка грешка при подигањето на подÐ
msgid "Not an image or corrupt file."
msgstr "Ðе е Ñлика или податотеката е пореметена."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Ðеподдржан фомрат на Ñлики."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Податотеката е изгубена."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Ðепознат тип на податотека"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "МБ"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "кб"
@@ -5714,7 +5994,7 @@ msgstr ""
"впуштите во разговор Ñо други кориÑници. Луѓето можат да ви иÑпраќаат пораки "
"што ќе можете да ги видите Ñамо Вие."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "од"
@@ -5809,6 +6089,11 @@ msgstr "За"
msgid "Available characters"
msgstr "РаÑположиви знаци"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "ИÑпрати"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "ИÑпрати забелешка"
@@ -5842,48 +6127,48 @@ msgstr ""
"Жалиме, но добивањето на Вашата меÑтоположба трае подолго од очекуваното. "
"Обидете Ñе подоцна."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "С"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "Ј"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "И"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "З"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "во"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "во контекÑÑ‚"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено од"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Одговори на забелешкава"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Одговор"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Забелешката е повторена"
@@ -5915,10 +6200,6 @@ msgstr "Грешка во внеÑувањето на оддалечениот Ð
msgid "Duplicate notice"
msgstr "Дуплирај забелешка"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Блокирани Ñте од претплаќање."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе може да Ñе внеÑе нова претплата."
@@ -5960,7 +6241,7 @@ msgstr "Ознаки во забелешките на %s"
msgid "Unknown"
msgstr "Ðепознато"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Претплати"
@@ -5968,23 +6249,23 @@ msgstr "Претплати"
msgid "All subscriptions"
msgstr "Сите претплати"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Претплатници"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Сите претплатници"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "КориÑнички ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Член од"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Сите групи"
@@ -6024,7 +6305,12 @@ msgstr "Да ја повторам белешкава?"
msgid "Repeat this notice"
msgstr "Повтори ја забелешкава"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Блокирај го овој кориÑник од оваа група"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Ðе е зададен кориÑник за еднокориÑничкиот режим."
@@ -6044,6 +6330,10 @@ msgstr "Пребарај по веб-Ñтраницата"
msgid "Keyword(s)"
msgstr "Клучен збор"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Барај"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Помош Ñо пребарување"
@@ -6095,34 +6385,14 @@ msgstr "Луѓе претплатени на %s"
msgid "Groups %s is a member of"
msgstr "Групи кадешто членува %s"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Веќе претплатено!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "КориÑникот Ве има блокирано."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Претплатата е неуÑпешна."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Ðе можев да прептлатам друг кориÑник на ВаÑ."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ðе Ñте претплатени!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Ðе можам да ја избришам Ñамопретплатата."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Покани"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Претплата не може да Ñе избрише."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Поканете пријатели и колеги да Ви Ñе придружат на %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6174,67 +6444,84 @@ msgstr "Уреди аватар"
msgid "User actions"
msgstr "КориÑнички дејÑтва"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Уреди нагодувања на профилот"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Уреди"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "ИÑпрати му директна порака на кориÑников"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Порака"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Модерирај"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "КориÑнички профил"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "ÐдминиÑтратори"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модерирај"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "пред неколку Ñекунди"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "пред еден чаÑ"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "пред %d чаÑа"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "пред еден меÑец"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "пред %d меÑеца"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "пред една година"
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index ab74ad1dc..305303dea 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Norwegian (bokmål)‬
#
+# Author@translatewiki.net: Laaknor
# Author@translatewiki.net: Nghtwlkr
# --
# This file is distributed under the same license as the StatusNet package.
@@ -8,75 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:26+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:53+0000\n"
"Language-Team: Norwegian (bokmål)‬\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Tilgang"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Innstillinger for nettstedstilgang"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registrering"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privat"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Forhindre anonyme brukere (ikke innlogget) å se nettsted?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Kun invitasjon"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Gjør at registrering kun kan skje gjennom invitasjon."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Lukket"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Kun invitasjon"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Deaktiver nye registreringer."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Lagre"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Lukket"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Lagre tilgangsinnstillinger"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Lagre"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Ingen slik side"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -90,52 +99,59 @@ msgstr "Ingen slik side"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Ingen slik bruker"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s og venner, side %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s og venner"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Mating for venner av %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Mating for venner av %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Mating for venner av %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "Dette er tidslinjen for %s og venner, men ingen har postet noe enda."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -144,7 +160,8 @@ msgstr ""
"Prøv å abbonere på flere personer, [bli med i en gruppe](%%action.groups%%) "
"eller post noe selv."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -154,7 +171,7 @@ msgstr ""
"å få hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -163,12 +180,13 @@ msgstr ""
"Hvorfor ikke [opprette en konto](%%%%action.register%%%%) og så knuff %s "
"eller post en notis for å få hans eller hennes oppmerksomhet."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du og venner"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Oppdateringer fra %1$s og venner på %2$s!"
@@ -181,20 +199,20 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metode ikke funnet!"
@@ -228,8 +246,9 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Brukeren har ingen profil."
@@ -256,7 +275,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -367,68 +386,68 @@ msgstr "Kunne ikke bestemme kildebruker."
msgid "Could not find target user."
msgstr "Kunne ikke finne målbruker."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Kallenavn kan kun ha små bokstaver og tall og ingen mellomrom."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Det nicket er allerede i bruk. Prøv et annet."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ugyldig nick."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Hjemmesiden er ikke en gyldig URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Beklager, navnet er for langt (max 250 tegn)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Beskrivelsen er for lang (maks %d tegn)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
-msgstr ""
+msgstr "Plassering er for lang (maks 255 tegn)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "For mange alias! Maksimum %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ugyldig alias: «%s»"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Aliaset «%s» er allerede i bruk. Prøv et annet."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias kan ikke være det samme som kallenavn."
@@ -439,15 +458,15 @@ msgstr "Alias kan ikke være det samme som kallenavn."
msgid "Group not found!"
msgstr "Gruppe ikke funnet!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Du er allerede medlem av den gruppen."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Du har blitt blokkert fra den gruppen av administratoren."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
@@ -456,7 +475,7 @@ msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
msgid "You are not a member of this group."
msgstr "Du er ikke et medlem av denne gruppen."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s."
@@ -481,14 +500,13 @@ msgid "No oauth_token parameter provided."
msgstr "Ingen verdi for oauth_token er oppgitt."
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Ugyldig størrelse"
+msgstr "Ugyldig symbol."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -497,11 +515,11 @@ msgstr "Ugyldig størrelse"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
-msgstr ""
+msgstr "Det var et problem med din sesjons-autentisering. Prøv igjen."
#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
@@ -509,11 +527,11 @@ msgstr "Ugyldig kallenavn / passord!"
#: actions/apioauthauthorize.php:159
msgid "Database error deleting OAuth application user."
-msgstr ""
+msgstr "Databasefeil ved sletting av bruker fra programmet OAuth."
#: actions/apioauthauthorize.php:185
msgid "Database error inserting OAuth application user."
-msgstr ""
+msgstr "Databasefeil ved innsetting av bruker i programmet OAuth."
#: actions/apioauthauthorize.php:214
#, php-format
@@ -529,16 +547,16 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
-msgstr ""
+msgstr "Uventet skjemainnsending."
#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Et program ønsker å koble til kontoen din"
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
@@ -551,14 +569,17 @@ msgid ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
msgstr ""
+"Programmet <strong>%1$s</strong> av <strong>%2$s</strong> ønsker å kunne "
+"<strong>%3$s</strong> dine %4$s-kontodata. Du bør bare gi tilgang til din %4"
+"$s-konto til tredjeparter du stoler på."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -583,7 +604,7 @@ msgstr "Tillat eller nekt tilgang til din kontoinformasjon."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
-msgstr ""
+msgstr "Denne metoden krever en POST eller DELETE."
#: actions/apistatusesdestroy.php:130
msgid "You may not delete another user's status."
@@ -614,7 +635,7 @@ msgstr "Ingen status med den ID-en funnet."
#: lib/mailhandler.php:60
#, php-format
msgid "That's too long. Max notice size is %d chars."
-msgstr ""
+msgstr "Det er for langt. Maks notisstørrelse er %d tegn."
#: actions/apistatusesupdate.php:202
msgid "Not found"
@@ -623,34 +644,22 @@ msgstr "Ikke funnet"
#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
-msgstr ""
+msgstr "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
msgid "Unsupported format."
-msgstr ""
+msgstr "Formatet støttes ikke."
#: actions/apitimelinefavorites.php:108
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritter fra %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidslinje"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Oppdateringar fra %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -676,17 +685,17 @@ msgstr "%s oppdateringer fra alle sammen!"
msgid "Repeated to %s"
msgstr "Gjentatt til %s"
-#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#: actions/apitimelineretweetsofme.php:114
+#, php-format
msgid "Repeats of %s"
-msgstr "Svar til %s"
+msgstr "Repetisjoner av %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notiser merket med %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringer merket med %1$s på %2$s!"
@@ -702,8 +711,7 @@ msgstr "Ingen slike vedlegg."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ingen kallenavn."
@@ -715,7 +723,7 @@ msgstr "Ingen størrelse."
msgid "Invalid size."
msgstr "Ugyldig størrelse"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Brukerbilde"
@@ -723,50 +731,49 @@ msgstr "Brukerbilde"
#: actions/avatarsettings.php:78
#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
+msgstr "Du kan laste opp en personlig avatar. Maks filstørrelse er %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
#: actions/userrss.php:103
msgid "User without matching profile"
-msgstr ""
+msgstr "Bruker uten samsvarende profil"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
-#, fuzzy
+#: actions/grouplogo.php:254
msgid "Avatar settings"
-msgstr "Innstillinger for IM"
+msgstr "Avatarinnstillinger"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Forhåndsvis"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Slett"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Last opp"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Beskjær"
#: actions/avatarsettings.php:328
msgid "Pick a square area of the image to be your avatar"
-msgstr ""
+msgstr "Velg et kvadratisk utsnitt av bildet som din avatar."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
-msgstr ""
+msgstr "Mistet våre fildata."
#: actions/avatarsettings.php:366
msgid "Avatar updated."
@@ -774,12 +781,11 @@ msgstr "Brukerbildet har blitt oppdatert."
#: actions/avatarsettings.php:369
msgid "Failed updating avatar."
-msgstr ""
+msgstr "Oppdatering av avatar mislyktes."
#: actions/avatarsettings.php:393
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Brukerbildet har blitt oppdatert."
+msgstr "Avatar slettet."
#: actions/block.php:69
msgid "You already blocked that user."
@@ -795,74 +801,81 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"Er du sikker på at du vil blokkere denne brukeren? Etter dette vil de ikke "
+"lenger abbonere på deg, vil ikke kunne abbonere på deg i fremtiden og du vil "
+"ikke bli varslet om @-svar fra dem."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nei"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Ikke blokker denne brukeren"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blokker denne brukeren"
#: actions/block.php:167
msgid "Failed to save block information."
-msgstr ""
-
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+msgstr "Kunne ikke lagre blokkeringsinformasjon."
+
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Ingen slik gruppe."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s blokkerte profiler"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s blokkerte profiler, side %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
-msgstr ""
+msgstr "En liste over brukere som er blokkert fra å delta i denne gruppen."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
-msgstr ""
+msgstr "Opphev blokkering av bruker fra gruppe"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
-msgstr ""
+msgstr "Opphev blokkering"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
-msgstr ""
+msgstr "Opphev blokkering av denne brukeren"
#: actions/bookmarklet.php:50
msgid "Post to "
-msgstr ""
+msgstr "Post til "
#: actions/confirmaddress.php:75
msgid "No confirmation code."
-msgstr ""
+msgstr "Ingen bekreftelseskode."
#: actions/confirmaddress.php:80
msgid "Confirmation code not found."
@@ -870,16 +883,16 @@ msgstr "Fant ikke bekreftelseskode."
#: actions/confirmaddress.php:85
msgid "That confirmation code is not for you!"
-msgstr ""
+msgstr "Den bekreftelseskoden er ikke til deg."
#: actions/confirmaddress.php:90
#, php-format
msgid "Unrecognized address type %s"
-msgstr ""
+msgstr "Ukjent adressetype %s"
#: actions/confirmaddress.php:94
msgid "That address has already been confirmed."
-msgstr ""
+msgstr "Den adressen har allerede blitt bekreftet."
#: actions/confirmaddress.php:114 actions/emailsettings.php:296
#: actions/emailsettings.php:427 actions/imsettings.php:258
@@ -892,7 +905,7 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/confirmaddress.php:126 actions/emailsettings.php:391
#: actions/imsettings.php:363 actions/smssettings.php:382
msgid "Couldn't delete email confirmation."
-msgstr ""
+msgstr "Kunne ikke slette e-postbekreftelse."
#: actions/confirmaddress.php:144
msgid "Confirm address"
@@ -901,43 +914,39 @@ msgstr "Bekreft adresse"
#: actions/confirmaddress.php:159
#, php-format
msgid "The address \"%s\" has been confirmed for your account."
-msgstr ""
+msgstr "Adressen «%s» har blitt bekreftet for din konto."
#: actions/conversation.php:99
msgid "Conversation"
msgstr "Samtale"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
-msgstr ""
+msgstr "Notiser"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Gjør brukeren til en administrator for gruppen"
+msgstr "Du må være innlogget for å slette et program."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Fant ikke bekreftelseskode."
+msgstr "Program ikke funnet."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
-#, fuzzy
msgid "You are not the owner of this application."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er ikke eieren av dette programmet."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "Ingen slik side"
+msgstr "Slett program"
#: actions/deleteapplication.php:149
msgid ""
@@ -945,23 +954,25 @@ msgid ""
"about the application from the database, including all existing user "
"connections."
msgstr ""
+"Er du sikker på at du vil slette dette programmet? Dette vil slette alle "
+"data om programmet fra databasen, inkludert alle eksisterende "
+"brukertilkoblinger."
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "Kan ikke slette notisen."
+msgstr "Ikke slett dette programmet"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Beskriv degselv og dine interesser med 140 tegn"
+msgstr "Slett dette programmet"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ikke logget inn."
@@ -975,6 +986,8 @@ msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
msgstr ""
+"Du er i ferd med å slette en notis permanent. Når dette er gjort kan det "
+"ikke gjøres om."
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
@@ -988,7 +1001,7 @@ msgstr "Er du sikker på at du vil slette denne notisen?"
msgid "Do not delete this notice"
msgstr "Ikke slett denne notisen"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Slett denne notisen"
@@ -1004,18 +1017,20 @@ msgstr "Du kan bare slette lokale brukere."
msgid "Delete user"
msgstr "Slett bruker"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
+"Er du sikker på at du vil slette denne brukeren? Dette vil slette alle data "
+"om brukeren fra databasen, uten sikkerhetskopi."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Slett denne brukeren"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1024,14 +1039,13 @@ msgid "Design settings for this StatusNet site."
msgstr ""
#: actions/designadminpanel.php:275
-#, fuzzy
msgid "Invalid logo URL."
-msgstr "Ugyldig størrelse"
+msgstr "Ugyldig logo-URL."
#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
-msgstr ""
+msgstr "Tema ikke tilgjengelig: %s"
#: actions/designadminpanel.php:375
msgid "Change logo"
@@ -1042,18 +1056,16 @@ msgid "Site logo"
msgstr "Nettstedslogo"
#: actions/designadminpanel.php:387
-#, fuzzy
msgid "Change theme"
-msgstr "Endre"
+msgstr "Endre tema"
#: actions/designadminpanel.php:404
-#, fuzzy
msgid "Site theme"
-msgstr "Endre"
+msgstr "Nettstedstema"
#: actions/designadminpanel.php:405
msgid "Theme for the site."
-msgstr ""
+msgstr "Tema for nettstedet."
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
@@ -1070,6 +1082,7 @@ msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
+"Du kan laste opp et bakgrunnsbilde for nettstedet. Maks filstørrelse er %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -1118,7 +1131,19 @@ msgstr ""
#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
-msgstr ""
+msgstr "Tilbakestill til standardverdier"
+
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Lagre"
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
@@ -1126,7 +1151,7 @@ msgstr ""
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
-msgstr ""
+msgstr "Denne notisen er ikke en favoritt!"
#: actions/disfavor.php:94
msgid "Add to favorites"
@@ -1135,27 +1160,24 @@ msgstr "Legg til i favoritter"
#: actions/doc.php:158
#, php-format
msgid "No such document \"%s\""
-msgstr ""
+msgstr "Inget slikt dokument «%s»"
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
-msgstr "Ingen slik side"
+msgstr "Rediger program"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Gjør brukeren til en administrator for gruppen"
+msgstr "Du må være innlogget for å redigere et program."
#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Ingen slik side"
+msgstr "Inget slikt program."
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
-msgstr ""
+msgstr "Bruk dette skjemaet for å redigere programmet ditt."
#: actions/editapplication.php:177 actions/newapplication.php:159
msgid "Name is required."
@@ -1209,48 +1231,46 @@ msgstr "Klarte ikke å oppdatere bruker."
#: actions/editgroup.php:56
#, php-format
msgid "Edit %s group"
-msgstr ""
+msgstr "Rediger %s gruppe"
#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
msgid "You must be logged in to create a group."
msgstr "Du må være innlogget for å opprette en gruppe."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
-#, fuzzy
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
-msgstr "Gjør brukeren til en administrator for gruppen"
+msgstr "Du må være en administrator for å redigere gruppen."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
-msgstr ""
+msgstr "Bruk dette skjemaet for å redigere gruppen."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "beskrivelse er for lang (maks %d tegn)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Kunne ikke oppdatere gruppe."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Kunne ikke opprette alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
-msgstr ""
+msgstr "Lagret valg."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
-msgstr "Innstillinger for e-post"
+msgstr "E-postinnstillinger"
#: actions/emailsettings.php:71
#, php-format
msgid "Manage how you get email from %%site.name%%."
-msgstr ""
+msgstr "Velg hvordan du mottar e-post fra %%site.name%%."
#: actions/emailsettings.php:100 actions/imsettings.php:100
#: actions/smssettings.php:104
@@ -1313,7 +1333,7 @@ msgstr "Ny"
#: actions/emailsettings.php:153 actions/imsettings.php:139
#: actions/smssettings.php:169
msgid "Preferences"
-msgstr ""
+msgstr "Innstillinger"
#: actions/emailsettings.php:158
msgid "Send me notices of new subscriptions through email."
@@ -1346,7 +1366,7 @@ msgstr "Publiser en MicroID for min e-postadresse."
#: actions/emailsettings.php:302 actions/imsettings.php:264
#: actions/othersettings.php:180 actions/smssettings.php:284
msgid "Preferences saved."
-msgstr ""
+msgstr "Innstillinger lagret."
#: actions/emailsettings.php:320
msgid "No email address."
@@ -1357,7 +1377,7 @@ msgid "Cannot normalize that email address"
msgstr "Klarer ikke normalisere epostadressen"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ugyldig e-postadresse."
@@ -1403,7 +1423,7 @@ msgstr "Det er ikke din e-postadresse."
#: actions/emailsettings.php:432 actions/imsettings.php:408
#: actions/smssettings.php:425
msgid "The address was removed."
-msgstr ""
+msgstr "Adressen ble fjernet."
#: actions/emailsettings.php:446 actions/smssettings.php:518
msgid "No incoming email address."
@@ -1433,12 +1453,12 @@ msgstr ""
#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr ""
+msgstr "Populære notiser"
#: actions/favorited.php:67
#, php-format
msgid "Popular notices, page %d"
-msgstr ""
+msgstr "Populære notiser, side %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
@@ -1499,11 +1519,11 @@ msgstr "Nytt nick"
#: actions/file.php:42
msgid "No attachments."
-msgstr ""
+msgstr "Ingen vedlegg."
#: actions/file.php:51
msgid "No uploaded attachments."
-msgstr ""
+msgstr "Ingen opplastede vedlegg."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1522,9 +1542,8 @@ msgid "That user has blocked you from subscribing."
msgstr ""
#: actions/finishremotesubscribe.php:110
-#, fuzzy
msgid "You are not authorized."
-msgstr "Ikke autorisert."
+msgstr "Du er ikke autorisert."
#: actions/finishremotesubscribe.php:113
msgid "Could not convert request token to access token."
@@ -1546,6 +1565,25 @@ msgstr "Ingen slik fil."
msgid "Cannot read file."
msgstr "Kan ikke lese fil."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ugyldig symbol."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du er allerede logget inn!"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Du er allerede logget inn!"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1576,7 +1614,7 @@ msgstr "Du er allerede logget inn!"
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1608,93 +1646,99 @@ msgstr "Ingen ID."
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Klarte ikke å oppdatere bruker."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Gruppelogo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Brukeren har ingen profil."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo oppdatert."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
-msgstr ""
+msgstr "Kunne ikke oppdatere logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s gruppemedlemmer"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
-msgstr ""
+msgstr "%1$s gruppemedlemmer, side %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "En liste over brukerne i denne gruppen."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Gjør brukeren til en administrator for gruppen"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Gjør til administrator"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Gjør denne brukeren til administrator"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidslinje"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Oppdateringer fra medlemmer av %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -1702,7 +1746,7 @@ msgstr "Grupper"
#: actions/groups.php:64
#, php-format
msgid "Groups, page %d"
-msgstr ""
+msgstr "Grupper, side %d"
#: actions/groups.php:90
#, php-format
@@ -1758,7 +1802,7 @@ msgstr ""
#: actions/groupunblock.php:128 actions/unblock.php:86
msgid "Error removing the block."
-msgstr ""
+msgstr "Feil under oppheving av blokkering."
#: actions/imsettings.php:59
#, fuzzy
@@ -1902,7 +1946,7 @@ msgstr ""
#: actions/invite.php:144
msgid "Invitation(s) sent to the following people:"
-msgstr ""
+msgstr "Invitasjon(er) sendt til følgende personer:"
#: actions/invite.php:150
msgid ""
@@ -1931,16 +1975,19 @@ msgstr "Personlig melding"
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Send"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s har invitert deg til %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1996,7 +2043,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Du må være innlogget for å bli med i en gruppe."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Ingen kallenavn."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2005,11 +2057,11 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr ""
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s forlot gruppe %2$s"
@@ -2027,8 +2079,7 @@ msgstr "Feil brukernavn eller passord"
msgid "Error setting user. You are probably not authorized."
msgstr "Ikke autorisert."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logg inn"
@@ -2271,8 +2322,8 @@ msgstr "innholdstype "
msgid "Only "
msgstr "Bare "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2415,7 +2466,8 @@ msgstr "Klarer ikke å lagre nytt passord."
msgid "Password saved."
msgstr "Passordet ble lagret"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2448,7 +2500,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2540,7 +2591,7 @@ msgstr ""
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Aldri"
@@ -2594,11 +2645,11 @@ msgstr "Ugyldig e-postadresse"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Mikroblogg av %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2621,7 +2672,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 små bokstaver eller nummer, ingen punktum eller mellomrom"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Fullt navn"
@@ -2650,7 +2701,7 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2675,7 +2726,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2702,7 +2753,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "«Om meg» er for lang (maks %d tegn)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidssone ikke valgt."
@@ -2715,25 +2766,26 @@ msgstr "Språk er for langt (maks 50 tegn)."
msgid "Invalid tag: \"%s\""
msgstr "Ugyldig hjemmeside '%s'"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Klarte ikke å lagre profil."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Klarte ikke å lagre profil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "Klarte ikke å lagre profil."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr ""
@@ -2746,46 +2798,46 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr ""
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "%s offentlig strøm"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2794,7 +2846,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2965,8 +3017,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -3006,7 +3057,7 @@ msgid "Same as password above. Required."
msgstr "Samme som passord over. Kreves."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -3108,7 +3159,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3146,7 +3197,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Du er allerede logget inn!"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Gjentatt"
@@ -3154,47 +3205,47 @@ msgstr "Gjentatt"
msgid "Repeated!"
msgstr "Gjentatt!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Svar til %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Svar til %1$s, side %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Svarstrøm for %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Svarstrøm for %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Svarstrøm for %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr "Dette er tidslinjen for %s og venner, men ingen har postet noe enda."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, fuzzy, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3209,6 +3260,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Svar til %1$s på %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du er allerede logget inn!"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Brukeren har ingen profil."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3223,8 +3284,9 @@ msgstr "Du er allerede logget inn!"
msgid "User is already sandboxed."
msgstr "Du er allerede logget inn!"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3248,8 +3310,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Innstillinger for IM"
@@ -3280,8 +3342,8 @@ msgstr "Organisasjon"
msgid "Description"
msgstr "Beskrivelse"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3342,35 +3404,35 @@ msgstr "%s og venner"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Feed for %s sine venner"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Feed for %s sine venner"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Feed for %s sine venner"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3378,7 +3440,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3392,70 +3454,70 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Alle abonnementer"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Klarte ikke å lagre profil."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Klarte ikke å lagre profil."
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Medlem siden"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Opprett"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3465,7 +3527,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3474,7 +3536,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3588,146 +3650,135 @@ msgid "User is already silenced."
msgstr "Du er allerede logget inn!"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ugyldig e-postadresse"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
+msgstr "Foretrukket språk"
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Notiser"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Kunne ikke lagre dine innstillinger for utseende."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Slett notis"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Innstillinger for IM"
#: actions/smssettings.php:58
#, fuzzy
@@ -3826,21 +3877,89 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Innstillinger for IM"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "Ugyldig OpenID"
+msgid "No such profile."
+msgstr "Ingen slik fil."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr ""
@@ -3900,7 +4019,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3910,36 +4029,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s lytter nå til dine notiser på %2$s."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "Ingen Jabber ID."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Mikroblogg av %s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Feed for taggen %s"
@@ -3992,7 +4111,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-metode under utvikling."
@@ -4017,81 +4136,82 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "slett"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Alle abonnementer"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Abonner automatisk på de som abonnerer på meg (best for ikke-mennesker)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Bekreftelseskode"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4213,16 +4333,22 @@ msgstr "Alle abonnementer"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Du er allerede logget inn!"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Oppdateringar fra %1$s på %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4266,7 +4392,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personlig"
@@ -4307,6 +4433,11 @@ msgstr "Klarte ikke å oppdatere bruker."
msgid "Group leave failed."
msgstr "Klarte ikke å lagre profil."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Kunne ikke oppdatere gruppe."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4324,67 +4455,103 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:848
+#: classes/Notice.php:1459
#, php-format
-msgid "DB error inserting reply: %s"
+msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/Notice.php:1235
-#, php-format
-msgid "RT @%1$s %2$s"
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Alle abonnementer"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr ""
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Klarte ikke å lagre avatar-informasjonen"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Endre profilinnstillingene dine"
@@ -4423,126 +4590,185 @@ msgstr "%1$s sin status på %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Hjem"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personlig"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "Endre passordet ditt"
-#: lib/action.php:444
-msgid "Connect"
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
msgstr "Koble til"
-#: lib/action.php:444
-msgid "Connect to services"
-msgstr ""
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Koble til"
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Logg ut"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Kun invitasjon"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr ""
+msgstr "Tema for nettstedet."
-#: lib/action.php:463
+#: lib/action.php:465
#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logg ut"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Opprett en ny konto"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrering"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr ""
+msgstr "Tema for nettstedet."
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hjelp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logg inn"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjelp"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Søk"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjelp"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Søk"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjelp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS/FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Kilde"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4551,12 +4777,12 @@ msgstr ""
"**%%site.name%%** er en mikrobloggingtjeneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er en mikrobloggingtjeneste. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4564,94 +4790,147 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Tidligere »"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Nettstedslogo"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Personlig"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr ""
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr ""
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr ""
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Slett notis"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr ""
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4747,12 +5026,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Passordet ble lagret"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Passordet ble lagret"
@@ -4904,83 +5183,93 @@ msgstr ""
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Ingen slik bruker"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Svar til %s"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Ikke autorisert."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ikke autorisert."
msgstr[1] "Ikke autorisert."
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Svar til %s"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Svar til %s"
msgstr[1] "Svar til %s"
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er allerede logget inn!"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du er allerede logget inn!"
msgstr[1] "Du er allerede logget inn!"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4994,6 +5283,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5021,20 +5311,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Fant ikke bekreftelseskode."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5135,6 +5425,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5227,24 +5522,24 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "Klarte ikke å lagre profil."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5458,7 +5753,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr "fra"
@@ -5550,6 +5845,12 @@ msgstr ""
msgid "Available characters"
msgstr "6 eller flere tegn"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Send"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr ""
@@ -5583,50 +5884,50 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Opprett"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "svar"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Nytt nick"
@@ -5659,10 +5960,6 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5704,7 +6001,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5712,24 +6009,24 @@ msgstr ""
msgid "All subscriptions"
msgstr "Alle abonnementer"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Alle abonnementer"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem siden"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5773,7 +6070,12 @@ msgstr "Kan ikke slette notisen."
msgid "Repeat this notice"
msgstr "Kan ikke slette notisen."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5795,6 +6097,10 @@ msgstr "Søk"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Søk"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5848,34 +6154,13 @@ msgstr "Svar til %s"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr ""
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr ""
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Alle abonnementer"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
#: lib/subscriberspeopleselftagcloudsection.php:48
@@ -5931,68 +6216,83 @@ msgstr "Brukerbilde"
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Endre profilinnstillingene dine"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr ""
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Klarte ikke å lagre profil."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "noen få sekunder siden"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent ett år siden"
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index b1a54d06a..1f2a54970 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -10,75 +10,81 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:32+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:59+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Toegang"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Instellingen voor sitetoegang"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registratie"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privé"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Mogen anonieme gebruikers (niet aangemeld) de website bekijken?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Alleen op uitnodiging"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Geen anonieme toegang"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Registratie alleen op uitnodiging."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Gesloten"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Alleen op uitnodiging"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Nieuwe registraties uitschakelen."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Opslaan"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Gesloten"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Toegangsinstellingen opslaan"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Opslaan"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Deze pagina bestaat niet"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -92,46 +98,53 @@ msgstr "Deze pagina bestaat niet"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Onbekende gebruiker."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s en vrienden, pagina %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s en vrienden"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Feed voor vrienden van %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Feed voor vrienden van %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Feed voor vrienden van %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -139,7 +152,7 @@ msgstr ""
"Dit is de tijdlijn voor %s en vrienden, maar niemand heeft nog mededelingen "
"geplaatst."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -148,7 +161,8 @@ msgstr ""
"Probeer te abonneren op meer gebruikers, [word lid van een groep](%%action."
"groups%%) of plaats zelf berichten."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -158,7 +172,7 @@ msgstr ""
"bericht voor die gebruiker plaatsen](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -167,12 +181,13 @@ msgstr ""
"U kunt een [gebruiker aanmaken](%%%%action.register%%%%) en %s dan porren of "
"een bericht sturen."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "U en vrienden"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Updates van %1$s en vrienden op %2$s."
@@ -185,20 +200,20 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "De API-functie is niet aangetroffen."
@@ -232,8 +247,9 @@ msgstr "Het was niet mogelijk de gebruiker bij te werken."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Deze gebruiker heeft geen profiel."
@@ -259,7 +275,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -374,7 +390,7 @@ msgstr "Het was niet mogelijk de brongebruiker te bepalen."
msgid "Could not find target user."
msgstr "Het was niet mogelijk de doelgebruiker te vinden."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -382,63 +398,63 @@ msgstr ""
"De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
"zijn niet toegestaan."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr ""
"De opgegeven gebruikersnaam is al in gebruik. Kies een andere gebruikersnaam."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ongeldige gebruikersnaam!"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "De thuispagina is geen geldige URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "De volledige naam is te lang (maximaal 255 tekens)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "De beschrijving is te lang (maximaal %d tekens)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Locatie is te lang (maximaal 255 tekens)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Te veel aliassen! Het maximale aantal is %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ongeldige alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "De alias \"%s\" wordt al gebruikt. Geef een andere alias op."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Een alias kan niet hetzelfde zijn als de gebruikersnaam."
@@ -449,15 +465,15 @@ msgstr "Een alias kan niet hetzelfde zijn als de gebruikersnaam."
msgid "Group not found!"
msgstr "De groep is niet aangetroffen!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "U bent al lid van die groep."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Een beheerder heeft ingesteld dat u geen lid mag worden van die groep."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Het was niet mogelijk gebruiker %1$s toe te voegen aan de groep %2$s."
@@ -466,7 +482,7 @@ msgstr "Het was niet mogelijk gebruiker %1$s toe te voegen aan de groep %2$s."
msgid "You are not a member of this group."
msgstr "U bent geen lid van deze groep."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Het was niet mogelijk gebruiker %1$s uit de group %2$s te verwijderen."
@@ -497,7 +513,7 @@ msgstr "Ongeldig token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -506,7 +522,7 @@ msgstr "Ongeldig token."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -546,7 +562,7 @@ msgstr "Het verzoektoken %s is geweigerd en ingetrokken."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -572,13 +588,13 @@ msgstr ""
"van het type \"<strong>%3$s</strong> tot uw gebruikersgegevens. Geef alleen "
"toegang tot uw gebruiker bij %4$s aan derde partijen die u vertrouwt."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Gebruiker"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -656,23 +672,11 @@ msgstr "Niet-ondersteund bestandsformaat."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favorieten van %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tijdlijn"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Updates van %1$s op %2$s."
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -698,17 +702,17 @@ msgstr "%s updates van iedereen"
msgid "Repeated to %s"
msgstr "Herhaald naar %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Herhaald van %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Mededelingen met het label %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates met het label %1$s op %2$s!"
@@ -724,8 +728,7 @@ msgstr "Deze bijlage bestaat niet."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Geen gebruikersnaam."
@@ -737,7 +740,7 @@ msgstr "Geen afmeting."
msgid "Invalid size."
msgstr "Ongeldige afmetingen."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -755,30 +758,30 @@ msgid "User without matching profile"
msgstr "Gebruiker zonder bijbehorend profiel"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Avatarinstellingen"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Origineel"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Voorvertoning"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Verwijderen"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Uploaden"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Uitsnijden"
@@ -787,7 +790,7 @@ msgid "Pick a square area of the image to be your avatar"
msgstr ""
"Selecteer een vierkant in de afbeelding om deze als uw avatar in te stellen"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Ons bestand is verloren gegaan."
@@ -822,22 +825,22 @@ msgstr ""
"van deze gebruiker."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nee"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Gebruiker niet blokkeren"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Deze gebruiker blokkeren"
@@ -845,39 +848,43 @@ msgstr "Deze gebruiker blokkeren"
msgid "Failed to save block information."
msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "De opgegeven groep bestaat niet."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s geblokkeerde profielen"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s geblokkeerde profielen, pagina %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Een lijst met voor deze groep geblokkeerde gebruikers."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Deze gebruiker weer toegang geven tot de groep"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Deblokkeer"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Deblokkeer deze gebruiker."
@@ -933,7 +940,7 @@ msgid "Conversation"
msgstr "Dialoog"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Mededelingen"
@@ -952,7 +959,7 @@ msgstr "U bent niet de eigenaar van deze applicatie."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Er is een probleem met uw sessietoken."
@@ -978,12 +985,13 @@ msgstr "Deze applicatie niet verwijderen"
msgid "Delete this application"
msgstr "Deze applicatie verwijderen"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Niet aangemeld."
@@ -1012,7 +1020,7 @@ msgstr "Weet u zeker dat u deze aankondiging wilt verwijderen?"
msgid "Do not delete this notice"
msgstr "Deze mededeling niet verwijderen"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Deze mededeling verwijderen"
@@ -1028,7 +1036,7 @@ msgstr "U kunt alleen lokale gebruikers verwijderen."
msgid "Delete user"
msgstr "Gebruiker verwijderen"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1037,12 +1045,12 @@ msgstr ""
"worden alle gegevens van deze gebruiker uit de database verwijderd. Het is "
"niet mogelijk ze terug te zetten."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Gebruiker verwijderen"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Uiterlijk"
@@ -1145,6 +1153,18 @@ msgstr "Standaardontwerp toepassen"
msgid "Reset back to default"
msgstr "Standaardinstellingen toepassen"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Opslaan"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Ontwerp opslaan"
@@ -1236,29 +1256,29 @@ msgstr "Groep %s bewerken"
msgid "You must be logged in to create a group."
msgstr "U moet aangemeld zijn om een groep aan te kunnen maken."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "U moet beheerder zijn om de groep te kunnen bewerken."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Gebruik dit formulier om de groep te bewerken."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "de beschrijving is te lang (maximaal %d tekens)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Het was niet mogelijk de groep bij te werken."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Het was niet mogelijk de aliassen aan te maken."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "De instellingen zijn opgeslagen."
@@ -1378,7 +1398,7 @@ msgid "Cannot normalize that email address"
msgstr "Kan het emailadres niet normaliseren"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geen geldig e-mailadres."
@@ -1576,6 +1596,25 @@ msgstr "Het bestand bestaat niet."
msgid "Cannot read file."
msgstr "Het bestand kon niet gelezen worden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ongeldig token."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Op deze website kunt u gebruikers niet in de zandbak plaatsen."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Deze gebruiker is al gemuilkorfd."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1605,7 +1644,7 @@ msgstr "Deze gebruiker is al de toegang tot de groep ontzegd."
msgid "User is not a member of group."
msgstr "De gebruiker is geen lid van de groep."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Gebruiker toegang tot de groep blokkeren"
@@ -1642,11 +1681,11 @@ msgstr "Geen ID."
msgid "You must be logged in to edit a group."
msgstr "U moet aangemeld zijn om een groep te kunnen bewerken."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Groepsontwerp"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1654,20 +1693,20 @@ msgstr ""
"De vormgeving van uw groep aanpassen met een achtergrondafbeelding en een "
"kleurenpalet van uw keuze."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Het was niet mogelijk uw ontwerp bij te werken."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "De ontwerpvoorkeuren zijn opgeslagen."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Groepslogo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1675,62 +1714,68 @@ msgstr ""
"Hier kunt u een logo voor uw groep uploaden. De maximale bestandsgrootte is %"
"s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Gebruiker zonder bijbehorend profiel."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Selecteer een vierkant uit de afbeelding die het logo wordt."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo geactualiseerd."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Het bijwerken van het logo is mislukt."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "leden van de groep %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s groeps leden, pagina %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Ledenlijst van deze groep"
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Beheerder"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkeren"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Deze gebruiker groepsbeheerder maken"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Beheerder maken"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Deze gebruiker beheerder maken"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tijdlijn"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Updates voor leden van %1$s op %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groepen"
@@ -1993,16 +2038,18 @@ msgstr "Persoonlijk bericht"
msgid "Optionally add a personal message to the invitation."
msgstr "Persoonlijk bericht bij de uitnodiging (optioneel)."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr "Verzenden"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s heeft u uitgenodigd voor %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2063,7 +2110,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "U moet aangemeld zijn om lid te worden van een groep."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Geen gebruikersnaam of ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s is lid geworden van de groep %2$s"
@@ -2072,11 +2123,11 @@ msgstr "%1$s is lid geworden van de groep %2$s"
msgid "You must be logged in to leave a group."
msgstr "U moet aangemeld zijn om een groep te kunnen verlaten."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "U bent geen lid van deze groep"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s heeft de groep %2$s verlaten"
@@ -2095,8 +2146,7 @@ msgstr ""
"Er is een fout opgetreden bij het maken van de instellingen. U hebt "
"waarschijnlijk niet de juiste rechten."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Aanmelden"
@@ -2354,8 +2404,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Geen ondersteund gegevensformaat."
@@ -2494,7 +2544,8 @@ msgstr "Het was niet mogelijk het nieuwe wachtwoord op te slaan."
msgid "Password saved."
msgstr "Het wachtwoord is opgeslagen."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Paden"
@@ -2527,7 +2578,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "De SSL-server is ongeldig. De maximale lengte is 255 tekens."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Website"
@@ -2615,7 +2665,7 @@ msgstr "Achtergrondenmap"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nooit"
@@ -2671,11 +2721,11 @@ msgstr "Geen geldig gebruikerslabel: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Gebruikers die zichzelf met %1$s hebben gelabeld - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ongeldige mededelinginhoud"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2702,7 +2752,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Volledige naam"
@@ -2730,7 +2780,7 @@ msgid "Bio"
msgstr "Beschrijving"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2757,7 +2807,7 @@ msgstr ""
"Eigen labels (letter, getallen, -, ., en _). Gescheiden door komma's of "
"spaties"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Taal"
@@ -2785,7 +2835,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "De beschrijving is te lang (maximaal %d tekens)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Er is geen tijdzone geselecteerd."
@@ -2798,25 +2848,26 @@ msgstr "Taal is te lang (max 50 tekens)."
msgid "Invalid tag: \"%s\""
msgstr "Ongeldig label: '%s'"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
"Het was niet mogelijk de instelling voor automatisch abonneren voor de "
"gebruiker bij te werken."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Het was niet mogelijk de locatievoorkeuren op te slaan."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Het profiel kon niet opgeslagen worden."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Het was niet mogelijk de labels op te slaan."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "De instellingen zijn opgeslagen."
@@ -2829,28 +2880,28 @@ msgstr "Meer dan de paginalimiet (%s)"
msgid "Could not retrieve public stream."
msgstr "Het was niet mogelijk de publieke stream op te halen."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Openbare tijdlijn, pagina %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Openbare tijdlijn"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Publieke streamfeed (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Publieke streamfeed (RSS 1.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Publieke streamfeed (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2859,11 +2910,11 @@ msgstr ""
"Dit is de publieke tijdlijn voor %%site.name%%, maar niemand heeft nog "
"berichten geplaatst."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "U kunt de eerste zijn die een bericht plaatst!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2871,7 +2922,7 @@ msgstr ""
"Waarom [registreert u geen gebruiker](%%action.register%%) en plaatst u als "
"eerste een bericht?"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2884,7 +2935,7 @@ msgstr ""
"net/). [Registreer nu](%%action.register%%) om mededelingen over uzelf te "
"delen met vrienden, familie en collega's! [Meer lezen...](%%doc.help%%)"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3068,8 +3119,7 @@ msgstr "Sorry. De uitnodigingscode is ongeldig."
msgid "Registration successful"
msgstr "De registratie is voltooid"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registreren"
@@ -3110,7 +3160,7 @@ msgid "Same as password above. Required."
msgstr "Gelijk aan het wachtwoord hierboven. Verplicht"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3217,7 +3267,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "De URL van uw profiel bij een andere, compatibele microblogdienst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonneren"
@@ -3255,7 +3305,7 @@ msgstr "U kunt uw eigen mededeling niet herhalen."
msgid "You already repeated that notice."
msgstr "U hent die mededeling al herhaald."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Herhaald"
@@ -3263,33 +3313,33 @@ msgstr "Herhaald"
msgid "Repeated!"
msgstr "Herhaald!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Antwoorden aan %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Antwoorden aan %1$s, pagina %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Antwoordenfeed voor %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Antwoordenfeed voor %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Antwoordenfeed voor %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3298,7 +3348,7 @@ msgstr ""
"Dit is de tijdlijn met de antwoorden aan %1$s, maar %2$s heeft nog geen "
"antwoorden ontvangen."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3307,7 +3357,7 @@ msgstr ""
"U kunt gesprekken aanknopen met andere gebruikers, op meer gebruikers "
"abonneren of [lid worden van groepen](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3321,6 +3371,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Antwoorden aan %1$s op %2$s."
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "U kunt gebruikers op deze website niet muilkorven."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Gebruiker zonder bijbehorend profiel."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3333,8 +3393,9 @@ msgstr "Op deze website kunt u gebruikers niet in de zandbak plaatsen."
msgid "User is already sandboxed."
msgstr "Deze gebruiker is al in de zandbak geplaatst."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessies"
@@ -3358,8 +3419,8 @@ msgstr "Sessies debuggen"
msgid "Turn on debugging output for sessions."
msgstr "Debuguitvoer voor sessies inschakelen."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Websiteinstellingen opslaan"
@@ -3389,8 +3450,8 @@ msgstr "Organisatie"
msgid "Description"
msgstr "Beschrijving"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistieken"
@@ -3453,22 +3514,22 @@ msgstr "Favoriete mededelingen van %1$s, pagina %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Het was niet mogelijk de favoriete mededelingen op te halen."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Favorietenfeed van %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Favorietenfeed van %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Favorietenfeed van %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3477,7 +3538,7 @@ msgstr ""
"toevoegen\" bij mededelingen die u aanstaan om ze op een lijst te bewaren en "
"ze uit te lichten."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3487,7 +3548,7 @@ msgstr ""
"een interessant bericht, en dan komt u misschien wel op de "
"favorietenlijst. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3498,7 +3559,7 @@ msgstr ""
"action.register%%%%) en dan interessante mededelingen plaatsten die "
"misschien aan favorietenlijsten zijn toe te voegen. :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Dit is de manier om dat te delen wat u wilt."
@@ -3512,67 +3573,67 @@ msgstr "%s groep"
msgid "%1$s group, page %2$d"
msgstr "Groep %1$s, pagina %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Groepsprofiel"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Opmerking"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliassen"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Groepshandelingen"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Mededelingenfeed voor groep %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Vriend van een vriend voor de groep %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Leden"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(geen)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle leden"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Aangemaakt"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3588,7 +3649,7 @@ msgstr ""
"lid te worden van deze groep en nog veel meer! [Meer lezen...](%%%%doc.help%%"
"%%)"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3601,7 +3662,7 @@ msgstr ""
"[StatusNet](http://status.net/). De leden wisselen korte mededelingen uit "
"over hun ervaringen en interesses. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Beheerders"
@@ -3724,154 +3785,144 @@ msgid "User is already silenced."
msgstr "Deze gebruiker is al gemuilkorfd."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Basisinstellingen voor deze StatusNet-website."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "De sitenaam moet ingevoerd worden en mag niet leeg zijn."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
"U moet een geldig e-mailadres opgeven waarop contact opgenomen kan worden."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "De taal \"%s\" is niet bekend."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "De rapportage-URL voor snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "De waarde voor het uitvoeren van snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "De snapshotfrequentie moet een getal zijn."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "De minimale tekstlimiet is 140 tekens."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "De duplicaatlimiet moet één of meer seconden zijn."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Algemeen"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Websitenaam"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "De naam van de website, zoals \"UwBedrijf Microblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Mogelijk gemaakt door"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"De tekst die gebruikt worden in de \"creditsverwijzing\" in de voettekst van "
"iedere pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "\"Mogelijk gemaakt door\"-URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL die wordt gebruikt voor de verwijzing naar de hoster en dergelijke in de "
"voettekst van iedere pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "E-mailadres om contact op te nemen met de websitebeheerder"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokaal"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standaardtijdzone"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standaardtijdzone voor de website. Meestal UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Standaardtaal"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Snapshots"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Willekeurig tijdens een websitehit"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Als geplande taak"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Snapshots van gegevens"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Wanneer statistische gegevens naar de status.net-servers verzonden worden"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentie"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Iedere zoveel websitehits wordt een snapshot verzonden"
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Rapportage-URL"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Snapshots worden naar deze URL verzonden"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limieten"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstlimiet"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximaal aantal te gebruiken tekens voor mededelingen."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplicaatlimiet"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Hoe lang gebruikers moeten wachten (in seconden) voor ze hetzelfde kunnen "
"zenden."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Mededeling van de website"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nieuw bericht"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Het was niet mogelijk om uw ontwerpinstellingen op te slaan."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Mededeling van de website"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Mededeling van de website"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS-instellingen"
@@ -3971,19 +4022,91 @@ msgstr ""
msgid "No code entered"
msgstr "Er is geen code ingevoerd"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Snapshots"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Websiteinstellingen wijzigen"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "De waarde voor het uitvoeren van snapshots is ongeldig."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "De snapshotfrequentie moet een getal zijn."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "De rapportage-URL voor snapshots is ongeldig."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Willekeurig tijdens een websitehit"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Als geplande taak"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Snapshots van gegevens"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+"Wanneer statistische gegevens naar de status.net-servers verzonden worden"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentie"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Iedere zoveel websitehits wordt een snapshot verzonden"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Rapportage-URL"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Snapshots worden naar deze URL verzonden"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Websiteinstellingen opslaan"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "U bent niet geabonneerd op dat profiel."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Het was niet mogelijk het abonnement op te slaan."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Dit is geen lokale gebruiker."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Deze handeling accepteert alleen POST-verzoeken."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Het profiel bestaat niet."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"U kunt niet abonneren op een OMB 1.0 profiel van een andere omgeving via "
+"deze handeling."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Geabonneerd"
@@ -4047,7 +4170,7 @@ msgstr "Dit zijn de gebruikers van wie u de mededelingen volgt."
msgid "These are the people whose notices %s listens to."
msgstr "Dit zijn de gebruikers waarvan %s de mededelingen volgt."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4063,35 +4186,35 @@ msgstr ""
"action.twittersettings%%), kunt u automatisch abonneren op de gebruikers die "
"u daar al volgt."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s volgt niemand."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Mededelingen met het label %1$s, pagina %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Mededelingenfeed voor label %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Mededelingenfeed voor label %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Mededelingenfeed voor label %s (Atom)"
@@ -4147,7 +4270,7 @@ msgstr ""
msgid "No such tag."
msgstr "Onbekend label."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "De API-functie is in bewerking."
@@ -4171,7 +4294,7 @@ msgstr "Het profiel-ID was niet aanwezig in het verzoek."
msgid "Unsubscribed"
msgstr "Het abonnement is opgezegd"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4179,70 +4302,71 @@ msgstr ""
"De licentie \"%1$s\" voor de stream die u wilt volgen is niet compatibel met "
"de sitelicentie \"%2$s\"."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "Gebruiker"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Gebruikersinstellingen voor deze StatusNet-website."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Ongeldige beschrijvingslimiet. Het moet een getal zijn."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Ongeldige welkomsttekst. De maximale lengte is 255 tekens."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Ongeldig standaardabonnement: \"%1$s\" is geen gebruiker."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profiel"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Profiellimiet"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "De maximale lengte van de profieltekst in tekens."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nieuwe gebruikers"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Welkom voor nieuwe gebruikers"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Welkomsttekst voor nieuwe gebruikers. Maximaal 255 tekens."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Standaardabonnement"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Nieuwe gebruikers automatisch op deze gebruiker abonneren"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Uitnodigingen"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Uitnodigingen ingeschakeld"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Of gebruikers nieuwe gebruikers kunnen uitnodigen."
@@ -4374,17 +4498,23 @@ msgstr "Groepen voor %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Meer groepen zoeken"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s is van geen enkele groep lid."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"U kunt [naar groepen zoeken](%%action.groupsearch%%) en daar lid van worden."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Updates van %1$s op %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4440,7 +4570,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versie"
@@ -4481,6 +4611,10 @@ msgstr "Geen lid van groep."
msgid "Group leave failed."
msgstr "Groepslidmaatschap opzeggen is mislukt."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Het was niet mogelijk de lokale groep bij te werken."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4498,31 +4632,31 @@ msgstr "Het was niet mogelijk het bericht in te voegen."
msgid "Could not update message with new URI."
msgstr "Het was niet mogelijk het bericht bij te werken met de nieuwe URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Er is een databasefout opgetreden bij de invoer van de hashtag: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van de mededeling. Deze is te "
"lang."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
"Er was een probleem bij het opslaan van de mededeling. De gebruiker is "
"onbekend."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"U hebt te snel te veel mededelingen verstuurd. Kom even op adem en probeer "
"het over enige tijd weer."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4530,45 +4664,76 @@ msgstr ""
"Te veel duplicaatberichten te snel achter elkaar. Neem een adempauze en "
"plaats over een aantal minuten pas weer een bericht."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
"U bent geblokkeerd en mag geen mededelingen meer achterlaten op deze site."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van het Postvak IN van de "
"groep."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
-"Er is een databasefout opgetreden bij het invoegen van het antwoord: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "U mag zich niet abonneren."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "U bent al gebonneerd!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Deze gebruiker negeert u."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Niet geabonneerd!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Het was niet mogelijk het abonnement op uzelf te verwijderen."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Kon abonnement niet verwijderen."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Kon abonnement niet verwijderen."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welkom bij %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Het was niet mogelijk de groep aan te maken."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Het was niet mogelijk de groeps-URI in te stellen."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Het was niet mogelijk het groepslidmaatschap in te stellen."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Het was niet mogelijk de lokale groepsinformatie op te slaan."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Uw profielgegevens wijzigen"
@@ -4606,124 +4771,171 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Naamloze pagina"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primaire sitenavigatie"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Start"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persoonlijk profiel en tijdlijn van vrienden"
-#: lib/action.php:441
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Persoonlijk"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Uw e-mailadres, avatar, wachtwoord of profiel wijzigen"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Koppelen"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Met diensten verbinden"
+msgstr "Met andere diensten koppelen"
+
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Koppelingen"
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Websiteinstellingen wijzigen"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Uitnodigen"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Beheer"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Vrienden en collega's uitnodigen om u te vergezellen op %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Afmelden"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Uitnodigingen"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Van de site afmelden"
+msgstr "Gebruiker afmelden"
+
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Afmelden"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Gebruiker aanmaken"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registreren"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr "Bij de site aanmelden"
+msgstr "Gebruiker aanmelden"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Help"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Aanmelden"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Zoeken"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Help"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Naar gebruikers of tekst zoeken"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "Zoeken"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Mededeling van de website"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale weergaven"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Mededeling van de pagina"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secundaire sitenavigatie"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Help"
+
+#: lib/action.php:754
msgid "About"
msgstr "Over"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Veel gestelde vragen"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "Gebruiksvoorwaarden"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Broncode"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Widget"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licentie van de StatusNet-software"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4732,12 +4944,12 @@ msgstr ""
"**%%site.name%%** is een microblogdienst van [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is een microblogdienst. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4748,99 +4960,151 @@ msgstr ""
"versie %s, beschikbaar onder de [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licentie voor siteinhoud"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Inhoud en gegevens van %1$s zijn persoonlijk en vertrouwelijk."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij %1$s. Alle rechten "
"voorbehouden."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij de respectievelijke "
"gebruikers. Alle rechten voorbehouden."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Alle "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licentie."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Later"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Eerder"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Het is nog niet mogelijk inhoud uit andere omgevingen te verwerken."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Het is nog niet mogelijk ingebedde XML-inhoud te verwerken"
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Het is nog niet mogelijk ingebedde Base64-inhoud te verwerken"
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "U mag geen wijzigingen maken aan deze website."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Wijzigingen aan dat venster zijn niet toegestaan."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() is niet geïmplementeerd."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() is nog niet geïmplementeerd."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Het was niet mogelijk om de ontwerpinstellingen te verwijderen."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Basisinstellingen voor de website"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Website"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Instellingen vormgeving"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Uiterlijk"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Gebruikersinstellingen"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Gebruiker"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Toegangsinstellingen"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Padinstellingen"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Sessieinstellingen"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Mededeling van de website"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Padinstellingen"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"Het API-programma heeft lezen-en-schrijventoegang nodig, maar u hebt alleen "
"maar leestoegang."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4932,11 +5196,11 @@ msgstr "Mededelingen die deze bijlage bevatten"
msgid "Tags for this attachment"
msgstr "Labels voor deze bijlage"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Wachtwoord wijzigen is mislukt"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Wachtwoord wijzigen is niet toegestaan"
@@ -5091,83 +5355,92 @@ msgstr "Er is een fout opgetreden bij het opslaan van de mededeling."
msgid "Specify the name of the user to subscribe to"
msgstr "Geef de naam op van de gebruiker waarop u wilt abonneren"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "De opgegeven gebruiker bestaat niet"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Geabonneerd op %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
"Geef de naam op van de gebruiker waarvoor u het abonnement wilt opzeggen"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Uw abonnement op %s is opgezegd"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Dit commando is nog niet geïmplementeerd."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificaties uitgeschakeld."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Het is niet mogelijk de mededelingen uit te schakelen."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificaties ingeschakeld."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Het is niet mogelijk de notificatie uit te schakelen."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Het aanmeldcommando is uitgeschakeld"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Deze verwijzing kan slechts één keer gebruikt worden en is twee minuten "
"geldig: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Het abonnement van %s is opgeheven"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "U bent op geen enkele gebruiker geabonneerd."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "U bent geabonneerd op deze gebruiker:"
msgstr[1] "U bent geabonneerd op deze gebruikers:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Niemand heeft een abonnenment op u."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Deze gebruiker is op u geabonneerd:"
msgstr[1] "Deze gebruikers zijn op u geabonneerd:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "U bent lid van geen enkele groep."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5181,6 +5454,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5219,6 +5493,7 @@ msgstr ""
"d <gebruiker> <tekst> - direct bericht aan gebruiker\n"
"get <gebruiker> - laatste mededeling van gebruiker opvragen\n"
"whois <gebruiker> - profielinformatie van gebruiker opvragen\n"
+"lose <gebruiker> - zorgt ervoor dat de gebruiker u niet meer volgt\n"
"fav <gebruiker> - laatste mededeling van gebruiker op favorietenlijst "
"zetten\n"
"fav #<mededeling-ID> - mededelingen met aangegeven ID op favorietenlijst "
@@ -5247,20 +5522,20 @@ msgstr ""
"tracks - nog niet beschikbaar\n"
"tracking - nog niet beschikbaar\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Er is geen instellingenbestand aangetroffen. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Er is gezocht naar instellingenbestanden op de volgende plaatsen: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
"U kunt proberen de installer uit te voeren om dit probleem op te lossen."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Naar het installatieprogramma gaan."
@@ -5359,6 +5634,11 @@ msgstr "Kies een label om de lijst kleiner te maken"
msgid "Go"
msgstr "OK"
+#: lib/grantroleform.php:91
+#, php-format
+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 "De URL van de thuispagina of de blog van de groep of het onderwerp"
@@ -5450,23 +5730,23 @@ msgstr "Er is een systeemfout opgetreden tijdens het uploaden van het bestand."
msgid "Not an image or corrupt file."
msgstr "Het bestand is geen afbeelding of het bestand is beschadigd."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Niet ondersteund beeldbestandsformaat."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Het bestand is zoekgeraakt."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Onbekend bestandstype"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5757,7 +6037,7 @@ msgstr ""
"U hebt geen privéberichten. U kunt privéberichten verzenden aan andere "
"gebruikers. Mensen kunnen u privéberichten sturen die alleen u kunt lezen."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "van"
@@ -5852,6 +6132,11 @@ msgstr "Aan"
msgid "Available characters"
msgstr "Beschikbare tekens"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "OK"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Mededeling verzenden"
@@ -5885,48 +6170,48 @@ msgstr ""
"Het ophalen van uw geolocatie duurt langer dan verwacht. Probeer het later "
"nog eens"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "Z"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "O"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "W"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "op"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Herhaald door"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Op deze mededeling antwoorden"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Antwoorden"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Mededeling herhaald"
@@ -5959,10 +6244,6 @@ msgstr ""
msgid "Duplicate notice"
msgstr "Duplicaatmelding"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "U mag zich niet abonneren."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kon nieuw abonnement niet toevoegen."
@@ -6004,7 +6285,7 @@ msgstr "Labels in de mededelingen van %s"
msgid "Unknown"
msgstr "Onbekend"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnementen"
@@ -6012,23 +6293,23 @@ msgstr "Abonnementen"
msgid "All subscriptions"
msgstr "Alle abonnementen"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnees"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alle abonnees"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Gebruikers-ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Lid sinds"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle groepen"
@@ -6068,7 +6349,12 @@ msgstr "Deze mededeling herhalen?"
msgid "Repeat this notice"
msgstr "Deze mededeling herhalen"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Deze gebruiker de toegang tot deze groep ontzeggen"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus."
@@ -6088,6 +6374,10 @@ msgstr "Site doorzoeken"
msgid "Keyword(s)"
msgstr "Term(en)"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Zoeken"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Hulp bij zoeken"
@@ -6139,33 +6429,14 @@ msgstr "Gebruikers met een abonnement op %s"
msgid "Groups %s is a member of"
msgstr "Groepen waar %s lid van is"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "U bent al gebonneerd!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Deze gebruiker negeert u."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Kan niet abonneren "
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Het was niet mogelijk om een ander op u te laten abonneren"
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Niet geabonneerd!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Het was niet mogelijk het abonnement op uzelf te verwijderen."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Uitnodigen"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Kon abonnement niet verwijderen."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Vrienden en collega's uitnodigen om u te vergezellen op %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6217,67 +6488,84 @@ msgstr "Avatar bewerken"
msgid "User actions"
msgstr "Gebruikershandelingen"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Profielinstellingen bewerken"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Bewerken"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Deze gebruiker een direct bericht zenden"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Bericht"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Modereren"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Gebruikersprofiel"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Beheerders"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modereren"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index e3e2cf80e..c6576fbcf 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,83 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:29+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:56:56+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Godta"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Avatar-innstillingar"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Registrér"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Personvern"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "Invitér"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Blokkér"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Lagra"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Avatar-innstillingar"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Lagra"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Dette emneord finst ikkje."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -97,79 +104,88 @@ msgstr "Dette emneord finst ikkje."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Brukaren finst ikkje."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s med vener, side %d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s med vener"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Straum for vener av %s"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Straum for vener av %s"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Straum for vener av %s"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s med vener"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Oppdateringar frå %1$s og vener på %2$s!"
@@ -182,20 +198,20 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Fann ikkje API-metode."
@@ -229,8 +245,9 @@ msgstr "Kan ikkje oppdatera brukar."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Brukaren har inga profil."
@@ -255,7 +272,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -374,68 +391,68 @@ msgstr "Kan ikkje hente offentleg straum."
msgid "Could not find target user."
msgstr "Kan ikkje finna einkvan status."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Kallenamn må berre ha små bokstavar og nummer, ingen mellomrom."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Kallenamnet er allereie i bruk. Prøv eit anna."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ikkje eit gyldig brukarnamn."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Heimesida er ikkje ei gyldig internettadresse."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Ditt fulle namn er for langt (maksimalt 255 teikn)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "skildringa er for lang (maks 140 teikn)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Plassering er for lang (maksimalt 255 teikn)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ugyldig merkelapp: %s"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Kallenamnet er allereie i bruk. Prøv eit anna."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -447,16 +464,16 @@ msgstr ""
msgid "Group not found!"
msgstr "Fann ikkje API-metode."
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "Du er allereie medlem av den gruppa"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s"
@@ -466,7 +483,7 @@ msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s"
msgid "You are not a member of this group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Kunne ikkje fjerne %s fra %s gruppa "
@@ -498,7 +515,7 @@ msgstr "Ugyldig storleik."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -507,7 +524,7 @@ msgstr "Ugyldig storleik."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -542,7 +559,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -565,13 +582,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -652,23 +669,11 @@ msgstr "Støttar ikkje bileteformatet."
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Favorittar frå %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s oppdateringar favorisert av %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidsline"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Oppdateringar frå %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -694,17 +699,17 @@ msgstr "%s oppdateringar frå alle saman!"
msgid "Repeated to %s"
msgstr "Svar til %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Svar til %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notisar merka med %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringar frå %1$s på %2$s!"
@@ -721,8 +726,7 @@ msgstr "Slikt dokument finst ikkje."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ingen kallenamn."
@@ -734,7 +738,7 @@ msgstr "Ingen storleik."
msgid "Invalid size."
msgstr "Ugyldig storleik."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Brukarbilete"
@@ -751,30 +755,30 @@ msgid "User without matching profile"
msgstr "Kan ikkje finne brukar"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Avatar-innstillingar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Forhandsvis"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Slett"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Last opp"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Skaler"
@@ -782,7 +786,7 @@ msgstr "Skaler"
msgid "Pick a square area of the image to be your avatar"
msgstr "Velg eit utvalg av bildet som vil blir din avatar."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Fant ikkje igjen fil data."
@@ -816,23 +820,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nei"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "LÃ¥s opp brukaren"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Jau"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blokkér denne brukaren"
@@ -840,41 +844,45 @@ msgstr "Blokkér denne brukaren"
msgid "Failed to save block information."
msgstr "Lagring av informasjon feila."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Denne gruppa finst ikkje."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "Brukarprofil"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s med vener, side %d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
#, fuzzy
msgid "A list of the users blocked from joining this group."
msgstr "Ei liste over brukarane i denne gruppa."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "De-blokkering av brukar feila."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "LÃ¥s opp"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "LÃ¥s opp brukaren"
@@ -933,7 +941,7 @@ msgid "Conversation"
msgstr "Stadfestingskode"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notisar"
@@ -955,7 +963,7 @@ msgstr "Du er ikkje medlem av den gruppa."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Det var eit problem med sesjons billetten din."
@@ -981,12 +989,13 @@ msgstr "Kan ikkje sletta notisen."
msgid "Delete this application"
msgstr "Slett denne notisen"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ikkje logga inn"
@@ -1017,7 +1026,7 @@ msgstr "Sikker på at du vil sletta notisen?"
msgid "Do not delete this notice"
msgstr "Kan ikkje sletta notisen."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Slett denne notisen"
@@ -1036,19 +1045,19 @@ msgstr "Du kan ikkje sletta statusen til ein annan brukar."
msgid "Delete user"
msgstr "Slett"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Slett denne notisen"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1159,6 +1168,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Lagra"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1261,31 +1282,31 @@ msgstr "Rediger %s gruppa"
msgid "You must be logged in to create a group."
msgstr "Du må være logga inn for å lage ei gruppe."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Du må være administrator for å redigere gruppa"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Bruk dette skjemaet for å redigere gruppa"
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "skildringa er for lang (maks 140 teikn)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Kann ikkje oppdatera gruppa."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Kunne ikkje lagre favoritt."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Lagra innstillingar."
@@ -1407,7 +1428,7 @@ msgid "Cannot normalize that email address"
msgstr "Klarar ikkje normalisera epostadressa"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ikkje ei gyldig epostadresse."
@@ -1603,6 +1624,25 @@ msgstr "Denne notisen finst ikkje."
msgid "Cannot read file."
msgstr "Mista fila vår."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ugyldig storleik."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan ikkje sende melding til denne brukaren."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Brukar har blokkert deg."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1635,7 +1675,7 @@ msgstr "Brukar har blokkert deg."
msgid "User is not a member of group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Blokker brukaren"
@@ -1672,98 +1712,104 @@ msgstr "Ingen ID"
msgid "You must be logged in to edit a group."
msgstr "Du må være logga inn for å lage ei gruppe."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "Grupper"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Kan ikkje oppdatera brukar."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Synkroniserings innstillingar blei lagra."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo åt gruppa"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, fuzzy, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "Du kan lasta opp ein logo for gruppa."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Kan ikkje finne brukar"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
#, fuzzy
msgid "Pick a square area of the image to be the logo."
msgstr "Velg eit utvalg av bildet som vil blir din avatar."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logo oppdatert."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Feil ved oppdatering av logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s medlemmar i gruppa"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "%s medlemmar i gruppa, side %d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Ei liste over brukarane i denne gruppa."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "Du må være administrator for å redigere gruppa"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidsline"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Oppdateringar frå %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -2014,16 +2060,19 @@ msgstr "Personleg melding"
msgid "Optionally add a personal message to the invitation."
msgstr "Eventuelt legg til ei personleg melding til invitasjonen."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Send"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s har invitert deg til %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2079,7 +2128,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Du må være logga inn for å bli med i ei gruppe."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Ingen kallenamn."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s blei medlem av gruppe %s"
@@ -2088,11 +2142,11 @@ msgstr "%s blei medlem av gruppe %s"
msgid "You must be logged in to leave a group."
msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s forlot %s gruppa"
@@ -2110,8 +2164,7 @@ msgstr "Feil brukarnamn eller passord"
msgid "Error setting user. You are probably not authorized."
msgstr "Ikkje autorisert."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logg inn"
@@ -2370,8 +2423,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ikkje eit støtta dataformat."
@@ -2517,7 +2570,8 @@ msgstr "Klarar ikkje lagra nytt passord."
msgid "Password saved."
msgstr "Lagra passord."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2550,7 +2604,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "Invitér"
@@ -2646,7 +2699,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Gjenopprett"
@@ -2705,11 +2758,11 @@ msgstr "Ikkje gyldig merkelapp: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Brukarar sjølv-merka med %s, side %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ugyldig notisinnhald"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2735,7 +2788,7 @@ msgstr ""
"1-64 små bokstavar eller tal, ingen punktum (og liknande) eller mellomrom"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Fullt namn"
@@ -2764,7 +2817,7 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2791,7 +2844,7 @@ msgstr ""
"merkelappar for deg sjølv ( bokstavar, nummer, -, ., og _ ), komma eller "
"mellomroms separert."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2818,7 +2871,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "«Om meg» er for lang (maks 140 "
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidssone er ikkje valt."
@@ -2831,24 +2884,25 @@ msgstr "Språk er for langt (maksimalt 50 teikn)."
msgid "Invalid tag: \"%s\""
msgstr "Ugyldig merkelapp: %s"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Kan ikkje oppdatera brukar for automatisk tinging."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Kan ikkje lagra merkelapp."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Kan ikkje lagra profil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Kan ikkje lagra merkelapp."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Lagra innstillingar."
@@ -2861,48 +2915,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Kan ikkje hente offentleg straum."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Offentleg tidsline, side %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Offentleg tidsline"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Offentleg straum"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Offentleg straum"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Offentleg straum"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2911,7 +2965,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3085,8 +3139,7 @@ msgstr "Feil med stadfestingskode."
msgid "Registration successful"
msgstr "Registreringa gikk bra"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrér"
@@ -3127,7 +3180,7 @@ msgid "Same as password above. Required."
msgstr "Samme som passord over. PÃ¥krevd."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Epost"
@@ -3235,7 +3288,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL til profilsida di på ei anna kompatibel mikrobloggingteneste."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Ting"
@@ -3278,7 +3331,7 @@ msgstr "Du kan ikkje registrera deg om du ikkje godtek vilkåra i lisensen."
msgid "You already repeated that notice."
msgstr "Du har allereie blokkert denne brukaren."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Lag"
@@ -3288,47 +3341,47 @@ msgstr "Lag"
msgid "Repeated!"
msgstr "Lag"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Svar til %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Melding til %1$s på %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Notisstraum for %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Notisstraum for %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Notisstraum for %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3340,6 +3393,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Melding til %1$s på %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kan ikkje sende melding til denne brukaren."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Kan ikkje finne brukar"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3355,8 +3418,9 @@ msgstr "Du kan ikkje sende melding til denne brukaren."
msgid "User is already sandboxed."
msgstr "Brukar har blokkert deg."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3380,8 +3444,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Avatar-innstillingar"
@@ -3416,8 +3480,8 @@ msgstr "Paginering"
msgid "Description"
msgstr "Beskriving"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3478,35 +3542,35 @@ msgstr "%s's favoritt meldingar"
msgid "Could not retrieve favorite notices."
msgstr "Kunne ikkje hente fram favorittane."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Straum for vener av %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Straum for vener av %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Straum for vener av %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3514,7 +3578,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3528,68 +3592,68 @@ msgstr "%s gruppe"
msgid "%1$s group, page %2$d"
msgstr "%s medlemmar i gruppa, side %d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Gruppe profil"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Merknad"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Gruppe handlingar"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Utboks for %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle medlemmar"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Lag"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3599,7 +3663,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3610,7 +3674,7 @@ msgstr ""
"**%s** er ei brukargruppe på %%%%site.name%%%%, ei [mikroblogging](http://en."
"wikipedia.org/wiki/Micro-blogging)-teneste"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "Administrator"
@@ -3726,150 +3790,139 @@ msgid "User is already silenced."
msgstr "Brukar har blokkert deg."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ikkje ei gyldig epostadresse"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Statusmelding"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Ny epostadresse for å oppdatera %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale syningar"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Foretrukke språk"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ny melding"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Statusmelding"
#: actions/smssettings.php:58
#, fuzzy
@@ -3973,19 +4026,90 @@ msgstr ""
msgid "No code entered"
msgstr "Ingen innskriven kode"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Navigasjon for hovudsida"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Avatar-innstillingar"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du tingar ikkje oppdateringar til den profilen."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Kunne ikkje lagra abonnement."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ikkje ein lokal brukar."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Denne notisen finst ikkje."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Du tingar ikkje oppdateringar til den profilen."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonnent"
@@ -4045,7 +4169,7 @@ msgstr "Dette er dei du lyttar til."
msgid "These are the people whose notices %s listens to."
msgstr "Dette er folka som %s tingar oppdateringar frå."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4055,35 +4179,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s høyrer no på"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Brukarar sjølv-merka med %s, side %d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Notisstraum for %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Notisstraum for %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Notisstraum for %s"
@@ -4140,7 +4264,7 @@ msgstr ""
msgid "No such tag."
msgstr "Dette emneord finst ikkje."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-metoden er ikkje ferdig enno."
@@ -4167,82 +4291,84 @@ msgstr "Ingen profil-ID i førespurnaden."
msgid "Unsubscribed"
msgstr "Fjerna tinging"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Brukar"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "Invitér nye brukarar"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Alle tingingar"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
"Automatisk ting notisane til dei som tingar mine (best for ikkje-menneskje)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Invitasjon(er) sendt"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "Invitasjon(er) sendt"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4376,16 +4502,22 @@ msgstr "%s medlemmar i gruppa, side %d"
msgid "Search for more groups"
msgstr "Søk etter folk eller innhald"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Oppdateringar frå %1$s på %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4429,7 +4561,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personleg"
@@ -4470,6 +4602,11 @@ msgstr "Kann ikkje oppdatera gruppa."
msgid "Group leave failed."
msgstr "Gruppe profil"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Kann ikkje oppdatera gruppa."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4488,27 +4625,27 @@ msgstr "Kunne ikkje lagre melding."
msgid "Could not update message with new URI."
msgstr "Kunne ikkje oppdatere melding med ny URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Feil ved lagring av notis. Ukjend brukar."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4516,42 +4653,79 @@ msgid ""
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Databasefeil, kan ikkje lagra svar: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Brukar har blokkert deg."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Ikkje tinga."
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Kan ikkje sletta tinging."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Kan ikkje sletta tinging."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Kan ikkje sletta tinging."
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Melding til %1$s på %2$s"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Kunne ikkje laga gruppa."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Kunne ikkje bli med i gruppa."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Kunne ikkje bli med i gruppa."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Kunne ikkje lagra abonnement."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Endra profilinnstillingane dine"
@@ -4590,127 +4764,189 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ingen tittel"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigasjon for hovudsida"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Heim"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personleg profil og oversyn over vener"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personleg"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Endra e-posten, avataren, passordet eller profilen"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Kopla til"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Klarte ikkje å omdirigera til tenaren: %s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Kopla til"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Navigasjon for hovudsida"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitér"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Inviter vennar og kollega til å bli med deg på %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Logg ut"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitér"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logg ut or sida"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logg ut"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Opprett ny konto"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrér"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Logg inn or sida"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hjelp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logg inn"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjelp meg!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Søk"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjelp"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Søk etter folk eller innhald"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Søk"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Statusmelding"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale syningar"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidenotis"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Andrenivås side navigasjon"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjelp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Personvern"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Kjeldekode"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Dult"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4719,12 +4955,12 @@ msgstr ""
"**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er ei mikrobloggingteneste. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4735,105 +4971,159 @@ msgstr ""
"%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Alle"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "lisens."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "« Etter"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Før »"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Du kan ikkje sende melding til denne brukaren."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Registrering ikkje tillatt."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Kommando ikkje implementert."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Kommando ikkje implementert."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Stadfesting av epostadresse"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Invitér"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS bekreftelse"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Personleg"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS bekreftelse"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Brukar"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS bekreftelse"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS bekreftelse"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS bekreftelse"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Statusmelding"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS bekreftelse"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4929,12 +5219,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Endra passord"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Endra passord"
@@ -5088,83 +5378,92 @@ msgstr "Eit problem oppstod ved lagring av notis."
msgid "Specify the name of the user to subscribe to"
msgstr "Spesifer namnet til brukaren du vil tinge"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Brukaren finst ikkje."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Tingar %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Spesifer namnet til brukar du vil fjerne tinging på"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Tingar ikkje %s lengre"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Kommando ikkje implementert."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notifikasjon av."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Kan ikkje skru av notifikasjon."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notifikasjon på."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Kan ikkje slå på notifikasjon."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Tingar ikkje %s lengre"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Du tingar ikkje oppdateringar til den profilen."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du tingar allereie oppdatering frå desse brukarane:"
msgstr[1] "Du tingar allereie oppdatering frå desse brukarane:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Kan ikkje tinga andre til deg."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Kan ikkje tinga andre til deg."
msgstr[1] "Kan ikkje tinga andre til deg."
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er ikkje medlem av den gruppa."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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."
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5178,6 +5477,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5205,20 +5505,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Ingen stadfestingskode."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Logg inn or sida"
@@ -5320,6 +5620,11 @@ msgstr "Velg ein merkelapp for å begrense lista"
msgid "Go"
msgstr "GÃ¥"
+#: lib/grantroleform.php:91
+#, php-format
+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 til heimesida eller bloggen for gruppa eller emnet"
@@ -5411,23 +5716,23 @@ msgstr "Systemfeil ved opplasting av fil."
msgid "Not an image or corrupt file."
msgstr "Korrupt bilete."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Støttar ikkje bileteformatet."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Mista fila vår."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Ukjend fil type"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5646,7 +5951,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " frå "
@@ -5737,6 +6042,12 @@ msgstr "Til"
msgid "Available characters"
msgstr "Tilgjenglege teikn"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Send"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Send ei melding"
@@ -5770,51 +6081,51 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "Nei"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Ingen innhald."
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Lag"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svar på denne notisen"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svar"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Melding lagra"
@@ -5848,11 +6159,6 @@ msgstr "Feil med å henta inn ekstern profil"
msgid "Duplicate notice"
msgstr "Slett notis"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kan ikkje leggja til ny tinging."
@@ -5895,7 +6201,7 @@ msgstr "Merkelappar i %s sine notisar"
msgid "Unknown"
msgstr "Uventa handling."
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tingingar"
@@ -5903,24 +6209,24 @@ msgstr "Tingingar"
msgid "All subscriptions"
msgstr "Alle tingingar"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Tingarar"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tingarar"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Brukar"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem sidan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle gruppar"
@@ -5963,7 +6269,12 @@ msgstr "Svar på denne notisen"
msgid "Repeat this notice"
msgstr "Svar på denne notisen"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Ei liste over brukarane i denne gruppa."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5986,6 +6297,10 @@ msgstr "Søk"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Søk"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6040,35 +6355,14 @@ msgstr "Mennesker som tingar %s"
msgid "Groups %s is a member of"
msgstr "Grupper %s er medlem av"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Brukar har blokkert deg."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Kan ikkje tinga."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Kan ikkje tinga andre til deg."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ikkje tinga."
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Kan ikkje sletta tinging."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Invitér"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Kan ikkje sletta tinging."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Inviter vennar og kollega til å bli med deg på %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6123,68 +6417,84 @@ msgstr "Brukarbilete"
msgid "User actions"
msgstr "Brukarverkty"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Profilinnstillingar"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Send ei direktemelding til denne brukaren"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Melding"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Brukarprofil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrator"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "eit par sekund sidan"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index a13f6362b..402bd78af 100644
--- a/locale/pl/LC_MESSAGES/statusnet.po
+++ b/locale/pl/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:35+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:02+0000\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,69 +19,77 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Dostęp"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Ustawienia dostępu witryny"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Rejestracja"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Prywatna"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Zabronić anonimowym użytkownikom (niezalogowanym) przeglądać witrynę?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Tylko zaproszeni"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Prywatna"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Rejestracja tylko za zaproszeniem."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Zamknięte"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Tylko zaproszeni"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Wyłączenie nowych rejestracji."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Zapisz"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Zamknięte"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Zapisz ustawienia dostępu"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Zapisz"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Nie ma takiej strony"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -95,46 +103,53 @@ msgstr "Nie ma takiej strony"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Brak takiego użytkownika."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s i przyjaciele, strona %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "Użytkownik %s i przyjaciele"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Kanał dla znajomych użytkownika %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Kanał dla znajomych użytkownika %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Kanał dla znajomych użytkownika %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -142,7 +157,7 @@ msgstr ""
"To jest oś czasu użytkownika %s i przyjaciół, ale nikt jeszcze nic nie "
"wysłał."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -151,7 +166,8 @@ msgstr ""
"Spróbuj subskrybować więcej osób, [dołączyć do grupy](%%action.groups%%) lub "
"wysłać coś samemu."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -161,7 +177,7 @@ msgstr ""
"[wysłać coś wymagającego jego uwagi](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -170,12 +186,13 @@ msgstr ""
"Dlaczego nie [zarejestrujesz konta](%%%%action.register%%%%) i wtedy "
"szturchniesz użytkownika %s lub wyślesz wpis wymagającego jego uwagi."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ty i przyjaciele"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
@@ -188,20 +205,20 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Nie odnaleziono metody API."
@@ -234,8 +251,9 @@ msgstr "Nie można zaktualizować użytkownika."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Użytkownik nie posiada profilu."
@@ -261,7 +279,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -374,68 +392,68 @@ msgstr "Nie można określić użytkownika źródłowego."
msgid "Could not find target user."
msgstr "Nie można odnaleźć użytkownika docelowego."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Pseudonim może zawierać tylko małe litery i cyfry, bez spacji."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Pseudonim jest już używany. Spróbuj innego."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "To nie jest prawidłowy pseudonim."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Strona domowa nie jest prawidłowym adresem URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Imię i nazwisko jest za długie (maksymalnie 255 znaków)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Opis jest za długi (maksymalnie %d znaków)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Położenie jest za długie (maksymalnie 255 znaków)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Za dużo aliasów. Maksymalnie %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Nieprawidłowy alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias \"%s\" jest już używany. Spróbuj innego."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias nie może być taki sam jak pseudonim."
@@ -446,15 +464,15 @@ msgstr "Alias nie może być taki sam jak pseudonim."
msgid "Group not found!"
msgstr "Nie odnaleziono grupy."
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Jesteś już członkiem tej grupy."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Zostałeś zablokowany w tej grupie przez administratora."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
@@ -463,7 +481,7 @@ msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
msgid "You are not a member of this group."
msgstr "Nie jesteś członkiem tej grupy."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s."
@@ -494,7 +512,7 @@ msgstr "Nieprawidłowy token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -503,7 +521,7 @@ msgstr "Nieprawidłowy token."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -536,7 +554,7 @@ msgstr "Token żądania %s został odrzucony lub unieważniony."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -562,13 +580,13 @@ msgstr ""
"uzyskać możliwość <strong>%3$s</strong> danych konta %4$s. Dostęp do konta %4"
"$s powinien być udostępniany tylko zaufanym osobom trzecim."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -644,23 +662,11 @@ msgstr "Nieobsługiwany format."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s/ulubione wpisy od %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Użytkownik %1$s aktualizuje ulubione według %2$s/%2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Oś czasu użytkownika %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Aktualizacje z %1$s na %2$s."
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -686,17 +692,17 @@ msgstr "Użytkownik %s aktualizuje od każdego."
msgid "Repeated to %s"
msgstr "Powtórzone dla %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Powtórzenia %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Wpisy ze znacznikiem %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualizacje ze znacznikiem %1$s na %2$s."
@@ -712,8 +718,7 @@ msgstr "Nie ma takiego załącznika."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Brak pseudonimu."
@@ -725,7 +730,7 @@ msgstr "Brak rozmiaru."
msgid "Invalid size."
msgstr "Nieprawidłowy rozmiar."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Awatar"
@@ -742,30 +747,30 @@ msgid "User without matching profile"
msgstr "Użytkownik bez odpowiadającego profilu"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Ustawienia awatara"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Oryginał"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "PodglÄ…d"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Usuń"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Wyślij"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Przytnij"
@@ -773,7 +778,7 @@ msgstr "Przytnij"
msgid "Pick a square area of the image to be your avatar"
msgstr "Wybierz kwadratowy obszar obrazu do awatara"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Utracono dane pliku."
@@ -808,22 +813,22 @@ msgstr ""
"i nie będziesz powiadamiany o żadnych odpowiedziach @ od niego."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nie"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Nie blokuj tego użytkownika"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Tak"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Zablokuj tego użytkownika"
@@ -831,39 +836,43 @@ msgstr "Zablokuj tego użytkownika"
msgid "Failed to save block information."
msgstr "Zapisanie informacji o blokadzie nie powiodło się."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Nie ma takiej grupy."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s zablokowane profile"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s zablokowane profile, strona %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Lista użytkowników zablokowanych w tej grupie."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Odblokuj użytkownika w tej grupie"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Odblokuj"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Odblokuj tego użytkownika"
@@ -919,7 +928,7 @@ msgid "Conversation"
msgstr "Rozmowa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Wpisy"
@@ -938,7 +947,7 @@ msgstr "Nie jesteś właścicielem tej aplikacji."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Wystąpił problem z tokenem sesji."
@@ -963,12 +972,13 @@ msgstr "Nie usuwaj tej aplikacji"
msgid "Delete this application"
msgstr "Usuń tę aplikację"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Niezalogowany."
@@ -997,7 +1007,7 @@ msgstr "Jesteś pewien, że chcesz usunąć ten wpis?"
msgid "Do not delete this notice"
msgstr "Nie usuwaj tego wpisu"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Usuń ten wpis"
@@ -1013,7 +1023,7 @@ msgstr "Nie można usuwać lokalnych użytkowników."
msgid "Delete user"
msgstr "Usuń użytkownika"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1021,12 +1031,12 @@ msgstr ""
"Na pewno usunąć tego użytkownika? Wyczyści to wszystkie dane o użytkowniku z "
"bazy danych, bez utworzenia kopii zapasowej."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Usuń tego użytkownika"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "WyglÄ…d"
@@ -1101,7 +1111,7 @@ msgstr "Zmień kolory"
#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
-msgstr "Zawartość"
+msgstr "Treść"
#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
@@ -1127,6 +1137,18 @@ msgstr "Przywróć domyślny wygląd"
msgid "Reset back to default"
msgstr "Przywróć domyślne ustawienia"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Zapisz"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Zapisz wyglÄ…d"
@@ -1218,29 +1240,29 @@ msgstr "Zmodyfikuj grupÄ™ %s"
msgid "You must be logged in to create a group."
msgstr "Musisz być zalogowany, aby utworzyć grupę."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Musisz być administratorem, aby zmodyfikować grupę."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Użyj tego formularza, aby zmodyfikować grupę."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "opis jest za długi (maksymalnie %d znaków)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Nie można zaktualizować grupy."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Nie można utworzyć aliasów."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Zapisano opcje."
@@ -1359,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "Nie można znormalizować tego adresu e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "To nie jest prawidłowy adres e-mail."
@@ -1552,6 +1574,25 @@ msgstr "Nie ma takiego pliku."
msgid "Cannot read file."
msgstr "Nie można odczytać pliku."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Nieprawidłowy token."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Nie można ograniczać użytkowników na tej witrynie."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Użytkownik jest już wyciszony."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1581,7 +1622,7 @@ msgstr "Użytkownik został już zablokował w grupie."
msgid "User is not a member of group."
msgstr "Użytkownik nie jest członkiem grupy."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Zablokuj użytkownika w grupie"
@@ -1616,91 +1657,97 @@ msgstr "Brak identyfikatora."
msgid "You must be logged in to edit a group."
msgstr "Musisz być zalogowany, aby zmodyfikować grupę."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "WyglÄ…d grupy"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr "Dostosuj wygląd grupy za pomocą wybranego obrazu tła i palety kolorów."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Nie można zaktualizować wyglądu."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Zapisano preferencje wyglÄ…du."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo grupy"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "Można wysłać obraz logo grupy. Maksymalny rozmiar pliku to %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Użytkownik bez odpowiadającego profilu."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Wybierz kwadratowy obszar obrazu, który będzie logo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Zaktualizowano logo."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Zaktualizowanie logo nie powiodło się."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Członkowie grupy %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Członkowie grupy %1$s, strona %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Lista użytkowników znajdujących się w tej grupie."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Zablokuj"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Uczyń użytkownika administratorem grupy"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Uczyń administratorem"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Uczyń tego użytkownika administratorem"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Oś czasu użytkownika %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Aktualizacje od członków %1$s na %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupy"
@@ -1959,16 +2006,19 @@ msgstr "Osobista wiadomość"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcjonalnie dodaj osobistą wiadomość do zaproszenia."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Wyślij"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s zapraszają cię, abyś dołączył do nich w %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2029,7 +2079,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Musisz być zalogowany, aby dołączyć do grupy."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Brak pseudonimu lub identyfikatora."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "Użytkownik %1$s dołączył do grupy %2$s"
@@ -2038,11 +2092,11 @@ msgstr "Użytkownik %1$s dołączył do grupy %2$s"
msgid "You must be logged in to leave a group."
msgstr "Musisz być zalogowany, aby opuścić grupę."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Nie jesteś członkiem tej grupy."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "Użytkownik %1$s opuścił grupę %2$s"
@@ -2059,8 +2113,7 @@ msgstr "Niepoprawna nazwa użytkownika lub hasło."
msgid "Error setting user. You are probably not authorized."
msgstr "Błąd podczas ustawiania użytkownika. Prawdopodobnie brak upoważnienia."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Zaloguj siÄ™"
@@ -2161,7 +2214,7 @@ msgstr "Nie można wysłać wiadomości do tego użytkownika."
#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
#: lib/command.php:475
msgid "No content!"
-msgstr "Brak zawartości."
+msgstr "Brak treści."
#: actions/newmessage.php:158
msgid "No recipient specified."
@@ -2199,7 +2252,7 @@ msgid ""
"Search for notices on %%site.name%% by their contents. Separate search terms "
"by spaces; they must be 3 characters or more."
msgstr ""
-"Wyszukaj wpisy na %%site.name%% według ich zawartości. Oddziel wyszukiwane "
+"Wyszukaj wpisy na %%site.name%% według ich treści. Oddziel wyszukiwane "
"terminy spacjami. Terminy muszą mieć trzy znaki lub więcej."
#: actions/noticesearch.php:78
@@ -2314,8 +2367,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "To nie jest obsługiwany format danych."
@@ -2454,7 +2507,8 @@ msgstr "Nie można zapisać nowego hasła."
msgid "Password saved."
msgstr "Zapisano hasło."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Ścieżki"
@@ -2487,7 +2541,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Nieprawidłowy serwer SSL. Maksymalna długość to 255 znaków."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Witryny"
@@ -2577,7 +2630,7 @@ msgstr "Katalog tła"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nigdy"
@@ -2633,11 +2686,11 @@ msgstr "Nieprawidłowy znacznik osób: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Użytkownicy używający znacznika %1$s - strona %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Nieprawidłowa zawartość wpisu"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Licencja wpisu \"%1$s\" nie jest zgodna z licencjÄ… witryny \"%2$s\"."
@@ -2662,7 +2715,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 małe litery lub liczby, bez spacji i znaków przestankowych"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "ImiÄ™ i nazwisko"
@@ -2690,7 +2743,7 @@ msgid "Bio"
msgstr "O mnie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2717,7 +2770,7 @@ msgstr ""
"Znaczniki dla siebie (litery, liczby, -, . i _), oddzielone przecinkami lub "
"spacjami"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Język"
@@ -2744,7 +2797,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Wpis \"O mnie\" jest za długi (maksymalnie %d znaków)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Nie wybrano strefy czasowej."
@@ -2757,23 +2810,24 @@ msgstr "Język jest za długi (maksymalnie 50 znaków)."
msgid "Invalid tag: \"%s\""
msgstr "Nieprawidłowy znacznik: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Nie można zaktualizować użytkownika do automatycznej subskrypcji."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Nie można zapisać preferencji położenia."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Nie można zapisać profilu."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Nie można zapisać znaczników."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Zapisano ustawienia."
@@ -2786,28 +2840,28 @@ msgstr "Poza ograniczeniem strony (%s)"
msgid "Could not retrieve public stream."
msgstr "Nie można pobrać publicznego strumienia."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Publiczna oÅ› czasu, strona %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Publiczna oÅ› czasu"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Kanał publicznego strumienia (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Kanał publicznego strumienia (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Kanał publicznego strumienia (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2816,11 +2870,11 @@ msgstr ""
"To jest publiczna oÅ› czasu dla %%site.name%%, ale nikt jeszcze nic nie "
"wysłał."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Zostań pierwszym, który coś wyśle."
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2828,7 +2882,7 @@ msgstr ""
"Dlaczego nie [zarejestrujesz konta](%%action.register%%) i zostaniesz "
"pierwszym, który coś wyśle."
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2841,7 +2895,7 @@ msgstr ""
"[Dołącz teraz](%%action.register%%), aby dzielić się wpisami o sobie z "
"przyjaciółmi, rodziną i kolegami. ([Przeczytaj więcej](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3019,8 +3073,7 @@ msgstr "Nieprawidłowy kod zaproszenia."
msgid "Registration successful"
msgstr "Rejestracja powiodła się"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Zarejestruj siÄ™"
@@ -3063,7 +3116,7 @@ msgid "Same as password above. Required."
msgstr "Takie samo jak powyższe hasło. Wymagane."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3169,7 +3222,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Adres URL profilu na innej, zgodnej usłudze mikroblogowania"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subskrybuj"
@@ -3207,7 +3260,7 @@ msgstr "Nie można powtórzyć własnego wpisu."
msgid "You already repeated that notice."
msgstr "Już powtórzono ten wpis."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Powtórzono"
@@ -3215,33 +3268,33 @@ msgstr "Powtórzono"
msgid "Repeated!"
msgstr "Powtórzono."
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Odpowiedzi na %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "odpowiedzi dla użytkownika %1$s, strona %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Kanał odpowiedzi dla użytkownika %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Kanał odpowiedzi dla użytkownika %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Kanał odpowiedzi dla użytkownika %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3250,7 +3303,7 @@ msgstr ""
"To jest oś czasu wyświetlająca odpowiedzi na wpisy użytkownika %1$s, ale %2"
"$s nie otrzymał jeszcze wpisów wymagających jego uwagi."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3259,7 +3312,7 @@ msgstr ""
"Można nawiązać rozmowę z innymi użytkownikami, subskrybować więcej osób lub "
"[dołączyć do grup](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3273,6 +3326,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "odpowiedzi dla użytkownika %1$s na %2$s."
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Nie można wyciszać użytkowników na tej witrynie."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Użytkownik bez odpowiadającego profilu."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3285,8 +3348,9 @@ msgstr "Nie można ograniczać użytkowników na tej witrynie."
msgid "User is already sandboxed."
msgstr "Użytkownik jest już ograniczony."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sesje"
@@ -3310,8 +3374,8 @@ msgstr "Debugowanie sesji"
msgid "Turn on debugging output for sessions."
msgstr "Włącza wyjście debugowania dla sesji."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Zapisz ustawienia witryny"
@@ -3341,8 +3405,8 @@ msgstr "Organizacja"
msgid "Description"
msgstr "Opis"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statystyki"
@@ -3404,22 +3468,22 @@ msgstr "Ulubione wpisy użytkownika %1$s, strona %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Nie można odebrać ulubionych wpisów."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Kanał dla ulubionych wpisów użytkownika %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Kanał dla ulubionych wpisów użytkownika %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Kanał dla ulubionych wpisów użytkownika %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3428,7 +3492,7 @@ msgstr ""
"na wpisach, które chciałbyś dodać do zakładek na później lub rzucić na nie "
"trochę światła."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3437,7 +3501,7 @@ msgstr ""
"Użytkownik %s nie dodał jeszcze żadnych wpisów do ulubionych. Wyślij coś "
"interesującego, aby chcieli dodać to do swoich ulubionych. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3448,7 +3512,7 @@ msgstr ""
"[zarejestrujesz konta](%%%%action.register%%%%) i wyślesz coś "
"interesującego, aby chcieli dodać to do swoich ulubionych. :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "To jest sposób na współdzielenie tego, co chcesz."
@@ -3462,67 +3526,67 @@ msgstr "Grupa %s"
msgid "%1$s group, page %2$d"
msgstr "Grupa %1$s, strona %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profil grupy"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "Adres URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Wpis"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasy"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Działania grupy"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Kanał wpisów dla grupy %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF dla grupy %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Członkowie"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Brak)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Wszyscy członkowie"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Utworzono"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3538,7 +3602,7 @@ msgstr ""
"action.register%%%%), aby stać się częścią tej grupy i wiele więcej. "
"([Przeczytaj więcej](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3551,7 +3615,7 @@ msgstr ""
"narzędziu [StatusNet](http://status.net/). Jej członkowie dzielą się "
"krótkimi wiadomościami o swoim życiu i zainteresowaniach. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratorzy"
@@ -3674,148 +3738,139 @@ msgid "User is already silenced."
msgstr "Użytkownik jest już wyciszony."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Podstawowe ustawienia tej witryny StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Nazwa witryny nie może mieć zerową długość."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Należy posiadać prawidłowy kontaktowy adres e-mail."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Nieznany język \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Nieprawidłowy adres URL zgłaszania migawek."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Nieprawidłowa wartość wykonania migawki."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Częstotliwość migawek musi być liczbą."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Maksymalne ograniczenie tekstu to 14 znaków."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ograniczenie duplikatów musi wynosić jedną lub więcej sekund."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Ogólne"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nazwa witryny"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Nazwa strony, taka jak \"Mikroblog firmy X\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Dostarczane przez"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Tekst używany do odnośnika do zasług w stopce każdej strony"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Adres URL \"Dostarczane przez\""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "Adres URL używany do odnośnika do zasług w stopce każdej strony"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontaktowy adres e-mail witryny"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalne"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Domyślna strefa czasowa"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Domyśla strefa czasowa witryny, zwykle UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Domyślny język witryny"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Migawki"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Losowo podczas trafienia WWW"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Jako zaplanowane zadanie"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Migawki danych"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Kiedy wysyłać dane statystyczne na serwery status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Częstotliwość"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Migawki będą wysyłane co N trafień WWW"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Adres URL zgłaszania"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Migawki będą wysyłane na ten adres URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ograniczenia"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ograniczenie tekstu"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksymalna liczba znaków wpisów."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ograniczenie duplikatów"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Ile czasu użytkownicy muszą czekać (w sekundach), aby ponownie wysłać to "
"samo."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Wpis witryny"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nowa wiadomość"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Nie można zapisać ustawień wyglądu."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Wpis witryny"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Wpis witryny"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Ustawienia SMS"
@@ -3915,19 +3970,90 @@ msgstr ""
msgid "No code entered"
msgstr "Nie podano kodu"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Migawki"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Zmień konfigurację witryny"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Nieprawidłowa wartość wykonania migawki."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Częstotliwość migawek musi być liczbą."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Nieprawidłowy adres URL zgłaszania migawek."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Losowo podczas trafienia WWW"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Jako zaplanowane zadanie"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Migawki danych"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Kiedy wysyłać dane statystyczne na serwery status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Częstotliwość"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Migawki będą wysyłane co N trafień WWW"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Adres URL zgłaszania"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Migawki będą wysyłane na ten adres URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Zapisz ustawienia witryny"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Nie jesteÅ› subskrybowany do tego profilu."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Nie można zapisać subskrypcji."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Nie jest lokalnym użytkownikiem."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Ta czynność przyjmuje tylko żądania POST."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Nie ma takiego profilu."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"Nie można subskrybować zdalnego profilu profilu OMB 0.1 za pomocą tej "
+"czynności."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subskrybowano"
@@ -3991,7 +4117,7 @@ msgstr "Osoby, których wpisy obserwujesz."
msgid "These are the people whose notices %s listens to."
msgstr "Osoby, których wpisy obserwuje użytkownik %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4007,35 +4133,35 @@ msgstr ""
"twittersettings%%), można automatycznie subskrybować osoby, które tam już "
"obserwujesz."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "Użytkownik %s nie obserwuje nikogo."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Wpisy ze znacznikiem %1$s, strona %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Kanał wpisów dla znacznika %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Kanał wpisów dla znacznika %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Kanał wpisów dla znacznika %s (Atom)"
@@ -4090,7 +4216,7 @@ msgstr ""
msgid "No such tag."
msgstr "Nie ma takiego znacznika."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Metoda API jest w trakcie tworzenia."
@@ -4114,7 +4240,7 @@ msgstr "Brak identyfikatora profilu w żądaniu."
msgid "Unsubscribed"
msgstr "Zrezygnowano z subskrypcji"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4122,70 +4248,72 @@ msgstr ""
"Licencja nasłuchiwanego strumienia \"%1$s\" nie jest zgodna z licencją "
"witryny \"%2$s\"."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Użytkownik"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Ustawienia użytkownika dla tej witryny StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Nieprawidłowe ograniczenie informacji o sobie. Musi być liczbowa."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Nieprawidłowy tekst powitania. Maksymalna długość to 255 znaków."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Nieprawidłowa domyślna subskrypcja: \"%1$s\" nie jest użytkownikiem."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Ograniczenie informacji o sobie"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Maksymalna długość informacji o sobie jako liczba znaków."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nowi użytkownicy"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Powitanie nowego użytkownika"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Tekst powitania nowych użytkowników (maksymalnie 255 znaków)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Domyślna subskrypcja"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Automatyczne subskrybowanie nowych użytkowników do tego użytkownika."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Zaproszenia"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Zaproszenia są włączone"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Czy zezwolić użytkownikom zapraszanie nowych użytkowników."
@@ -4313,16 +4441,22 @@ msgstr "Grupy użytkownika %1$s, strona %2$d"
msgid "Search for more groups"
msgstr "Wyszukaj więcej grup"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "Użytkownik %s nie jest członkiem żadnej grupy."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Spróbuj [wyszukać grupy](%%action.groupsearch%%) i dołączyć do nich."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Aktualizacje z %1$s na %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4380,7 +4514,7 @@ msgstr ""
msgid "Plugins"
msgstr "Wtyczki"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersja"
@@ -4422,6 +4556,10 @@ msgstr "Nie jest częścią grupy."
msgid "Group leave failed."
msgstr "Opuszczenie grupy nie powiodło się."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Nie można zaktualizować lokalnej grupy."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4439,27 +4577,27 @@ msgstr "Nie można wprowadzić wiadomości."
msgid "Could not update message with new URI."
msgstr "Nie można zaktualizować wiadomości za pomocą nowego adresu URL."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania znacznika mieszania: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem podczas zapisywania wpisu. Za długi."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Za dużo wpisów w za krótkim czasie, weź głęboki oddech i wyślij ponownie za "
"kilka minut."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4467,41 +4605,73 @@ msgstr ""
"Za dużo takich samych wiadomości w za krótkim czasie, weź głęboki oddech i "
"wyślij ponownie za kilka minut."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Zabroniono ci wysyłania wpisów na tej witrynie."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem podczas zapisywania wpisu."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania odpowiedzi: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Zablokowano subskrybowanie."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Już subskrybowane."
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Użytkownik zablokował cię."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Niesubskrybowane."
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Nie można usunąć autosubskrypcji."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Nie można usunąć subskrypcji."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Nie można usunąć subskrypcji."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Witaj w %1$s, @%2$s."
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Nie można utworzyć grupy."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Nie można ustawić adresu URI grupy."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Nie można ustawić członkostwa w grupie."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Nie można zapisać informacji o lokalnej grupie."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Zmień ustawienia profilu"
@@ -4539,124 +4709,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bez nazwy"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Główna nawigacja witryny"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Strona domowa"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profil osobisty i oś czasu przyjaciół"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Osobiste"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Zmień adres e-mail, awatar, hasło, profil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Połącz"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Połącz z serwisami"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Połącz"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Zmień konfigurację witryny"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ZaproÅ›"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Zaproś przyjaciół i kolegów do dołączenia do ciebie na %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Wyloguj siÄ™"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ZaproÅ›"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Wyloguj siÄ™ z witryny"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Wyloguj siÄ™"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Utwórz konto"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Zarejestruj siÄ™"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Zaloguj siÄ™ na witrynie"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Pomoc"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Zaloguj siÄ™"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomóż mi."
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Wyszukaj"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Pomoc"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Wyszukaj osoby lub tekst"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Wyszukaj"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Wpis witryny"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokalne widoki"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Wpis strony"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Druga nawigacja witryny"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Pomoc"
+
+#: lib/action.php:754
msgid "About"
msgstr "O usłudze"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Prywatność"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Kod źródłowy"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Odznaka"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencja oprogramowania StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4665,12 +4899,12 @@ msgstr ""
"**%%site.name%%** jest usługą mikroblogowania prowadzoną przez [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** jest usługą mikroblogowania. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4681,99 +4915,153 @@ msgstr ""
"status.net/) w wersji %s, dostępnego na [Powszechnej Licencji Publicznej GNU "
"Affero](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licencja zawartości witryny"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Treść i dane %1$s są prywatne i poufne."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością %1$s. Wszystkie prawa "
"zastrzeżone."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością współtwórców. Wszystkie "
"prawa zastrzeżone."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Wszystko "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licencja."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginacja"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Później"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Wcześniej"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Nie można jeszcze obsługiwać zdalnej treści."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści XML."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści Base64."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Nie można wprowadzić zmian witryny."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Zmiany w tym panelu nie sÄ… dozwolone."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() nie jest zaimplementowane."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() nie jest zaimplementowane."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Nie można usunąć ustawienia wyglądu."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Podstawowa konfiguracja witryny"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Witryny"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Konfiguracja wyglÄ…du"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "WyglÄ…d"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Konfiguracja użytkownika"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Użytkownik"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Konfiguracja dostępu"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguracja ścieżek"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Konfiguracja sesji"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Wpis witryny"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Konfiguracja ścieżek"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"Zasób API wymaga dostępu do zapisu i do odczytu, ale powiadasz dostęp tylko "
"do odczytu."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4866,11 +5154,11 @@ msgstr "Powiadamia, kiedy pojawia się ten załącznik"
msgid "Tags for this attachment"
msgstr "Znaczniki dla tego załącznika"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Zmiana hasła nie powiodła się"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Zmiana hasła nie jest dozwolona"
@@ -5021,85 +5309,94 @@ msgstr "BÅ‚Ä…d podczas zapisywania wpisu."
msgid "Specify the name of the user to subscribe to"
msgstr "Podaj nazwę użytkownika do subskrybowania."
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Brak takiego użytkownika."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Subskrybowano użytkownika %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Podaj nazwę użytkownika do usunięcia subskrypcji."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Usunięto subskrypcję użytkownika %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Nie zaimplementowano polecenia."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Wyłączono powiadomienia."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Nie można wyłączyć powiadomień."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "WÅ‚Ä…czono powiadomienia."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Nie można włączyć powiadomień."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Polecenie logowania jest wyłączone"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Tego odnośnika można użyć tylko raz i będzie prawidłowy tylko przez dwie "
"minuty: %s."
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Usunięto subskrypcję użytkownika %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Nie subskrybujesz nikogo."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Subskrybujesz tÄ™ osobÄ™:"
msgstr[1] "Subskrybujesz te osoby:"
msgstr[2] "Subskrybujesz te osoby:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Nikt ciÄ™ nie subskrybuje."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Ta osoba ciÄ™ subskrybuje:"
msgstr[1] "Te osoby ciÄ™ subskrybujÄ…:"
msgstr[2] "Te osoby ciÄ™ subskrybujÄ…:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Nie jesteś członkiem żadnej grupy."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Jesteś członkiem tej grupy:"
msgstr[1] "Jesteś członkiem tych grup:"
msgstr[2] "Jesteś członkiem tych grup:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5113,6 +5410,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5143,14 +5441,15 @@ msgstr ""
"on - włącza powiadomienia\n"
"off - wyłącza powiadomienia\n"
"help - wyświetla tę pomoc\n"
-"follow <pseudonim> - włącza obserwowanie użytkownika\n"
+"follow <pseudonim> - subskrybuje użytkownika\n"
"groups - wyświetla listę grup, do których dołączyłeś\n"
"subscriptions - wyświetla listę obserwowanych osób\n"
"subscribers - wyświetla listę osób, które cię obserwują\n"
-"leave <pseudonim> - rezygnuje z obserwowania użytkownika\n"
+"leave <pseudonim> - usuwa subskrypcję użytkownika\n"
"d <pseudonim> <tekst> - bezpośrednia wiadomość do użytkownika\n"
"get <pseudonim> - zwraca ostatni wpis użytkownika\n"
"whois <pseudonim> - zwraca informacje o profilu użytkownika\n"
+"lose <pseudonim> - wymusza użytkownika do zatrzymania obserwowania cię\n"
"fav <pseudonim> - dodaje ostatni wpis użytkownika jako \"ulubiony\"\n"
"fav #<identyfikator_wpisu> - dodaje wpis z podanym identyfikatorem jako "
"\"ulubiony\"\n"
@@ -5179,19 +5478,19 @@ msgstr ""
"tracks - jeszcze nie zaimplementowano\n"
"tracking - jeszcze nie zaimplementowano\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Nie odnaleziono pliku konfiguracji."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Szukano plików konfiguracji w następujących miejscach: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Należy uruchomić instalator, aby to naprawić."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Przejdź do instalatora."
@@ -5288,6 +5587,11 @@ msgstr "Wybierz znacznik do ograniczonej listy"
msgid "Go"
msgstr "Przejdź"
+#: lib/grantroleform.php:91
+#, php-format
+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 "Adres URL strony domowej lub bloga grupy, albo temat"
@@ -5381,23 +5685,23 @@ msgstr "Błąd systemu podczas wysyłania pliku."
msgid "Not an image or corrupt file."
msgstr "To nie jest obraz lub lub plik jest uszkodzony."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Nieobsługiwany format pliku obrazu."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Utracono plik."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Nieznany typ pliku"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "KB"
@@ -5688,7 +5992,7 @@ msgstr ""
"rozmowę z innymi użytkownikami. Inni mogą wysyłać ci wiadomości tylko dla "
"twoich oczu."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "z"
@@ -5778,6 +6082,11 @@ msgstr "Do"
msgid "Available characters"
msgstr "Dostępne znaki"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Wyślij"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Wyślij wpis"
@@ -5811,48 +6120,48 @@ msgstr ""
"Pobieranie danych geolokalizacji trwa dłużej niż powinno, proszę spróbować "
"ponownie później"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "Północ"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "Południe"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "Wschód"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "Zachód"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "w"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "w rozmowie"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Powtórzone przez"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Odpowiedz na ten wpis"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Odpowiedz"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Powtórzono wpis"
@@ -5884,10 +6193,6 @@ msgstr "BÅ‚Ä…d podczas wprowadzania zdalnego profilu"
msgid "Duplicate notice"
msgstr "Duplikat wpisu"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Zablokowano subskrybowanie."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Nie można wprowadzić nowej subskrypcji."
@@ -5929,7 +6234,7 @@ msgstr "Znaczniki we wpisach użytkownika %s"
msgid "Unknown"
msgstr "Nieznane"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subskrypcje"
@@ -5937,23 +6242,23 @@ msgstr "Subskrypcje"
msgid "All subscriptions"
msgstr "Wszystkie subskrypcje"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subskrybenci"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Wszyscy subskrybenci"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Identyfikator użytkownika"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Członek od"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Wszystkie grupy"
@@ -5993,7 +6298,12 @@ msgstr "Powtórzyć ten wpis?"
msgid "Repeat this notice"
msgstr "Powtórz ten wpis"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Zablokuj tego użytkownika w tej grupie"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
"Nie określono pojedynczego użytkownika dla trybu pojedynczego użytkownika."
@@ -6014,6 +6324,10 @@ msgstr "Przeszukaj witrynÄ™"
msgid "Keyword(s)"
msgstr "SÅ‚owa kluczowe"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Wyszukaj"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Przeszukaj pomoc"
@@ -6065,33 +6379,14 @@ msgstr "Osoby subskrybowane do %s"
msgid "Groups %s is a member of"
msgstr "Grupy %s są członkiem"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Już subskrybowane."
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Użytkownik zablokował cię."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Nie można subskrybować."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Nie można subskrybować innych do ciebie."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Niesubskrybowane."
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Nie można usunąć autosubskrypcji."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ZaproÅ›"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Nie można usunąć subskrypcji."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Zaproś przyjaciół i kolegów do dołączenia do ciebie na %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6143,67 +6438,84 @@ msgstr "Zmodyfikuj awatar"
msgid "User actions"
msgstr "Czynności użytkownika"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Zmodyfikuj ustawienia profilu"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Edycja"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Wyślij bezpośrednią wiadomość do tego użytkownika"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Wiadomość"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderuj"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profil użytkownika"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratorzy"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderuj"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "kilka sekund temu"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "około rok temu"
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index a2c8fd60c..8dd23b162 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,78 +9,86 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:39+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:05+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acesso"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Gravar configurações do site"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Registar"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privado"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Proibir utilizadores anónimos (sem sessão iniciada) de ver o site?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Só por convite"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privado"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Permitir o registo só a convidados."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Fechado"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Só por convite"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Impossibilitar registos novos."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Gravar"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fechado"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Gravar configurações do site"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Gravar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Página não encontrada."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -94,53 +102,60 @@ msgstr "Página não encontrada."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Utilizador não encontrado."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "Perfis bloqueados de %1$s, página %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s e amigos"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Fonte para os amigos de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Fonte para os amigos de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Fonte para os amigos de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
"Estas são as notas de %s e dos amigos, mas ainda não publicaram nenhuma."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -149,7 +164,8 @@ msgstr ""
"Tente subscrever mais pessoas, [juntar-se a um grupo] (%%action.groups%%) ou "
"publicar qualquer coisa."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -158,7 +174,7 @@ msgstr ""
"Pode tentar [dar um toque em %1$s](../%2$s) a partir do perfil ou [publicar "
"qualquer coisa à sua atenção](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -167,12 +183,13 @@ msgstr ""
"Podia [registar uma conta](%%action.register%%) e depois tocar %s ou "
"publicar uma nota à sua atenção."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Você e seus amigos"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Actualizações de %1$s e amigos no %2$s!"
@@ -185,20 +202,20 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método da API não encontrado."
@@ -231,8 +248,9 @@ msgstr "Não foi possível actualizar o utilizador."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Utilizador não tem perfil."
@@ -258,7 +276,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -370,68 +388,68 @@ msgstr "Não foi possível determinar o utilizador de origem."
msgid "Could not find target user."
msgstr "Não foi possível encontrar o utilizador de destino."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Utilizador só deve conter letras minúsculas e números. Sem espaços."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Utilizador já é usado. Tente outro."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Utilizador não é válido."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Página de ínicio não é uma URL válida."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Nome completo demasiado longo (máx. 255 caracteres)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Descrição demasiado longa (máx. 140 caracteres)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Localidade demasiado longa (máx. 255 caracteres)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Demasiados sinónimos (máx. %d)."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Sinónimo inválido: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Sinónimo \"%s\" já em uso. Tente outro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Os sinónimos não podem ser iguais ao nome do utilizador."
@@ -442,15 +460,15 @@ msgstr "Os sinónimos não podem ser iguais ao nome do utilizador."
msgid "Group not found!"
msgstr "Grupo não foi encontrado!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Já é membro desse grupo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Foi bloqueado desse grupo pelo gestor."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Não foi possível adicionar %1$s ao grupo %2$s."
@@ -459,7 +477,7 @@ msgstr "Não foi possível adicionar %1$s ao grupo %2$s."
msgid "You are not a member of this group."
msgstr "Não é membro deste grupo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Não foi possível remover %1$s do grupo %2$s."
@@ -491,7 +509,7 @@ msgstr "Tamanho inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -500,7 +518,7 @@ msgstr "Tamanho inválido."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -535,7 +553,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -558,13 +576,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -642,23 +660,11 @@ msgstr "Formato não suportado."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritas de %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizações preferidas por %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Notas de %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualizações de %1#s a %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -684,17 +690,17 @@ msgstr "%s actualizações de todos!"
msgid "Repeated to %s"
msgstr "Repetida para %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repetências de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notas categorizadas com %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizações categorizadas com %1$s em %2$s!"
@@ -710,8 +716,7 @@ msgstr "Anexo não encontrado."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Nenhuma utilizador."
@@ -723,7 +728,7 @@ msgstr "Tamanho não definido."
msgid "Invalid size."
msgstr "Tamanho inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -740,30 +745,30 @@ msgid "User without matching profile"
msgstr "Utilizador sem perfil correspondente"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Configurações do avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Antevisão"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Apagar"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Carregar"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Cortar"
@@ -771,7 +776,7 @@ msgstr "Cortar"
msgid "Pick a square area of the image to be your avatar"
msgstr "Escolha uma área quadrada da imagem para ser o seu avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Perdi os dados do nosso ficheiro."
@@ -806,22 +811,22 @@ msgstr ""
"de futuro e você não receberá notificações das @-respostas dele."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Não"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Não bloquear este utilizador"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Sim"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este utilizador"
@@ -829,39 +834,43 @@ msgstr "Bloquear este utilizador"
msgid "Failed to save block information."
msgstr "Não foi possível gravar informação do bloqueio."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Grupo não foi encontrado."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s perfis bloqueados"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Perfis bloqueados de %1$s, página %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Uma lista dos utilizadores com entrada bloqueada neste grupo."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Desbloquear utilizador do grupo"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloquear"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Desbloquear este utilizador"
@@ -918,7 +927,7 @@ msgid "Conversation"
msgstr "Conversação"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notas"
@@ -940,7 +949,7 @@ msgstr "Não é membro deste grupo."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com a sua sessão."
@@ -969,12 +978,13 @@ msgstr "Não apagar esta nota"
msgid "Delete this application"
msgstr "Apagar esta nota"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Não iniciou sessão."
@@ -1003,7 +1013,7 @@ msgstr "Tem a certeza de que quer apagar esta nota?"
msgid "Do not delete this notice"
msgstr "Não apagar esta nota"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Apagar esta nota"
@@ -1019,7 +1029,7 @@ msgstr "Só pode apagar utilizadores locais."
msgid "Delete user"
msgstr "Apagar utilizador"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1027,12 +1037,12 @@ msgstr ""
"Tem a certeza de que quer apagar este utilizador? Todos os dados do "
"utilizador serão eliminados da base de dados, sem haver cópias."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Apagar este utilizador"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Estilo"
@@ -1135,6 +1145,18 @@ msgstr "Repor estilos predefinidos"
msgid "Reset back to default"
msgstr "Repor predefinição"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Gravar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Gravar o estilo"
@@ -1238,29 +1260,29 @@ msgstr "Editar grupo %s"
msgid "You must be logged in to create a group."
msgstr "Tem de iniciar uma sessão para criar o grupo."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Tem de ser administrador para editar o grupo."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Use este formulário para editar o grupo."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "descrição é demasiada extensa (máx. %d caracteres)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Não foi possível actualizar o grupo."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Não foi possível criar sinónimos."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Opções gravadas."
@@ -1383,7 +1405,7 @@ msgid "Cannot normalize that email address"
msgstr "Não é possível normalizar esse endereço electrónico"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correio electrónico é inválido."
@@ -1575,6 +1597,25 @@ msgstr "Ficheiro não foi encontrado."
msgid "Cannot read file."
msgstr "Não foi possível ler o ficheiro."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Tamanho inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Não pode impedir notas públicas neste site."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O utilizador já está silenciado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1604,7 +1645,7 @@ msgstr "Acesso do utilizador ao grupo já foi bloqueado."
msgid "User is not a member of group."
msgstr "Utilizador não é membro do grupo."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear acesso do utilizador ao grupo"
@@ -1639,11 +1680,11 @@ msgstr "Sem ID."
msgid "You must be logged in to edit a group."
msgstr "Precisa de iniciar sessão para editar um grupo."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Estilo do grupo"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1651,20 +1692,20 @@ msgstr ""
"Personalize o aspecto do seu grupo com uma imagem de fundo e uma paleta de "
"cores à sua escolha."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Não foi possível actualizar o estilo."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Preferências de estilo foram gravadas."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logotipo do grupo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1672,62 +1713,68 @@ msgstr ""
"Pode carregar uma imagem para logotipo do seu grupo. O tamanho máximo do "
"ficheiro é %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Utilizador sem perfil correspondente."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Escolha uma área quadrada da imagem para ser o logotipo."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logotipo actualizado."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Não foi possível actualizar o logotipo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Membros do grupo %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Membros do grupo %1$s, página %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Uma lista dos utilizadores neste grupo."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Gestor"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Tornar utilizador o gestor do grupo"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tornar Gestor"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Tornar este utilizador um gestor"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Notas de %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualizações dos membros de %1$s em %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -1987,16 +2034,19 @@ msgstr "Mensagem pessoal"
msgid "Optionally add a personal message to the invitation."
msgstr "Pode optar por acrescentar uma mensagem pessoal ao convite"
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s convidou-o a juntar-se a ele no %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2056,7 +2106,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Precisa de iniciar uma sessão para se juntar a um grupo."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Nenhuma utilizador."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s juntou-se ao grupo %2$s"
@@ -2065,11 +2120,11 @@ msgstr "%1$s juntou-se ao grupo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Precisa de iniciar uma sessão para deixar um grupo."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Não é um membro desse grupo."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s deixou o grupo %2$s"
@@ -2086,8 +2141,7 @@ msgstr "Nome de utilizador ou senha incorrectos."
msgid "Error setting user. You are probably not authorized."
msgstr "Erro ao preparar o utilizador. Provavelmente não está autorizado."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Entrar"
@@ -2347,8 +2401,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -2494,7 +2548,8 @@ msgstr "Não é possível guardar a nova senha."
msgid "Password saved."
msgstr "Senha gravada."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Localizações"
@@ -2527,7 +2582,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Servidor SSL inválido. O tamanho máximo é 255 caracteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Site"
@@ -2615,7 +2669,7 @@ msgstr "Directório dos fundos"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2671,11 +2725,11 @@ msgstr "Categoria de pessoas inválida: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utilizadores auto-categorizados com %1$s - página %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Conteúdo da nota é inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2701,7 +2755,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 letras minúsculas ou números, sem pontuação ou espaços"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nome completo"
@@ -2729,7 +2783,7 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2756,7 +2810,7 @@ msgstr ""
"Categorias para si (letras, números, -, ., _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2782,7 +2836,7 @@ msgstr "Subscrever automaticamente quem me subscreva (óptimo para não-humanos)
msgid "Bio is too long (max %d chars)."
msgstr "Biografia demasiado extensa (máx. %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horário não foi seleccionado."
@@ -2795,23 +2849,24 @@ msgstr "Idioma é demasiado extenso (máx. 50 caracteres)."
msgid "Invalid tag: \"%s\""
msgstr "Categoria inválida: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Não foi possível actualizar o utilizador para subscrição automática."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Não foi possível gravar as preferências de localização."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Não foi possível gravar o perfil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Não foi possível gravar as categorias."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Configurações gravadas."
@@ -2824,28 +2879,28 @@ msgstr "Além do limite de página (%s)"
msgid "Could not retrieve public stream."
msgstr "Não foi possível importar as notas públicas."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Notas públicas, página %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Notas públicas"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fonte de Notas Públicas (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fonte de Notas Públicas (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fonte de Notas Públicas (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2854,11 +2909,11 @@ msgstr ""
"Estas são as notas públicas do site %%site.name%% mas ninguém publicou nada "
"ainda."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Seja a primeira pessoa a publicar!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2866,7 +2921,7 @@ msgstr ""
"Podia [registar uma conta](%%action.register%%) e ser a primeira pessoa a "
"publicar!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2879,7 +2934,7 @@ msgstr ""
"[StatusNet](http://status.net/). [Registe-se agora](%%action.register%%) "
"para partilhar notas sobre si, família e amigos! ([Saber mais](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3061,8 +3116,7 @@ msgstr "Desculpe, código de convite inválido."
msgid "Registration successful"
msgstr "Registo efectuado"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registar"
@@ -3104,7 +3158,7 @@ msgid "Same as password above. Required."
msgstr "Repita a senha acima. Obrigatório."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correio"
@@ -3210,7 +3264,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil noutro serviço de microblogues compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscrever"
@@ -3248,7 +3302,7 @@ msgstr "Não pode repetir a sua própria nota."
msgid "You already repeated that notice."
msgstr "Já repetiu essa nota."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetida"
@@ -3256,33 +3310,33 @@ msgstr "Repetida"
msgid "Repeated!"
msgstr "Repetida!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Respostas a %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Respostas a %1$s em %2$s!"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Fonte de respostas a %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Fonte de respostas a %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Fonte de respostas a %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3291,7 +3345,7 @@ msgstr ""
"Estas são as notas de resposta a %1$s, mas %2$s ainda não recebeu nenhuma "
"resposta."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3300,7 +3354,7 @@ msgstr ""
"Pode meter conversa com outros utilizadores, subscrever mais pessoas ou "
"[juntar-se a grupos](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3314,6 +3368,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostas a %1$s em %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Não pode silenciar utilizadores neste site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Utilizador sem perfil correspondente."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3326,8 +3390,9 @@ msgstr "Não pode impedir notas públicas neste site."
msgid "User is already sandboxed."
msgstr "Utilizador já está impedido de criar notas públicas."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessões"
@@ -3352,8 +3417,8 @@ msgstr "Depuração de sessões"
msgid "Turn on debugging output for sessions."
msgstr "Ligar a impressão de dados de depuração, para sessões."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Gravar configurações do site"
@@ -3386,8 +3451,8 @@ msgstr "Paginação"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3449,22 +3514,22 @@ msgstr "Notas favoritas de %s"
msgid "Could not retrieve favorite notices."
msgstr "Não foi possível importar notas favoritas."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Fonte dos favoritos de %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Fonte dos favoritos de %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Fonte dos favoritos de %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3473,7 +3538,7 @@ msgstr ""
"notas de que goste, para marcá-las para mais tarde ou para lhes dar "
"relevância."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3482,7 +3547,7 @@ msgstr ""
"%s ainda não adicionou nenhuma nota às favoritas. Publique algo interessante "
"que mude este estado de coisas :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3493,7 +3558,7 @@ msgstr ""
"conta](%%action.register%%) e publicar algo interessante que mude este "
"estado de coisas :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Esta é uma forma de partilhar aquilo de que gosta."
@@ -3507,67 +3572,67 @@ msgstr "Grupo %s"
msgid "%1$s group, page %2$d"
msgstr "Membros do grupo %1$s, página %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Anotação"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Sinónimos"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Acções do grupo"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de notas do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de notas do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de notas do grupo %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF do grupo %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3583,7 +3648,7 @@ msgstr ""
"[Registe-se agora](%%action.register%%) para se juntar a este grupo e a "
"muitos mais! ([Saber mais](%%doc.help%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3596,7 +3661,7 @@ msgstr ""
"programa de Software Livre [StatusNet](http://status.net/). Os membros deste "
"grupo partilham mensagens curtas acerca das suas vidas e interesses. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Gestores"
@@ -3718,148 +3783,139 @@ msgid "User is already silenced."
msgstr "O utilizador já está silenciado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurações básicas para este site StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Nome do site não pode ter comprimento zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Tem de ter um endereço válido para o correio electrónico de contacto."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Língua desconhecida \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL para onde enviar instantâneos é inválida"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valor de criação do instantâneo é inválido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Frequência dos instantâneos estatísticos tem de ser um número."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "O valor mínimo de limite para o texto é 140 caracteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "O limite de duplicados tem de ser 1 ou mais segundos."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "O nome do seu site, por exemplo \"Microblogue NomeDaEmpresa\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texto usado para a ligação de atribuição no rodapé de cada página"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL da atribuição"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usada para a ligação de atribuição no rodapé de cada página"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Endereço de correio electrónico de contacto para o site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário, por omissão"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horário por omissão, para o site; normalmente, UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma do site, por omissão"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantâneos"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente, durante o acesso pela internet"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Num processo agendado"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantâneos dos dados"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando enviar dados estatísticos para os servidores do status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequência"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Instantâneos serão enviados uma vez a cada N acessos da internet"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL para relatórios"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Instantâneos serão enviados para esta URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres nas notas."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicações"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo os utilizadores terão de esperar (em segundos) para publicar a "
"mesma coisa outra vez."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso do site"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Mensagem nova"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Não foi possível gravar as configurações do estilo."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso do site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso do site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configurações de SMS"
@@ -3960,19 +4016,90 @@ msgstr ""
msgid "No code entered"
msgstr "Nenhum código introduzido"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantâneos"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Alterar a configuração do site"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valor de criação do instantâneo é inválido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Frequência dos instantâneos estatísticos tem de ser um número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL para onde enviar instantâneos é inválida"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatoriamente, durante o acesso pela internet"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Num processo agendado"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantâneos dos dados"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando enviar dados estatísticos para os servidores do status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequência"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Instantâneos serão enviados uma vez a cada N acessos da internet"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL para relatórios"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Instantâneos serão enviados para esta URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Gravar configurações do site"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Não subscreveu esse perfil."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Não foi possível gravar a subscrição."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "O utilizador não é local."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Ficheiro não foi encontrado."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Não subscreveu esse perfil."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscrito"
@@ -4036,7 +4163,7 @@ msgstr "Estas são as pessoas cujas notas está a escutar."
msgid "These are the people whose notices %s listens to."
msgstr "Estas são as pessoas cujas notas %s está a escutar."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4052,35 +4179,35 @@ msgstr ""
"twittersettings%%) pode subscrever automaticamente as pessoas que já segue "
"lá."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s não está a ouvir ninguém."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Utilizadores auto-categorizados com %1$s - página %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Fonte de notas para a categoria %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Fonte de notas para a categoria %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Fonte de notas para a categoria %s (Atom)"
@@ -4134,7 +4261,7 @@ msgstr ""
msgid "No such tag."
msgstr "Categoria não existe."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Método da API em desenvolvimento."
@@ -4158,7 +4285,7 @@ msgstr "O pedido não tem a identificação do perfil."
msgid "Unsubscribed"
msgstr "Subscrição cancelada"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4166,70 +4293,72 @@ msgstr ""
"Licença ‘%1$s’ da listenee stream não é compatível com a licença ‘%2$s’ do "
"site."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Utilizador"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Configurações do utilizador para este site StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Limite da biografia inválido. Tem de ser numérico."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Texto de boas-vindas inválido. Tamanho máx. é 255 caracteres."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Subscrição predefinida é inválida: '%1$s' não é utilizador."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Perfil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Limite da Biografia"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Tamanho máximo de uma biografia em caracteres."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Utilizadores novos"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Boas-vindas a utilizadores novos"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Texto de boas-vindas a utilizadores novos (máx. 255 caracteres)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Subscrição predefinida"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Novos utilizadores subscrevem automaticamente este utilizador."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Convites"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Convites habilitados"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Permitir, ou não, que utilizadores convidem utilizadores novos."
@@ -4360,16 +4489,22 @@ msgstr "Membros do grupo %1$s, página %2$d"
msgid "Search for more groups"
msgstr "Procurar mais grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s não é membro de nenhum grupo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Tente [pesquisar grupos](%%action.groupsearch%%) e juntar-se a eles."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualizações de %1#s a %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4424,7 +4559,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
@@ -4467,6 +4602,11 @@ msgstr "Não foi possível actualizar o grupo."
msgid "Group leave failed."
msgstr "Perfil do grupo"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Não foi possível actualizar o grupo."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4484,27 +4624,27 @@ msgstr "Não foi possível inserir a mensagem."
msgid "Could not update message with new URI."
msgstr "Não foi possível actualizar a mensagem com a nova URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro na base de dados ao inserir a marca: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema na gravação da nota. Demasiado longa."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema na gravação da nota. Utilizador desconhecido."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiadas notas, demasiado rápido; descanse e volte a publicar daqui a "
"alguns minutos."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4512,42 +4652,76 @@ msgstr ""
"Demasiadas mensagens duplicadas, demasiado rápido; descanse e volte a "
"publicar daqui a alguns minutos."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Está proibido de publicar notas neste site."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Foi bloqueado de fazer subscrições"
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Já subscrito!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "O utilizador bloqueou-o."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Não subscrito!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Não foi possível apagar a auto-subscrição."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Não foi possível apagar a subscrição."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Não foi possível apagar a subscrição."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%1$s dá-lhe as boas-vindas, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Não foi possível configurar membros do grupo."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Não foi possível configurar membros do grupo."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Não foi possível gravar a subscrição."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Modificar as suas definições de perfil"
@@ -4585,124 +4759,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária deste site"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Início"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil pessoal e notas dos amigos"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Pessoal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Altere o seu endereço electrónico, avatar, senha, perfil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Ligar"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ligar aos serviços"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Ligar"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Alterar a configuração do site"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convidar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Gestor"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convidar amigos e colegas para se juntarem a si em %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convidar"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Terminar esta sessão"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Sair"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Criar uma conta"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registar"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Iniciar uma sessão"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Entrar"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Pesquisa"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Procurar pessoas ou pesquisar texto"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Pesquisa"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso do site"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locais"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso da página"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária deste site"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Código"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblema"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença de software do StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4711,12 +4949,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblogues. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4727,96 +4965,150 @@ msgstr ""
"disponibilizado nos termos da [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença de conteúdos do site"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Tudo "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriores"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Anteriores"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Não pode fazer alterações a este site."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Não são permitidas alterações a esse painel."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() não implementado."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() não implementado."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Não foi possível apagar a configuração do estilo."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuração básica do site"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuração do estilo"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Estilo"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Configuração das localizações"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Utilizador"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Configuração do estilo"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração das localizações"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Configuração do estilo"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Aviso do site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuração das localizações"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4911,11 +5203,11 @@ msgstr "Notas em que este anexo aparece"
msgid "Tags for this attachment"
msgstr "Categorias para este anexo"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Não foi possível mudar a palavra-chave"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Não é permitido mudar a palavra-chave"
@@ -5066,82 +5358,93 @@ msgstr "Erro ao gravar nota."
msgid "Specify the name of the user to subscribe to"
msgstr "Introduza o nome do utilizador para subscrever"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Utilizador não encontrado."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Subscreveu %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Introduza o nome do utilizador para deixar de subscrever"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Deixou de subscrever %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Comando ainda não implementado."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificação desligada."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Não foi possível desligar a notificação."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificação ligada."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Não foi possível ligar a notificação."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Comando para iniciar sessão foi desactivado"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Esta ligação é utilizável uma única vez e só durante os próximos 2 minutos: %"
"s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Deixou de subscrever %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Não subscreveu ninguém."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Subscreveu esta pessoa:"
msgstr[1] "Subscreveu estas pessoas:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ninguém subscreve as suas notas."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Esta pessoa subscreve as suas notas:"
msgstr[1] "Estas pessoas subscrevem as suas notas:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Não está em nenhum grupo."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Está no grupo:"
msgstr[1] "Está nos grupos:"
-#: lib/command.php:728
+#: lib/command.php:769
+#, fuzzy
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5155,6 +5458,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5219,19 +5523,19 @@ msgstr ""
"tracks - ainda não implementado.\n"
"tracking - ainda não implementado.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ficheiro de configuração não encontrado. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Procurei ficheiros de configuração nos seguintes sítios: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Talvez queira correr o instalador para resolver esta questão."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5331,6 +5635,11 @@ msgstr "Escolha uma categoria para reduzir a lista"
msgid "Go"
msgstr "Prosseguir"
+#: lib/grantroleform.php:91
+#, php-format
+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 da página ou do blogue, deste grupo ou assunto"
@@ -5421,23 +5730,23 @@ msgstr "Ocorreu um erro de sistema ao transferir o ficheiro."
msgid "Not an image or corrupt file."
msgstr "Ficheiro não é uma imagem ou está corrompido."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato do ficheiro da imagem não é suportado."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Perdi o nosso ficheiro."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tipo do ficheiro é desconhecido"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5727,7 +6036,7 @@ msgstr ""
"conversa com outros utilizadores. Outros podem enviar-lhe mensagens, a que "
"só você terá acesso."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "de"
@@ -5820,6 +6129,12 @@ msgstr "Para"
msgid "Available characters"
msgstr "Caracteres disponíveis"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Enviar"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Enviar uma nota"
@@ -5852,48 +6167,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "O"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "coords."
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder a esta nota"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Nota repetida"
@@ -5925,10 +6240,6 @@ msgstr "Erro ao inserir perfil remoto"
msgid "Duplicate notice"
msgstr "Nota duplicada"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Foi bloqueado de fazer subscrições"
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Não foi possível inserir nova subscrição."
@@ -5970,7 +6281,7 @@ msgstr "Categorias nas notas de %s"
msgid "Unknown"
msgstr "Desconhecida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscrições"
@@ -5978,23 +6289,23 @@ msgstr "Subscrições"
msgid "All subscriptions"
msgstr "Todas as subscrições"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Todos os subscritores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID do utilizador"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos os grupos"
@@ -6034,7 +6345,12 @@ msgstr "Repetir esta nota?"
msgid "Repeat this notice"
msgstr "Repetir esta nota"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear acesso deste utilizador a este grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6054,6 +6370,10 @@ msgstr "Pesquisar site"
msgid "Keyword(s)"
msgstr "Categorias"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Pesquisa"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Pesquisar ajuda"
@@ -6105,33 +6425,14 @@ msgstr "Pessoas que subscrevem %s"
msgid "Groups %s is a member of"
msgstr "Grupos de que %s é membro"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Já subscrito!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "O utilizador bloqueou-o."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Não foi possível subscrever."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Não foi possível que outro o subscrevesse."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Não subscrito!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Não foi possível apagar a auto-subscrição."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Convidar"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Não foi possível apagar a subscrição."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Convidar amigos e colegas para se juntarem a si em %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6183,67 +6484,84 @@ msgstr "Editar Avatar"
msgid "User actions"
msgstr "Acções do utilizador"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Editar configurações do perfil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Enviar mensagem directa a este utilizador"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Mensagem"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Gestores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "há alguns segundos"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "há cerca de um ano"
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index b9ffc361b..7ba00b717 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -11,75 +11,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:07:20+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:07+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acesso"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Configurações de acesso ao site"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registro"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Particular"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "Impedir usuários anônimos (não autenticados) de visualizar o site?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Somente convidados"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Particular"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Cadastro liberado somente para convidados."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Fechado"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Somente convidados"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Desabilita novos registros."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Salvar"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fechado"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Salvar as configurações de acesso"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Salvar"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Esta página não existe."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,46 +101,53 @@ msgstr "Esta página não existe."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Este usuário não existe."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s e amigos, pág. %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s e amigos"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Fonte de mensagens dos amigos de %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Fonte de mensagens dos amigos de %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Fonte de mensagens dos amigos de %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
@@ -140,7 +155,7 @@ msgstr ""
"Esse é o fluxo de mensagens de %s e seus amigos, mas ninguém publicou nada "
"ainda."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -149,7 +164,8 @@ msgstr ""
"Tente assinar mais pessoas, [unir-ser a um grupo](%%action.groups%%) ou "
"publicar algo."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -159,7 +175,7 @@ msgstr ""
"[publicar alguma coisa que desperte seu interesse](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -168,7 +184,8 @@ msgstr ""
"Por que não [registrar uma conta](%%%%action.register%%%%) e então chamar a "
"atenção de %s ou publicar uma mensagem para sua atenção."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Você e amigos"
@@ -186,20 +203,20 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "O método da API não foi encontrado!"
@@ -233,8 +250,9 @@ msgstr "Não foi possível atualizar o usuário."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "O usuário não tem perfil."
@@ -260,7 +278,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -372,7 +390,7 @@ msgstr "Não foi possível determinar o usuário de origem."
msgid "Could not find target user."
msgstr "Não foi possível encontrar usuário de destino."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -380,62 +398,62 @@ msgstr ""
"A identificação deve conter apenas letras minúsculas e números e não pode "
"ter e espaços."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Esta identificação já está em uso. Tente outro."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Não é uma identificação válida."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "A URL informada não é válida."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Nome completo muito extenso (máx. 255 caracteres)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Descrição muito extensa (máximo %d caracteres)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Localização muito extensa (máx. 255 caracteres)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Muitos apelidos! O máximo são %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Apelido inválido: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "O apelido \"%s\" já está em uso. Tente outro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "O apelido não pode ser igual à identificação."
@@ -446,15 +464,15 @@ msgstr "O apelido não pode ser igual à identificação."
msgid "Group not found!"
msgstr "O grupo não foi encontrado!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Você já é membro desse grupo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "O administrador desse grupo bloqueou sua inscrição."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Não foi possível associar o usuário %1$s ao grupo %2$s."
@@ -463,7 +481,7 @@ msgstr "Não foi possível associar o usuário %1$s ao grupo %2$s."
msgid "You are not a member of this group."
msgstr "Você não é membro deste grupo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Não foi possível remover o usuário %1$s do grupo %2$s."
@@ -494,7 +512,7 @@ msgstr "Token inválido."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -503,7 +521,7 @@ msgstr "Token inválido."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -540,7 +558,7 @@ msgstr "O token %s solicitado foi negado e revogado."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -567,13 +585,13 @@ msgstr ""
"fornecer acesso à sua conta %4$s somente para terceiros nos quais você "
"confia."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -654,18 +672,6 @@ msgstr "%1$s / Favoritas de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Mensagens de %s"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Mensagens de %1$s no %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -676,12 +682,12 @@ msgstr "%1$s / Mensagens mencionando %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Mensagens públicas de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s mensagens de todo mundo!"
@@ -696,7 +702,7 @@ msgstr "Repetida para %s"
msgid "Repeats of %s"
msgstr "Repetições de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Mensagens etiquetadas como %s"
@@ -717,8 +723,7 @@ msgstr "Este anexo não existe."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Nenhuma identificação."
@@ -730,7 +735,7 @@ msgstr "Sem tamanho definido."
msgid "Invalid size."
msgstr "Tamanho inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -748,30 +753,30 @@ msgid "User without matching profile"
msgstr "Usuário sem um perfil correspondente"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Configurações do avatar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Original"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Visualização"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Excluir"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Enviar"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Cortar"
@@ -779,7 +784,7 @@ msgstr "Cortar"
msgid "Pick a square area of the image to be your avatar"
msgstr "Selecione uma área quadrada da imagem para ser seu avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Os dados do nosso arquivo foram perdidos."
@@ -815,22 +820,22 @@ msgstr ""
"você."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Não"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Não bloquear este usuário"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Sim"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este usuário"
@@ -838,39 +843,43 @@ msgstr "Bloquear este usuário"
msgid "Failed to save block information."
msgstr "Não foi possível salvar a informação de bloqueio."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Esse grupo não existe."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "Perfis bloqueados no %s"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Perfis bloqueados no %1$s, pág. %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "Uma lista dos usuários proibidos de se associarem a este grupo."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Desbloquear o usuário do grupo"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Desbloquear"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Desbloquear este usuário"
@@ -926,7 +935,7 @@ msgid "Conversation"
msgstr "Conversa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Mensagens"
@@ -945,7 +954,7 @@ msgstr "Você não é o dono desta aplicação."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com o seu token de sessão."
@@ -971,12 +980,13 @@ msgstr "Não excluir esta aplicação"
msgid "Delete this application"
msgstr "Excluir esta aplicação"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Você não está autenticado."
@@ -1005,7 +1015,7 @@ msgstr "Tem certeza que deseja excluir esta mensagem?"
msgid "Do not delete this notice"
msgstr "Não excluir esta mensagem."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Excluir esta mensagem"
@@ -1021,7 +1031,7 @@ msgstr "Você só pode excluir usuários locais."
msgid "Delete user"
msgstr "Excluir usuário"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1029,12 +1039,12 @@ msgstr ""
"Tem certeza que deseja excluir este usuário? Isso eliminará todos os dados "
"deste usuário do banco de dados, sem cópia de segurança."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Excluir este usuário"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Aparência"
@@ -1137,6 +1147,18 @@ msgstr "Restaura a aparência padrão"
msgid "Reset back to default"
msgstr "Restaura de volta ao padrão"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Salvar"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Salvar a aparência"
@@ -1228,29 +1250,29 @@ msgstr "Editar o grupo %s"
msgid "You must be logged in to create a group."
msgstr "Você deve estar autenticado para criar um grupo."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Você deve ser um administrador para editar o grupo."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Use esse formulário para editar o grupo."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "descrição muito extensa (máximo %d caracteres)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Não foi possível atualizar o grupo."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Não foi possível criar os apelidos."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "As configurações foram salvas."
@@ -1372,7 +1394,7 @@ msgid "Cannot normalize that email address"
msgstr "Não foi possível normalizar este endereço de e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Não é um endereço de e-mail válido."
@@ -1566,6 +1588,25 @@ msgstr "Esse arquivo não existe."
msgid "Cannot read file."
msgstr "Não foi possível ler o arquivo."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Token inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Você não pode colocar usuários deste site em isolamento."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O usuário já está silenciado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1595,7 +1636,7 @@ msgstr "O usuário já está bloqueado no grupo."
msgid "User is not a member of group."
msgstr "O usuário não é um membro do grupo"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear o usuário no grupo"
@@ -1631,11 +1672,11 @@ msgstr "Nenhuma ID."
msgid "You must be logged in to edit a group."
msgstr "Você precisa estar autenticado para editar um grupo."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Aparência do grupo"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1643,20 +1684,20 @@ msgstr ""
"Personalize a aparência do grupo com uma imagem de fundo e uma paleta de "
"cores à sua escolha."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Não foi possível atualizar a aparência."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "As configurações da aparência foram salvas."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Logo do grupo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1664,62 +1705,68 @@ msgstr ""
"Você pode enviar uma imagem de logo para o seu grupo. O tamanho máximo do "
"arquivo é %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Usuário sem um perfil correspondente"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Selecione uma área quadrada da imagem para definir a logo"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "A logo foi atualizada."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Não foi possível atualizar a logo."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "Membros do grupo %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "Membros do grupo %1$s, pág. %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "Uma lista dos usuários deste grupo."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Tornar o usuário um administrador do grupo"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tornar administrador"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Torna este usuário um administrador"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Mensagens de %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Atualizações dos membros de %1$s no %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -1980,16 +2027,19 @@ msgstr "Mensagem pessoal"
msgid "Optionally add a personal message to the invitation."
msgstr "Você pode, opcionalmente, adicionar uma mensagem pessoal ao convite."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s convidou você para se juntar a %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2050,7 +2100,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Você deve estar autenticado para se associar a um grupo."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Nenhuma identificação."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s associou-se ao grupo %2$s"
@@ -2059,11 +2114,11 @@ msgstr "%1$s associou-se ao grupo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Você deve estar autenticado para sair de um grupo."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Você não é um membro desse grupo."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s deixou o grupo %2$s"
@@ -2081,8 +2136,7 @@ msgid "Error setting user. You are probably not authorized."
msgstr ""
"Erro na configuração do usuário. Você provavelmente não tem autorização."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Entrar"
@@ -2342,8 +2396,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Não é um formato de dados suportado."
@@ -2484,7 +2538,8 @@ msgstr "Não é possível salvar a nova senha."
msgid "Password saved."
msgstr "A senha foi salva."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Caminhos"
@@ -2518,7 +2573,6 @@ msgstr ""
"Servidor SSL inválido. O comprimento máximo deve ser de 255 caracteres."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Site"
@@ -2606,7 +2660,7 @@ msgstr "Diretório das imagens de fundo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2661,11 +2715,11 @@ msgstr "Não é uma etiqueta de pessoa válida: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuários auto-etiquetados com %1$s - pág. %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "O conteúdo da mensagem é inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2691,7 +2745,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 letras minúsculas ou números, sem pontuações ou espaços"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Nome completo"
@@ -2719,7 +2773,7 @@ msgid "Bio"
msgstr "Descrição"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2746,7 +2800,7 @@ msgstr ""
"Suas etiquetas (letras, números, -, ., e _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2773,7 +2827,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "A descrição é muito extensa (máximo %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "O fuso horário não foi selecionado."
@@ -2786,23 +2840,24 @@ msgstr "O nome do idioma é muito extenso (máx. 50 caracteres)."
msgid "Invalid tag: \"%s\""
msgstr "Etiqueta inválida: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Não foi possível atualizar o usuário para assinar automaticamente."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Não foi possível salvar as preferências de localização."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Não foi possível salvar o perfil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Não foi possível salvar as etiquetas."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "As configurações foram salvas."
@@ -2815,28 +2870,28 @@ msgstr "Além do limite da página (%s)"
msgid "Could not retrieve public stream."
msgstr "Não foi possível recuperar o fluxo público."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Mensagens públicas, pág. %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Mensagens públicas"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fonte de mensagens públicas (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fonte de mensagens públicas (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fonte de mensagens públicas (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2845,11 +2900,11 @@ msgstr ""
"Esse é o fluxo de mensagens públicas de %%site.name%%, mas ninguém publicou "
"nada ainda."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Seja o primeiro a publicar!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2857,7 +2912,7 @@ msgstr ""
"Por que você não [registra uma conta](%%action.register%%) pra ser o "
"primeiro a publicar?"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2870,7 +2925,7 @@ msgstr ""
"[Cadastre-se agora](%%action.register%%) para compartilhar notícias sobre "
"você com seus amigos, família e colegas! ([Saiba mais](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3053,8 +3108,7 @@ msgstr "Desculpe, mas o código do convite é inválido."
msgid "Registration successful"
msgstr "Registro realizado com sucesso"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrar-se"
@@ -3096,7 +3150,7 @@ msgid "Same as password above. Required."
msgstr "Igual à senha acima. Obrigatório."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3202,7 +3256,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil em outro serviço de microblog compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Assinar"
@@ -3239,7 +3293,7 @@ msgstr "Você não pode repetir sua própria mensagem."
msgid "You already repeated that notice."
msgstr "Você já repetiu essa mensagem."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetida"
@@ -3247,33 +3301,33 @@ msgstr "Repetida"
msgid "Repeated!"
msgstr "Repetida!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Respostas para %s"
-#: actions/replies.php:127
-#, fuzzy, php-format
+#: actions/replies.php:128
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "Respostas para %1$s no %2$s"
+msgstr "Respostas para %1$s, pág. %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Fonte de respostas para %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Fonte de respostas para %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Fonte de respostas para %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3282,7 +3336,7 @@ msgstr ""
"Esse é o fluxo de mensagens de resposta para %1$s, mas %2$s ainda não "
"recebeu nenhuma mensagem direcionada a ele(a)."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3291,7 +3345,7 @@ msgstr ""
"Você pode envolver outros usuários na conversa. Pra isso, assine mais "
"pessoas ou [associe-se a grupos](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3306,6 +3360,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostas para %1$s no %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Você não pode silenciar os usuários neste site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuário sem um perfil correspondente"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3318,15 +3382,15 @@ msgstr "Você não pode colocar usuários deste site em isolamento."
msgid "User is already sandboxed."
msgstr "O usuário já está em isolamento."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessões"
#: actions/sessionsadminpanel.php:65
-#, fuzzy
msgid "Session settings for this StatusNet site."
-msgstr "Configurações da aparência deste site StatusNet."
+msgstr "Configurações da sessão deste site StatusNet."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
@@ -3344,8 +3408,8 @@ msgstr "Depuração da sessão"
msgid "Turn on debugging output for sessions."
msgstr "Ativa a saída de depuração para as sessões."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salvar as configurações do site"
@@ -3375,15 +3439,15 @@ msgstr "Organização"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
#: actions/showapplication.php:203
-#, fuzzy, php-format
+#, php-format
msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr "criado por %1$s - %2$s acessa por padrão - %3$d usuários"
+msgstr "Criado por %1$s - acesso %2$s por padrão - %3$d usuários"
#: actions/showapplication.php:213
msgid "Application actions"
@@ -3426,35 +3490,34 @@ msgstr ""
"assinatura em texto plano."
#: actions/showapplication.php:309
-#, fuzzy
msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Tem certeza que deseja excluir esta mensagem?"
+msgstr "Tem certeza que deseja restaurar sua chave e segredo de consumidor?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "Mensagens favoritas de %s"
+msgstr "Mensagens favoritas de %1$s, pág. %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
msgstr "Não foi possível recuperar as mensagens favoritas."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Fonte para favoritas de %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Fonte para favoritas de %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Fonte para favoritas de %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3463,7 +3526,7 @@ msgstr ""
"\"Favorita\" nas mensagens que você quer guardar para referência futura ou "
"para destacar."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3472,7 +3535,7 @@ msgstr ""
"%s não adicionou nenhuma mensagem às suas favoritas. Publique alguma coisa "
"interessante para para as pessoas marcarem como favorita. :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3483,7 +3546,7 @@ msgstr ""
"[registra uma conta](%%%%action.register%%%%) e publica alguma coisa "
"interessante para as pessoas marcarem como favorita? :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Esta é uma forma de compartilhar o que você gosta."
@@ -3493,71 +3556,71 @@ msgid "%s group"
msgstr "Grupo %s"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "Membros do grupo %1$s, pág. %2$d"
+msgstr "Grupo %1$s, pág. %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "Site"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Mensagem"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Apelidos"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Ações do grupo"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de mensagens do grupo %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF para o grupo %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3573,7 +3636,7 @@ msgstr ""
"para se tornar parte deste grupo e muito mais! ([Saiba mais](%%%%doc.help%%%"
"%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3586,7 +3649,7 @@ msgstr ""
"[StatusNet](http://status.net/). Seus membros compartilham mensagens curtas "
"sobre suas vidas e interesses. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradores"
@@ -3618,9 +3681,9 @@ msgid " tagged %s"
msgstr " etiquetada %s"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%1$s e amigos, pág. %2$d"
+msgstr "%1$s, pág. %2$d"
#: actions/showstream.php:122
#, php-format
@@ -3710,148 +3773,139 @@ msgid "User is already silenced."
msgstr "O usuário já está silenciado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurações básicas para esta instância do StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Você deve digitar alguma coisa para o nome do site."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Você deve ter um endereço de e-mail para contato válido."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Idioma \"%s\" desconhecido."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "A URL para o envio das estatísticas é inválida."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "O valor de execução da obtenção das estatísticas é inválido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "A frequência de geração de estatísticas deve ser um número."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "O comprimento máximo do texto é de 140 caracteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "O limite de duplicatas deve ser de um ou mais segundos."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "O nome do seu site, por exemplo \"Microblog da Sua Empresa\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texto utilizado para o link de créditos no rodapé de cada página"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL do disponibilizado por"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL utilizada para o link de créditos no rodapé de cada página"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Endereço de e-mail para contatos do seu site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário padrão"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horário padrão para o seu site; geralmente UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma padrão do site"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Estatísticas"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente durante o funcionamento"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Em horários pré-definidos"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Estatísticas dos dados"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando enviar dados estatísticos para os servidores status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentemente"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "As estatísticas serão enviadas uma vez a cada N usos da web"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL para envio"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "As estatísticas serão enviadas para esta URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite do texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres para as mensagens."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatas"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo (em segundos) os usuários devem esperar para publicar a mesma "
"coisa novamente."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Mensagem do site"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nova mensagem"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Não foi possível salvar suas configurações de aparência."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Mensagem do site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Mensagem do site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configuração do SMS"
@@ -3950,19 +4004,90 @@ msgstr ""
msgid "No code entered"
msgstr "Não foi digitado nenhum código"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Estatísticas"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Mude as configurações do site"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "O valor de execução da obtenção das estatísticas é inválido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "A frequência de geração de estatísticas deve ser um número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "A URL para o envio das estatísticas é inválida."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatoriamente durante o funcionamento"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Em horários pré-definidos"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Estatísticas dos dados"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando enviar dados estatísticos para os servidores status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentemente"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "As estatísticas serão enviadas uma vez a cada N usos da web"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL para envio"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "As estatísticas serão enviadas para esta URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Salvar as configurações do site"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Você não está assinando esse perfil."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Não foi possível salvar a assinatura."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Não é um usuário local."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Esse arquivo não existe."
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Você não está assinando esse perfil."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Assinado"
@@ -4026,7 +4151,7 @@ msgstr "Estas são as pessoas cujas mensagens você acompanha."
msgid "These are the people whose notices %s listens to."
msgstr "Estas são as pessoas cujas mensagens %s acompanha."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4042,35 +4167,35 @@ msgstr ""
"[usuário do Twitter](%%action.twittersettings%%), você pode assinar "
"automaticamente as pessoas que já segue lá."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s não está acompanhando ninguém."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
-#, fuzzy, php-format
+#: actions/tag.php:69
+#, php-format
msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Usuários auto-etiquetados com %1$s - pág. %2$d"
+msgstr "Mensagens etiquetadas com %1$s, pág. %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Fonte de mensagens de %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Fonte de mensagens de %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Fonte de mensagens de %s (Atom)"
@@ -4124,7 +4249,7 @@ msgstr ""
msgid "No such tag."
msgstr "Esta etiqueta não existe."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "O método da API está em construção."
@@ -4148,7 +4273,7 @@ msgstr "Nenhuma ID de perfil na requisição."
msgid "Unsubscribed"
msgstr "Cancelado"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4156,71 +4281,73 @@ msgstr ""
"A licença '%1$s' do fluxo do usuário não é compatível com a licença '%2$s' "
"do site."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "Usuário"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Configurações de usuário para este site StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Limite da descrição inválido. Seu valor deve ser numérico."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
"Mensagem de boas vindas inválida. O comprimento máximo é de 255 caracteres."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Assinatura padrão inválida: '%1$s' não é um usuário."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Perfil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Limite da descrição"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Comprimento máximo da descrição do perfil, em caracteres."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Novos usuários"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Boas vindas aos novos usuários"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Texto de boas vindas para os novos usuários (máx. 255 caracteres)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Assinatura padrão"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Os novos usuários assinam esse usuário automaticamente."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Convites"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Convites habilitados"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Define se os usuários podem ou não convidar novos usuários."
@@ -4343,26 +4470,32 @@ msgid "Enjoy your hotdog!"
msgstr "Aproveite o seu cachorro-quente!"
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "Membros do grupo %1$s, pág. %2$d"
+msgstr "Grupos de %1$s, pág. %2$d"
#: actions/usergroups.php:130
msgid "Search for more groups"
msgstr "Procurar por outros grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s não é membro de nenhum grupo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Experimente [procurar por grupos](%%action.groupsearch%%) e associar-se à "
"eles."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Mensagens de %1$s no %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4418,7 +4551,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
@@ -4457,6 +4590,11 @@ msgstr "Não é parte de um grupo."
msgid "Group leave failed."
msgstr "Não foi possível deixar o grupo."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Não foi possível atualizar o grupo."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4474,27 +4612,27 @@ msgstr "Não foi possível inserir a mensagem."
msgid "Could not update message with new URI."
msgstr "Não foi possível atualizar a mensagem com a nova URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro no banco de dados durante a inserção da hashtag: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema no salvamento da mensagem. Ela é muito extensa."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema no salvamento da mensagem. Usuário desconhecido."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Muitas mensagens em um período curto de tempo; dê uma respirada e publique "
"novamente daqui a alguns minutos."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4502,42 +4640,75 @@ msgstr ""
"Muitas mensagens duplicadas em um período curto de tempo; dê uma respirada e "
"publique novamente daqui a alguns minutos."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Você está proibido de publicar mensagens neste site."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema no salvamento da mensagem."
-#: classes/Notice.php:788
-#, fuzzy
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
-msgstr "Problema no salvamento da mensagem."
+msgstr "Problema no salvamento das mensagens recebidas do grupo."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Erro no banco de dados na inserção da reposta: %s"
-
-#: classes/Notice.php:1271
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Você está proibido de assinar."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Já assinado!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "O usuário bloqueou você."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Não assinado!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Não foi possível excluir a auto-assinatura."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Não foi possível excluir a assinatura."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Não foi possível excluir a assinatura."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bem vindo(a) a %1$s, @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Não foi possível configurar a associação ao grupo."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Não foi possível configurar a associação ao grupo."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Não foi possível salvar a assinatura."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Alterar as suas configurações de perfil"
@@ -4575,124 +4746,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária no site"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Início"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil pessoal e fluxo de mensagens dos amigos"
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Pessoal"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Mude seu e-mail, avatar, senha, perfil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Conectar"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Conecte-se a outros serviços"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Conectar"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Mude as configurações do site"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convidar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convide seus amigos e colegas para unir-se a você no %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convidar"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Sai do site"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Sair"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Cria uma conta"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrar-se"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Autentique-se no site"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Entrar"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Procurar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Procura por pessoas ou textos"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Procurar"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Mensagem do site"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Visualizações locais"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notícia da página"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária no site"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos de uso"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Contato"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Mini-aplicativo"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença do software StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4701,12 +4936,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblog disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblog. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4717,101 +4952,156 @@ msgstr ""
"versão %s, disponível sob a [GNU Affero General Public License] (http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença do conteúdo do site"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "O conteúdo e os dados de %1$s são privados e confidenciais."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Conteúdo e dados licenciados sob %1$s. Todos os direitos reservados."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Conteúdo e dados licenciados pelos colaboradores. Todos os direitos "
"reservados."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Todas "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Próximo"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Anterior"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Você não pode fazer alterações neste site."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Não são permitidas alterações a esse painel."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() não implementado."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() não implementado."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Não foi possível excluir as configurações da aparência."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuração básica do site"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuração da aparência"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Aparência"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "Configuração dos caminhos"
+msgstr "Configuração do usuário"
-#: lib/adminpanelaction.php:327
-#, fuzzy
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usuário"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
-msgstr "Configuração da aparência"
+msgstr "Configuração do acesso"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração dos caminhos"
-#: lib/adminpanelaction.php:337
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
-msgstr "Configuração da aparência"
+msgstr "Configuração das sessões"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Mensagem do site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuração dos caminhos"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
+"Os recursos de API exigem acesso de leitura e escrita, mas você possui "
+"somente acesso de leitura."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"A tentativa de autenticação na API falhou, identificação = %1$s, proxy = %2"
+"$s, ip = %3$s"
#: lib/applicationeditform.php:136
msgid "Edit application"
@@ -4899,11 +5189,11 @@ msgstr "Mensagens onde este anexo aparece"
msgid "Tags for this attachment"
msgstr "Etiquetas para este anexo"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Não foi possível alterar a senha"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Não é permitido alterar a senha"
@@ -5056,82 +5346,92 @@ msgstr "Erro no salvamento da mensagem."
msgid "Specify the name of the user to subscribe to"
msgstr "Especifique o nome do usuário que será assinado"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Este usuário não existe."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Efetuada a assinatura de %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifique o nome do usuário cuja assinatura será cancelada"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Cancelada a assinatura de %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "O comando não foi implementado ainda."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notificação desligada."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Não é possível desligar a notificação."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notificação ligada."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Não é possível ligar a notificação."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "O comando para autenticação está desabilitado"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Este link é utilizável somente uma vez e é válido somente por dois minutos: %"
"s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Cancelada a assinatura de %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Você não está assinando ninguém."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Você já está assinando esta pessoa:"
msgstr[1] "Você já está assinando estas pessoas:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ninguém o assinou ainda."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Esta pessoa está assinando você:"
msgstr[1] "Estas pessoas estão assinando você:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Você não é membro de nenhum grupo."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Você é membro deste grupo:"
msgstr[1] "Você é membro destes grupos:"
-#: lib/command.php:728
+#: lib/command.php:769
+#, fuzzy
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5145,6 +5445,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5210,19 +5511,19 @@ msgstr ""
"tracks - não implementado ainda\n"
"tracking - não implementado ainda\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Não foi encontrado nenhum arquivo de configuração. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Eu procurei pelos arquivos de configuração nos seguintes lugares: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Você pode querer executar o instalador para corrigir isto."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5320,6 +5621,11 @@ msgstr "Selecione uma etiqueta para reduzir a lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+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 para o site ou blog do grupo ou tópico"
@@ -5412,23 +5718,23 @@ msgstr "Erro no sistema durante o envio do arquivo."
msgid "Not an image or corrupt file."
msgstr "Imagem inválida ou arquivo corrompido."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Formato de imagem não suportado."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Nosso arquivo foi perdido."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Tipo de arquivo desconhecido"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "Mb"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "Kb"
@@ -5717,7 +6023,7 @@ msgstr ""
"privadas para envolver outras pessoas em uma conversa. Você também pode "
"receber mensagens privadas."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "de"
@@ -5812,6 +6118,12 @@ msgstr "Para"
msgid "Available characters"
msgstr "Caracteres disponíveis"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Enviar"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Enviar uma mensagem"
@@ -5845,48 +6157,48 @@ msgstr ""
"Desculpe, mas recuperar a sua geolocalização está demorando mais que o "
"esperado. Por favor, tente novamente mais tarde."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "L"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "O"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "em"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder a esta mensagem"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Mensagem repetida"
@@ -5918,10 +6230,6 @@ msgstr "Erro na inserção do perfil remoto"
msgid "Duplicate notice"
msgstr "Duplicar a mensagem"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Você está proibido de assinar."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Não foi possível inserir a nova assinatura."
@@ -5963,7 +6271,7 @@ msgstr "Etiquetas nas mensagens de %s"
msgid "Unknown"
msgstr "Desconhecido"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Assinaturas"
@@ -5971,23 +6279,23 @@ msgstr "Assinaturas"
msgid "All subscriptions"
msgstr "Todas as assinaturas"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Assinantes"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Todos os assinantes"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID do usuário"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos os grupos"
@@ -6027,9 +6335,14 @@ msgstr "Repetir esta mensagem?"
msgid "Repeat this notice"
msgstr "Repetir esta mensagem"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear este usuário neste grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Nenhum usuário definido para o modo de usuário único."
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -6047,6 +6360,10 @@ msgstr "Procurar no site"
msgid "Keyword(s)"
msgstr "Palavra(s)-chave"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Procurar"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Ajuda da procura"
@@ -6098,33 +6415,14 @@ msgstr "Assinantes de %s"
msgid "Groups %s is a member of"
msgstr "Grupos dos quais %s é membro"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Já assinado!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "O usuário bloqueou você."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Não foi possível assinar."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Não foi possível fazer com que outros o assinem."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Não assinado!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Não foi possível excluir a auto-assinatura."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Convidar"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Não foi possível excluir a assinatura."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Convide seus amigos e colegas para unir-se a você no %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6176,67 +6474,84 @@ msgstr "Editar o avatar"
msgid "User actions"
msgstr "Ações do usuário"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Editar as configurações do perfil"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Enviar uma mensagem para este usuário."
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Mensagem"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil do usuário"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "alguns segundos atrás"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "cerca de 1 minuto atrás"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "cerca de %d minutos atrás"
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "cerca de 1 hora atrás"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "cerca de %d horas atrás"
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "cerca de 1 dia atrás"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "cerca de %d dias atrás"
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "cerca de 1 mês atrás"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "cerca de %d meses atrás"
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "cerca de 1 ano atrás"
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index da1345a0d..c97bb5461 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -12,77 +12,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
-"PO-Revision-Date: 2010-02-14 20:07:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:17+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62476); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
"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"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "ПринÑÑ‚ÑŒ"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "ÐаÑтройки доÑтупа к Ñайту"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "РегиÑтрациÑ"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Личное"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Запретить анонимным (не авторизовавшимÑÑ) пользователÑм проÑматривать Ñайт?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Только по приглашениÑм"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Личное"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Разрешить региÑтрацию только по приглашениÑм."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Закрыта"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Только по приглашениÑм"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Отключить новые региÑтрации."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Сохранить"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Закрыта"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Сохранить наÑтройки доÑтупа"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Сохранить"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Ðет такой Ñтраницы"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -96,52 +102,59 @@ msgstr "Ðет такой Ñтраницы"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Ðет такого пользователÑ."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s и друзьÑ, Ñтраница %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s и друзьÑ"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Лента друзей %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Лента друзей %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Лента друзей %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "Это лента %s и друзей, однако пока никто ничего не отправил."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -150,7 +163,8 @@ msgstr ""
"Попробуйте подпиÑатьÑÑ Ð½Ð° большее чиÑло людей, [приÑоединитеÑÑŒ к группе](%%"
"action.groups%%) или отправьте что-нибудь Ñами."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -160,7 +174,7 @@ msgstr ""
"что-нибудь Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ или её вниманиÑ](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -169,7 +183,8 @@ msgstr ""
"Почему бы не [зарегиÑтрироватьÑÑ](%%action.register%%), чтобы «подтолкнуть» %"
"s или отправить запиÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ или её вниманиÑ?"
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ð’Ñ‹ и друзьÑ"
@@ -187,20 +202,20 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Метод API не найден."
@@ -232,8 +247,9 @@ msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ пользователÑ."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ профилÑ."
@@ -259,7 +275,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -375,69 +391,69 @@ msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ иÑходного пользо
msgid "Could not find target user."
msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ целевого пользователÑ."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
"Ð˜Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑоÑтоÑÑ‚ÑŒ только из пропиÑных букв и цифр и не иметь пробелов."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Такое Ð¸Ð¼Ñ ÑƒÐ¶Ðµ иÑпользуетÑÑ. Попробуйте какое-нибудь другое."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Ðеверное имÑ."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "URL Главной Ñтраницы неверен."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Полное Ð¸Ð¼Ñ Ñлишком длинное (не больше 255 знаков)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Слишком длинное опиÑание (макÑимум %d Ñимволов)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Слишком длинное меÑтораÑположение (макÑимум 255 знаков)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Слишком много алиаÑов! МакÑимальное чиÑло — %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ðеверный алиаÑ: «%s»"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "ÐÐ»Ð¸Ð°Ñ Â«%s» уже иÑпользуетÑÑ. Попробуйте какой-нибудь другой."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "ÐÐ»Ð¸Ð°Ñ Ð½Ðµ может Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼."
@@ -448,15 +464,15 @@ msgstr "ÐÐ»Ð¸Ð°Ñ Ð½Ðµ может Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼."
msgid "Group not found!"
msgstr "Группа не найдена!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Ð’Ñ‹ уже ÑвлÑетеÑÑŒ членом Ñтой группы."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Ð’Ñ‹ заблокированы из Ñтой группы админиÑтратором."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¸Ñоединить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1$s к группе %2$s."
@@ -465,7 +481,7 @@ msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¸Ñоединить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1
msgid "You are not a member of this group."
msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1$s из группы %2$s."
@@ -496,7 +512,7 @@ msgstr "Ðеправильный токен"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -505,7 +521,7 @@ msgstr "Ðеправильный токен"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -538,7 +554,7 @@ msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ñ‚Ð¾ÐºÐµÐ½Ð° %s был запрещен и аннулиро
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -565,13 +581,13 @@ msgstr ""
"предоÑтавлÑÑ‚ÑŒ разрешение на доÑтуп к вашей учётной запиÑи %4$s только тем "
"Ñторонним приложениÑм, которым вы доверÑете."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "ÐаÑтройки"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -652,18 +668,6 @@ msgstr "%1$s / Любимое от %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Лента %s"
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Обновлено от %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -674,12 +678,12 @@ msgstr "%1$s / ОбновлениÑ, упоминающие %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!"
@@ -694,7 +698,7 @@ msgstr "Повторено Ð´Ð»Ñ %s"
msgid "Repeats of %s"
msgstr "Повторы за %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %s"
@@ -715,8 +719,7 @@ msgstr "Ðет такого вложениÑ."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ðет имени."
@@ -728,7 +731,7 @@ msgstr "Ðет размера."
msgid "Invalid size."
msgstr "Ðеверный размер."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватара"
@@ -746,30 +749,30 @@ msgid "User without matching profile"
msgstr "Пользователь без ÑоответÑтвующего профилÑ"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "ÐаÑтройки аватары"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Оригинал"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "ПроÑмотр"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Удалить"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Загрузить"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Обрезать"
@@ -777,7 +780,7 @@ msgstr "Обрезать"
msgid "Pick a square area of the image to be your avatar"
msgstr "Подберите нужный квадратный учаÑток Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ аватары"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "ПотерÑна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле."
@@ -812,22 +815,22 @@ msgstr ""
"приходить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± @-ответах от него."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Ðет"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Ðе блокировать Ñтого пользователÑ"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Да"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Заблокировать пользователÑ."
@@ -835,39 +838,43 @@ msgstr "Заблокировать пользователÑ."
msgid "Failed to save block information."
msgstr "Ðе удаётÑÑ Ñохранить информацию о блокировании."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Ðет такой группы."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "Заблокированные профили %s"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Заблокированные профили %1$s, Ñтраница %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "СпиÑок пользователей, заблокированных от приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº Ñтой группе."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Разблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² группе."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Разблокировать"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Разблокировать пользователÑ."
@@ -923,7 +930,7 @@ msgid "Conversation"
msgstr "ДиÑкуÑÑиÑ"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "ЗапиÑи"
@@ -942,7 +949,7 @@ msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ владельцем Ñтого прилоÐ
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Проблема Ñ Ð’Ð°ÑˆÐµÐ¹ ÑеÑÑией. Попробуйте ещё раз, пожалуйÑта."
@@ -968,12 +975,13 @@ msgstr "Ðе удалÑйте Ñто приложение"
msgid "Delete this application"
msgstr "Удалить Ñто приложение"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ðе авторизован."
@@ -1002,7 +1010,7 @@ msgstr "Ð’Ñ‹ уверены, что хотите удалить Ñту запиÑ
msgid "Do not delete this notice"
msgstr "Ðе удалÑÑ‚ÑŒ Ñту запиÑÑŒ"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Удалить Ñту запиÑÑŒ"
@@ -1018,7 +1026,7 @@ msgstr "Ð’Ñ‹ можете удалÑÑ‚ÑŒ только внутренних поÐ
msgid "Delete user"
msgstr "Удалить пользователÑ"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1026,12 +1034,12 @@ msgstr ""
"Ð’Ñ‹ дейÑтвительно хотите удалить Ñтого пользователÑ? Это повлечёт удаление "
"вÑех данных о пользователе из базы данных без возможноÑти воÑÑтановлениÑ."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Удалить Ñтого пользователÑ"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Оформление"
@@ -1134,6 +1142,18 @@ msgstr "ВоÑÑтановить оформление по умолчанию"
msgid "Reset back to default"
msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Сохранить"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Сохранить оформление"
@@ -1225,29 +1245,29 @@ msgstr "Изменить информацию о группе %s"
msgid "You must be logged in to create a group."
msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы Ñоздать новую группу."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Ð’Ñ‹ должны быть админиÑтратором, чтобы изменÑÑ‚ÑŒ информацию о группе."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Заполните информацию о группе в Ñледующие полÑ"
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "Слишком длинное опиÑание (макÑимум %d Ñимволов)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе."
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "ÐаÑтройки Ñохранены."
@@ -1375,7 +1395,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðе удаётÑÑ Ñтандартизировать Ñтот Ñлектронный адреÑ"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеверный Ñлектронный адреÑ."
@@ -1568,6 +1588,26 @@ msgstr "Ðет такого файла."
msgid "Cannot read file."
msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ файл."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ðеправильный токен"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr ""
+"Ð’Ñ‹ не можете уÑтанавливать режим пеÑочницы Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ Ñтого Ñайта."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Пользователь уже заглушён."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1597,7 +1637,7 @@ msgstr "Пользователь уже заблокирован из групп
msgid "User is not a member of group."
msgstr "Пользователь не ÑвлÑетÑÑ Ñ‡Ð»ÐµÐ½Ð¾Ð¼ Ñтой группы."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Заблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы."
@@ -1632,11 +1672,11 @@ msgstr "Ðет ID."
msgid "You must be logged in to edit a group."
msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы изменить группу."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Оформление группы"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1644,20 +1684,20 @@ msgstr ""
"ÐаÑтройте внешний вид группы, уÑтановив фоновое изображение и цветовую гамму "
"на ваш выбор."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ ваше оформление."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "ÐаÑтройки Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ñохранены."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Логотип группы"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1665,62 +1705,68 @@ msgstr ""
"ЗдеÑÑŒ вы можете загрузить логотип Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹. МакÑимальный размер файла "
"ÑоÑтавлÑет %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Пользователь без ÑоответÑтвующего профилÑ."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Подберите нужный квадратный учаÑток Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ логотипа."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Логотип обновлён."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Ðеудача при обновлении логотипа."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "УчаÑтники группы %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "УчаÑтники группы %1$s, Ñтраница %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "СпиÑок пользователей, ÑвлÑющихÑÑ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ Ñтой группы."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокировать"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Сделать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором группы"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Сделать админиÑтратором"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Сделать Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Лента %s"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑ‡Ð°Ñтников %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Группы"
@@ -1981,16 +2027,18 @@ msgstr "Личное Ñообщение"
msgid "Optionally add a personal message to the invitation."
msgstr "Можно добавить к приглашению личное Ñообщение."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
-msgstr "ОК"
+msgstr "Отправить"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s приглаÑил Ð²Ð°Ñ Ð¿Ñ€Ð¸ÑоединитьÑÑ Ðº нему на %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2051,7 +2099,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Ð’Ñ‹ должны авторизоватьÑÑ Ð´Ð»Ñ Ð²ÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ Ð² группу."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Ðет имени или ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s вÑтупил в группу %2$s"
@@ -2060,11 +2112,11 @@ msgstr "%1$s вÑтупил в группу %2$s"
msgid "You must be logged in to leave a group."
msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы покинуть группу."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s покинул группу %2$s"
@@ -2081,8 +2133,7 @@ msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль."
msgid "Error setting user. You are probably not authorized."
msgstr "Ошибка уÑтановки пользователÑ. Ð’Ñ‹, вероÑтно, не авторизованы."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Вход"
@@ -2334,8 +2385,8 @@ msgstr "тип Ñодержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ðеподдерживаемый формат данных."
@@ -2476,7 +2527,8 @@ msgstr "Ðе удаётÑÑ Ñохранить новый пароль."
msgid "Password saved."
msgstr "Пароль Ñохранён."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пути"
@@ -2509,7 +2561,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ðеверный SSL-Ñервер. МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑоÑтавлÑет 255 Ñимволов."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Сайт"
@@ -2597,7 +2648,7 @@ msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ изображениÑ"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикогда"
@@ -2652,11 +2703,11 @@ msgstr "Ðеверный тег человека: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Пользователи, уÑтановившие Ñебе тег %1$s — Ñтраница %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ðеверный контент запиÑи"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи «%1$s» не ÑовмеÑтима Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸ÐµÐ¹ Ñайта «%2$s»."
@@ -2681,7 +2732,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 латинÑких Ñтрочных буквы или цифры, без пробелов"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Полное имÑ"
@@ -2709,7 +2760,7 @@ msgid "Bio"
msgstr "БиографиÑ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2736,7 +2787,7 @@ msgstr ""
"Теги Ð´Ð»Ñ Ñамого ÑÐµÐ±Ñ (буквы, цифры, -, ., и _), разделенные запÑтой или "
"пробелом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Язык"
@@ -2762,7 +2813,7 @@ msgstr "ÐвтоматичеÑки подпиÑыватьÑÑ Ð½Ð° вÑех, кÑ
msgid "Bio is too long (max %d chars)."
msgstr "Слишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ð±Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ (макÑимум %d Ñимволов)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ЧаÑовой поÑÑ Ð½Ðµ выбран."
@@ -2775,23 +2826,24 @@ msgstr "Слишком длинный Ñзык (более 50 Ñимволов).
msgid "Invalid tag: \"%s\""
msgstr "Ðеверный тег: «%s»"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¿Ð¾Ð´Ð¿Ð¸Ñки."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Ðе удаётÑÑ Ñохранить наÑтройки меÑтоположениÑ."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Ðе удаётÑÑ Ñохранить профиль."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Ðе удаётÑÑ Ñохранить теги."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "ÐаÑтройки Ñохранены."
@@ -2804,39 +2856,39 @@ msgstr "Превышен предел Ñтраницы (%s)"
msgid "Could not retrieve public stream."
msgstr "Ðе удаётÑÑ Ð²ÐµÑ€Ð½ÑƒÑ‚ÑŒ публичный поток."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð°, Ñтраница %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð°"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Лента публичного потока (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Лента публичного потока (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Лента публичного потока (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr "Это Ð¾Ð±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %%site.name%%, однако пока никто ничего не отправил."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Создайте первую запиÑÑŒ!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2844,7 +2896,7 @@ msgstr ""
"Почему бы не [зарегиÑтрироватьÑÑ](%%action.register%%), чтобы Ñтать первым "
"отправителем?"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2858,7 +2910,7 @@ msgstr ""
"register%%), чтобы держать в курÑе Ñвоих Ñобытий поклонников, друзей, "
"родÑтвенников и коллег! ([Читать далее](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3036,8 +3088,7 @@ msgstr "Извините, неверный приглаÑительный код
msgid "Registration successful"
msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÑпешна!"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтрациÑ"
@@ -3083,7 +3134,7 @@ msgid "Same as password above. Required."
msgstr "Тот же пароль что и Ñверху. ОбÑзательное поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3188,7 +3239,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "ÐÐ´Ñ€ÐµÑ URL твоего Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð½Ð° другом подходÑщем ÑервиÑе микроблогинга"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "ПодпиÑатьÑÑ"
@@ -3224,7 +3275,7 @@ msgstr "Ð’Ñ‹ не можете повторить ÑобÑтвенную запÐ
msgid "You already repeated that notice."
msgstr "Ð’Ñ‹ уже повторили Ñту запиÑÑŒ."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3232,33 +3283,33 @@ msgstr "Повторено"
msgid "Repeated!"
msgstr "Повторено!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Ответы Ð´Ð»Ñ %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Ответы Ð´Ð»Ñ %1$s, Ñтраница %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Лента запиÑей Ð´Ð»Ñ %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Лента запиÑей Ð´Ð»Ñ %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Лента запиÑей Ð´Ð»Ñ %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3266,7 +3317,7 @@ msgid ""
msgstr ""
"Эта лента Ñодержит ответы на запиÑи %1$s, однако %2$s пока не получал их."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3275,7 +3326,7 @@ msgstr ""
"Ð’Ñ‹ можете вовлечь других пользователей в разговор, подпиÑавшиÑÑŒ на большее "
"чиÑло людей или [приÑоединившиÑÑŒ к группам](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3290,6 +3341,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Ответы на запиÑи %1$s на %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ð’Ñ‹ не можете заглушать пользователей на Ñтом Ñайте."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Пользователь без ÑоответÑтвующего профилÑ."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3303,8 +3364,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr "Пользователь уже в режиме пеÑочницы."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "СеÑÑии"
@@ -3328,8 +3390,8 @@ msgstr "Отладка ÑеÑÑий"
msgid "Turn on debugging output for sessions."
msgstr "Включить отладочный вывод Ð´Ð»Ñ ÑеÑÑий."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Сохранить наÑтройки Ñайта"
@@ -3359,8 +3421,8 @@ msgstr "ОрганизациÑ"
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
@@ -3423,22 +3485,22 @@ msgstr "Любимые запиÑи %1$s, Ñтраница %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Ðе удаётÑÑ Ð²Ð¾ÑÑтановить любимые запиÑи."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Лента друзей %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Лента друзей %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Лента друзей %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3446,7 +3508,7 @@ msgstr ""
"Ð’Ñ‹ пока не выбрали ни одной любимой запиÑи. Ðажмите на кнопку Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² "
"любимые Ñ€Ñдом Ñ Ð¿Ð¾Ð½Ñ€Ð°Ð²Ð¸Ð²ÑˆÐµÐ¹ÑÑ Ð·Ð°Ð¿Ð¸Ñью, чтобы позже уделить ей внимание."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3455,7 +3517,7 @@ msgstr ""
"%s пока не выбрал ни одной любимой запиÑи. Ðапишите такую интереÑную запиÑÑŒ, "
"которую он добавит её в чиÑло любимых :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3466,7 +3528,7 @@ msgstr ""
"[зарегиÑтрироватьÑÑ](%%%%action.register%%%%) и не напиÑать что-нибудь "
"интереÑное, что понравилоÑÑŒ бы Ñтому пользователю? :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Это ÑпоÑоб разделить то, что вам нравитÑÑ."
@@ -3480,67 +3542,67 @@ msgstr "Группа %s"
msgid "%1$s group, page %2$d"
msgstr "Группа %1$s, Ñтраница %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профиль группы"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "ЗапиÑÑŒ"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ÐлиаÑÑ‹"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Лента запиÑей группы %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Лента запиÑей группы %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Лента запиÑей группы %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "УчаÑтники"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(пока ничего нет)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Ð’Ñе учаÑтники"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Создано"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3556,7 +3618,7 @@ msgstr ""
"action.register%%%%), чтобы Ñтать учаÑтником группы и получить множеÑтво "
"других возможноÑтей! ([Читать далее](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3569,7 +3631,7 @@ msgstr ""
"обеÑпечении [StatusNet](http://status.net/). УчаÑтники обмениваютÑÑ "
"короткими ÑообщениÑми о Ñвоей жизни и интереÑах. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтраторы"
@@ -3694,149 +3756,140 @@ msgid "User is already silenced."
msgstr "Пользователь уже заглушён."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "ОÑновные наÑтройки Ð´Ð»Ñ Ñтого Ñайта StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Ð˜Ð¼Ñ Ñайта должно быть ненулевой длины."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "У Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть дейÑтвительный контактный email-адреÑ."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "ÐеизвеÑтный Ñзык «%s»."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Ðеверный URL отчёта Ñнимка."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Ðеверное значение запуÑка Ñнимка."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "ЧаÑтота Ñнимков должна быть чиÑлом."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минимальное ограничение текÑта ÑоÑтавлÑет 140 Ñимволов."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничение Ð´ÑƒÐ±Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑоÑтавлÑÑ‚ÑŒ 1 или более Ñекунд."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Базовые"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Ð˜Ð¼Ñ Ñайта"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Ð˜Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта, например, «Yourcompany Microblog»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "ПредоÑтавлено"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"ТекÑÑ‚, иÑпользуемый Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð² в нижнем колонтитуле каждой Ñтраницы"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ñтавщика уÑлуг"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL, иÑпользуемый Ð´Ð»Ñ ÑÑылки на авторов в нижнем колонтитуле каждой Ñтраницы"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактный email-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Внутренние наÑтройки"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑовой поÑÑ Ð¿Ð¾ умолчанию"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑовой поÑÑ Ð¿Ð¾ умолчанию Ð´Ð»Ñ Ñайта; обычно UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Язык Ñайта по умолчанию"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "При Ñлучайном поÑещении"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "По заданному графику"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снимки данных"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Когда отправлÑÑ‚ÑŒ ÑтатиÑтичеÑкие данные на Ñервера status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "ЧаÑтота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ðµ N поÑещений"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL отчёта"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ Ð¿Ð¾ Ñтому URL-адреÑу"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Границы"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Границы текÑта"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимальное чиÑло Ñимволов Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñей."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Предел дубликатов"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Сколько нужно ждать пользователÑм (в Ñекундах) Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ того же ещё раз."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ðовое Ñообщение"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Ðе удаётÑÑ Ñохранить ваши наÑтройки оформлениÑ!"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "УÑтановки СМС"
@@ -3938,19 +3991,90 @@ msgstr ""
msgid "No code entered"
msgstr "Код не введён"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снимки"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Изменить конфигурацию Ñайта"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Ðеверное значение запуÑка Ñнимка."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "ЧаÑтота Ñнимков должна быть чиÑлом."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Ðеверный URL отчёта Ñнимка."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "При Ñлучайном поÑещении"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "По заданному графику"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снимки данных"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Когда отправлÑÑ‚ÑŒ ÑтатиÑтичеÑкие данные на Ñервера status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "ЧаÑтота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ðµ N поÑещений"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL отчёта"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ Ð¿Ð¾ Ñтому URL-адреÑу"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Сохранить наÑтройки Ñайта"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Ð’Ñ‹ не подпиÑаны на Ñтот профиль."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Ðе удаётÑÑ Ñохранить подпиÑку."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Ðе локальный пользователь."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Это дейÑтвие принимает только POST-запроÑÑ‹."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Ðет такого профилÑ."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+"Ð’Ñ‹ не можете подпиÑатьÑÑ Ð½Ð° удалённый профиль OMB 0.1 Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтого "
+"дейÑтвиÑ."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "ПодпиÑано"
@@ -4014,7 +4138,7 @@ msgstr "Это пользователи, запиÑи которых вы чит
msgid "These are the people whose notices %s listens to."
msgstr "Это пользователи, запиÑи которых читает %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4030,35 +4154,35 @@ msgstr ""
"пользуетеÑÑŒ [Твиттером](%%action.twittersettings%%), то можете автоматичеÑки "
"подпиÑатьÑÑ Ð½Ð° тех людей, за которыми уже Ñледите там."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s не проÑматривает ничьи запиÑи."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "СМС"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %1$s, Ñтраница %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Лента запиÑей Ð´Ð»Ñ Ñ‚ÐµÐ³Ð° %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Лента запиÑей Ð´Ð»Ñ Ñ‚ÐµÐ³Ð° %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Лента запиÑей Ð´Ð»Ñ Ñ‚ÐµÐ³Ð° %s (Atom)"
@@ -4113,7 +4237,7 @@ msgstr ""
msgid "No such tag."
msgstr "Ðет такого тега."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Метод API реконÑтруируетÑÑ."
@@ -4137,78 +4261,79 @@ msgstr "Ðет ID Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð² запроÑе."
msgid "Unsubscribed"
msgstr "ОтпиÑано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
"Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð¿Ñ€Ð¾Ñматриваемого потока «%1$s» неÑовмеÑтима Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸ÐµÐ¹ Ñайта «%2$s»."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "Пользователь"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "ПользовательÑкие наÑтройки Ð´Ð»Ñ Ñтого Ñайта StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Ðеверное ограничение биографии. Должно быть чиÑлом."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
"Ðеверный текÑÑ‚ приветÑтвиÑ. МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑоÑтавлÑет 255 Ñимволов."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñка по умолчанию: «%1$s» не ÑвлÑетÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Профиль"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Ограничение биографии"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° биографии Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð² Ñимволах."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Ðовые пользователи"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "ПриветÑтвие новым пользователÑм"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "ТекÑÑ‚ приветÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей (макÑимум 255 Ñимволов)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "ПодпиÑка по умолчанию"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "ÐвтоматичеÑки подпиÑывать новых пользователей на Ñтого пользователÑ."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "ПриглашениÑ"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "ÐŸÑ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Разрешать ли пользователÑм приглашать новых пользователей."
@@ -4337,17 +4462,23 @@ msgstr "Группы %1$s, Ñтраница %2$d"
msgid "Search for more groups"
msgstr "ИÑкать другие группы"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не ÑоÑтоит ни в одной группе."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Попробуйте [найти группы](%%action.groupsearch%%) и приÑоединитьÑÑ Ðº ним."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Обновлено от %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4403,7 +4534,7 @@ msgstr ""
msgid "Plugins"
msgstr "Плагины"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ВерÑиÑ"
@@ -4442,6 +4573,10 @@ msgstr "Ðе ÑвлÑетÑÑ Ñ‡Ð°Ñтью группы."
msgid "Group leave failed."
msgstr "Ðе удаётÑÑ Ð¿Ð¾ÐºÐ¸Ð½ÑƒÑ‚ÑŒ группу."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ локальную группу."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4459,27 +4594,27 @@ msgstr "Ðе удаётÑÑ Ð²Ñтавить Ñообщение."
msgid "Could not update message with new URI."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Ошибка баз данных при вÑтавке хеш-тегов Ð´Ð»Ñ %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблемы Ñ Ñохранением запиÑи. Слишком длинно."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при Ñохранении запиÑи. ÐеизвеÑтный пользователь."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Слишком много запиÑей за Ñтоль короткий Ñрок; передохните немного и "
"попробуйте вновь через пару минут."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4487,41 +4622,73 @@ msgstr ""
"Слишком много одинаковых запиÑей за Ñтоль короткий Ñрок; передохните немного "
"и попробуйте вновь через пару минут."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам запрещено поÑтитьÑÑ Ð½Ð° Ñтом Ñайте (бан)"
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблемы Ñ Ñохранением запиÑи."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблемы Ñ Ñохранением входÑщих Ñообщений группы."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Ошибка баз данных при вÑтавке ответа Ð´Ð»Ñ %s"
-
-#: classes/Notice.php:1271
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Ð’Ñ‹ заблокированы от подпиÑки."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Уже подпиÑаны!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Пользователь заблокировал ВаÑ."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Ðе подпиÑаны!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Ðевозможно удалить ÑамоподпиÑку."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добро пожаловать на %1$s, @%2$s!"
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Ðе удаётÑÑ Ñоздать группу."
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ URI группы."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ членÑтво в группе."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Ðе удаётÑÑ Ñохранить информацию о локальной группе."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Изменить ваши наÑтройки профилÑ"
@@ -4559,124 +4726,171 @@ msgstr "%1$s — %2$s"
msgid "Untitled page"
msgstr "Страница без названиÑ"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Моё"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Личный профиль и лента друзей"
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr "Изменить ваш email, аватару, пароль, профиль"
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Личное"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Соединить"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Изменить ваш email, аватар, пароль, профиль"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Соединить Ñ ÑервиÑами"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Соединить"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Изменить конфигурацию Ñайта"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ПриглаÑить"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ÐаÑтройки"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr "ПриглаÑите друзей и коллег Ñтать такими же как вы учаÑтниками %s"
+msgstr "ПриглаÑите друзей и коллег Ñтать такими же как Ð’Ñ‹ учаÑтниками %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Выход"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ПриглаÑить"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Выйти"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Выход"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Создать новый аккаунт"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "РегиÑтрациÑ"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Войти"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Помощь"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Вход"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощь"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "ПоиÑк"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помощь"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ИÑкать людей или текÑÑ‚"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "ПоиÑк"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Локальные виды"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¿Ð¾ подпиÑкам"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помощь"
+
+#: lib/action.php:754
msgid "About"
msgstr "О проекте"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаВо"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПользовательÑкое Ñоглашение"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "ИÑходный код"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "ÐšÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet лицензиÑ"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4685,12 +4899,12 @@ msgstr ""
"**%%site.name%%** — Ñто ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°, Ñозданный Ð´Ð»Ñ Ð²Ð°Ñ Ð¿Ñ€Ð¸ помощи [%"
"%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4702,98 +4916,150 @@ msgstr ""
"лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ñодержимого Ñайта"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содержание и данные %1$s ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ и конфиденциальными."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"ÐвторÑкие права на Ñодержание и данные принадлежат %1$s. Ð’Ñе права защищены."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑкие права на Ñодержание и данные принадлежат разработчикам. Ð’Ñе права "
"защищены."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "license."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Разбиение на Ñтраницы"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Сюда"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Туда"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ удалённое Ñодержимое."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенный XML."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенное Ñодержание Base64."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Ð’Ñ‹ не можете изменÑÑ‚ÑŒ Ñтот Ñайт."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтой панели недопуÑтимы."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не реализована."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не реализована."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ наÑтройки оформлениÑ."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ОÑÐ½Ð¾Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñайта"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Сайт"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Оформление"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Пользователь"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñтупа"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿ÑƒÑ‚ÐµÐ¹"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑеÑÑий"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿ÑƒÑ‚ÐµÐ¹"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"API реÑурÑа требует доÑтуп Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, но у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ только доÑтуп "
"Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4886,11 +5152,11 @@ msgstr "Сообщает, где поÑвлÑетÑÑ Ñто вложение"
msgid "Tags for this attachment"
msgstr "Теги Ð´Ð»Ñ Ñтого вложениÑ"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ удалоÑÑŒ"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Смена Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ разрешена"
@@ -5041,83 +5307,92 @@ msgstr "Проблемы Ñ Ñохранением запиÑи."
msgid "Specify the name of the user to subscribe to"
msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки."
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Ðет такого пользователÑ."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "ПодпиÑано на %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ подпиÑки."
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "ОтпиÑано от %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Команда ещё не выполнена."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Оповещение отÑутÑтвует."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Ðет оповещениÑ."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "ЕÑÑ‚ÑŒ оповещение."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "ЕÑÑ‚ÑŒ оповещение."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Команда входа отключена"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "Эта ÑÑылка дейÑтвительна только один раз в течение 2 минут: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "ОтпиÑано %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Ð’Ñ‹ ни на кого не подпиÑаны."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[1] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[2] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ðикто не подпиÑан на ваÑ."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[1] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[2] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Ð’Ñ‹ не ÑоÑтоите ни в одной группе."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
msgstr[1] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
msgstr[2] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5131,6 +5406,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5169,6 +5445,7 @@ msgstr ""
"d <nickname> <text> — прÑмое Ñообщение пользователю\n"
"get <nickname> — получить поÑледнюю запиÑÑŒ от пользователÑ\n"
"whois <nickname> — получить информацию из Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ\n"
+"lose <nickname> — отменить подпиÑку Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° ваÑ\n"
"fav <nickname> — добавить поÑледнюю запиÑÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² чиÑло любимых\n"
"fav #<notice_id> — добавить запиÑÑŒ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ id в чиÑло любимых\n"
"repeat #<notice_id> — повторить уведомление Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ id\n"
@@ -5195,19 +5472,19 @@ msgstr ""
"tracks — пока не реализовано.\n"
"tracking — пока не реализовано.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Конфигурационный файл не найден. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Конфигурационные файлы иÑкалиÑÑŒ в Ñледующих меÑтах: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Возможно, вы решите запуÑтить уÑтановщик Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтого."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Перейти к уÑтановщику"
@@ -5306,6 +5583,11 @@ msgstr "Выберите тег из выпадающего ÑпиÑка"
msgid "Go"
msgstr "Перейти"
+#: lib/grantroleform.php:91
+#, php-format
+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 "ÐÐ´Ñ€ÐµÑ Ñтраницы, дневника или Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ на другом портале"
@@ -5397,23 +5679,23 @@ msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при загрузке файла."
msgid "Not an image or corrupt file."
msgstr "Ðе ÑвлÑетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ или повреждённый файл."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Ðеподдерживаемый формат файла изображениÑ."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "ПотерÑн файл."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Ðеподдерживаемый тип файла"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "МБ"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "КБ"
@@ -5703,7 +5985,7 @@ msgstr ""
"Ð²Ð¾Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей в разговор. СообщениÑ, получаемые от других "
"людей, видите только вы."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "от "
@@ -5795,6 +6077,11 @@ msgstr "ДлÑ"
msgid "Available characters"
msgstr "6 или больше знаков"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Отправить"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "ПоÑлать запиÑÑŒ"
@@ -5828,48 +6115,48 @@ msgstr ""
"К Ñожалению, получение информации о вашем меÑтонахождении занÑло больше "
"времени, чем ожидалоÑÑŒ; повторите попытку позже"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\" %4$s %5$u°%6$u'%7$u\" %8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "Ñ. ш."
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "ю. ш."
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "в. д."
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "з. д."
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "на"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑте"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Ответить на Ñту запиÑÑŒ"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Ответить"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "ЗапиÑÑŒ повторена"
@@ -5901,10 +6188,6 @@ msgstr "Ошибка вÑтавки удалённого профилÑ"
msgid "Duplicate notice"
msgstr "Дублировать запиÑÑŒ"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Ð’Ñ‹ заблокированы от подпиÑки."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе удаётÑÑ Ð²Ñтавить новую подпиÑку."
@@ -5946,7 +6229,7 @@ msgstr "Теги запиÑей Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s"
msgid "Unknown"
msgstr "ÐеизвеÑтно"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "ПодпиÑки"
@@ -5954,23 +6237,23 @@ msgstr "ПодпиÑки"
msgid "All subscriptions"
msgstr "Ð’Ñе подпиÑки."
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "ПодпиÑчики"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Ð’Ñе подпиÑчики"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID пользователÑ"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "РегиÑтрациÑ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Ð’Ñе группы"
@@ -6010,7 +6293,12 @@ msgstr "Повторить Ñту запиÑÑŒ?"
msgid "Repeat this notice"
msgstr "Повторить Ñту запиÑÑŒ"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Заблокировать Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· Ñтой группы"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Ðи задан пользователь Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого режима."
@@ -6030,6 +6318,10 @@ msgstr "ПоиÑк по Ñайту"
msgid "Keyword(s)"
msgstr "Ключевые Ñлова"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ПоиÑк"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Справка по поиÑку"
@@ -6081,33 +6373,14 @@ msgstr "Люди подпиÑанные на %s"
msgid "Groups %s is a member of"
msgstr "Группы, в которых ÑоÑтоит %s"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Уже подпиÑаны!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Пользователь заблокировал ВаÑ."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "ПодпиÑка неудачна."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñать других на вашу ленту."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Ðе подпиÑаны!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Ðевозможно удалить ÑамоподпиÑку."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ПриглаÑить"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "ПриглаÑите друзей и коллег Ñтать такими же как вы учаÑтниками %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6159,67 +6432,84 @@ msgstr "Изменить аватару"
msgid "User actions"
msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Изменение наÑтроек профилÑ"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Редактировать"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "ПоÑлать приватное Ñообщение Ñтому пользователю."
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Сообщение"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Модерировать"
-#: lib/util.php:871
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Профиль пользователÑ"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "ÐдминиÑтраторы"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модерировать"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "пару Ñекунд назад"
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "около чаÑа назад"
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "около %d чаÑа(ов) назад"
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "около Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´"
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "около %d днÑ(ей) назад"
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "около меÑÑца назад"
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "около %d меÑÑца(ев) назад"
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "около года назад"
diff --git a/locale/statusnet.po b/locale/statusnet.po
index d1ee56f2c..b4b22d311 100644
--- a/locale/statusnet.po
+++ b/locale/statusnet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-14 20:05+0000\n"
+"POT-Creation-Date: 2010-03-04 19:12+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,64 +17,70 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr ""
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr ""
-#: actions/accessadminpanel.php:158
-msgid "Registration"
-msgstr ""
-
+#. TRANS: Form legend for registration form.
#: actions/accessadminpanel.php:161
-msgid "Private"
+msgid "Registration"
msgstr ""
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
+msgctxt "LABEL"
+msgid "Private"
msgstr ""
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-msgid "Closed"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
msgstr ""
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
msgstr ""
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr ""
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr ""
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr ""
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -88,73 +94,82 @@ msgstr ""
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr ""
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr ""
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr ""
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr ""
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr ""
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr ""
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr ""
@@ -172,20 +187,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:182 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:194 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr ""
@@ -217,8 +232,9 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr ""
@@ -242,7 +258,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -352,68 +368,68 @@ msgstr ""
msgid "Could not find target user."
msgstr ""
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr ""
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr ""
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr ""
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr ""
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr ""
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr ""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr ""
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -424,15 +440,15 @@ msgstr ""
msgid "Group not found!"
msgstr ""
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr ""
@@ -441,7 +457,7 @@ msgstr ""
msgid "You are not a member of this group."
msgstr ""
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr ""
@@ -472,7 +488,7 @@ msgstr ""
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -481,7 +497,7 @@ msgstr ""
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -513,7 +529,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -536,13 +552,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr ""
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -623,18 +639,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:114 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -645,12 +649,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -665,7 +669,7 @@ msgstr ""
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
@@ -686,8 +690,7 @@ msgstr ""
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr ""
@@ -699,7 +702,7 @@ msgstr ""
msgid "Invalid size."
msgstr ""
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr ""
@@ -716,30 +719,30 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr ""
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr ""
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr ""
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -747,7 +750,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -779,22 +782,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr ""
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr ""
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -802,39 +805,43 @@ msgstr ""
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr ""
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr ""
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr ""
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr ""
@@ -890,7 +897,7 @@ msgid "Conversation"
msgstr ""
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -909,7 +916,7 @@ msgstr ""
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -932,12 +939,13 @@ msgstr ""
msgid "Delete this application"
msgstr ""
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr ""
@@ -964,7 +972,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr ""
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -980,18 +988,18 @@ msgstr ""
msgid "Delete user"
msgstr ""
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr ""
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1092,6 +1100,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr ""
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1183,29 +1203,29 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr ""
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr ""
-#: actions/editgroup.php:259 classes/User_group.php:423
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr ""
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr ""
@@ -1321,7 +1341,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1505,6 +1525,22 @@ msgstr ""
msgid "Cannot read file."
msgstr ""
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr ""
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr ""
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1534,7 +1570,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1566,91 +1602,97 @@ msgstr ""
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr ""
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr ""
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr ""
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr ""
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -1881,16 +1923,18 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr ""
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1925,7 +1969,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr ""
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -1934,11 +1982,11 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr ""
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr ""
@@ -1955,8 +2003,7 @@ msgstr ""
msgid "Error setting user. You are probably not authorized."
msgstr ""
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr ""
@@ -2195,8 +2242,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2335,7 +2382,8 @@ msgstr ""
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2368,7 +2416,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2456,7 +2503,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2509,11 +2556,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2536,7 +2583,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr ""
@@ -2564,7 +2611,7 @@ msgid "Bio"
msgstr ""
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2589,7 +2636,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2615,7 +2662,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2628,23 +2675,24 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr ""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr ""
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr ""
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr ""
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr ""
@@ -2657,45 +2705,45 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr ""
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2704,7 +2752,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2873,8 +2921,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -2913,7 +2960,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -2997,7 +3044,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3033,7 +3080,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr ""
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr ""
@@ -3041,47 +3088,47 @@ msgstr ""
msgid "Repeated!"
msgstr ""
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr ""
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr ""
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr ""
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr ""
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr ""
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3093,6 +3140,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr ""
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr ""
@@ -3105,8 +3160,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3130,8 +3186,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr ""
@@ -3161,8 +3217,8 @@ msgstr ""
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3222,35 +3278,35 @@ msgstr ""
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr ""
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr ""
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr ""
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3258,7 +3314,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3272,67 +3328,67 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr ""
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr ""
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3342,7 +3398,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3351,7 +3407,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3461,144 +3517,128 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
msgstr ""
#: actions/smssettings.php:58
@@ -3693,19 +3733,86 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr ""
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr ""
-#: actions/subscribe.php:55
-msgid "Not a local user."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr ""
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr ""
@@ -3765,7 +3872,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3775,35 +3882,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr ""
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr ""
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr ""
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -3853,7 +3960,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3877,76 +3984,77 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr ""
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr ""
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr ""
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr ""
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr ""
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4066,16 +4174,22 @@ msgstr ""
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4119,7 +4233,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr ""
@@ -4156,6 +4270,10 @@ msgstr ""
msgid "Group leave failed."
msgstr ""
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr ""
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4173,65 +4291,96 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:848
+#: classes/Notice.php:1459
#, php-format
-msgid "DB error inserting reply: %s"
+msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/Notice.php:1271
-#, php-format
-msgid "RT @%1$s %2$s"
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr ""
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr ""
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:413
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:442
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr ""
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr ""
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4269,136 +4418,182 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
+msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:439
-msgid "Personal profile and friends timeline"
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
msgstr ""
-#: lib/action.php:441
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr ""
-#: lib/action.php:444
-msgid "Connect"
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
+msgid "Connect to services"
msgstr ""
-#: lib/action.php:444
-msgid "Connect to services"
+#: lib/action.php:443
+msgid "Connect"
msgstr ""
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
msgstr ""
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr ""
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
msgstr ""
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr ""
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
msgstr ""
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr ""
+
+#: lib/action.php:754
msgid "About"
msgstr ""
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr ""
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr ""
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4406,93 +4601,143 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr ""
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr ""
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr ""
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr ""
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4582,11 +4827,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr ""
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr ""
@@ -4734,80 +4979,89 @@ msgstr ""
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr ""
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr ""
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4821,6 +5075,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -4848,19 +5103,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4957,6 +5212,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5046,23 +5306,23 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5266,7 +5526,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr ""
@@ -5355,6 +5615,11 @@ msgstr ""
msgid "Available characters"
msgstr ""
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr ""
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr ""
@@ -5386,48 +5651,48 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr ""
@@ -5459,10 +5724,6 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5504,7 +5765,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5512,23 +5773,23 @@ msgstr ""
msgid "All subscriptions"
msgstr ""
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr ""
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr ""
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5568,7 +5829,12 @@ msgstr ""
msgid "Repeat this notice"
msgstr ""
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5588,6 +5854,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5639,32 +5909,13 @@ msgstr ""
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr ""
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr ""
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr ""
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr ""
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
#: lib/subscriberspeopleselftagcloudsection.php:48
@@ -5717,67 +5968,81 @@ msgstr ""
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr ""
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr ""
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:871
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr ""
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:873
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:875
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:877
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:887
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index a0d407c5c..b9f921c7f 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,76 +9,82 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:15:57+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:20+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Ã…tkomst"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Inställningar för webbplatsåtkomst"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "Registrering"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Privat"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Skall anonyma användare (inte inloggade) förhindras från att se webbplatsen?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Endast inbjudan"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Gör så att registrering endast sker genom inbjudan."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Stängd"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Endast inbjudan"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "Inaktivera nya registreringar."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Spara"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Stängd"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Spara inställningar för åtkomst"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Spara"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Ingen sådan sida"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -92,52 +98,59 @@ msgstr "Ingen sådan sida"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Ingen sådan användare."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s och vänner, sida %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s och vänner"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Flöden för %ss vänner (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Flöden för %ss vänner (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Flöden för %ss vänner (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "Detta är tidslinjen för %s och vänner, men ingen har skrivit något än."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -146,7 +159,8 @@ msgstr ""
"Prova att prenumerera på fler personer, [gå med i en grupp](%%action.groups%"
"%) eller skriv något själv."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -156,7 +170,7 @@ msgstr ""
"någonting för hans eller hennes uppmärksamhet](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -165,12 +179,13 @@ msgstr ""
"Varför inte [registrera ett konto](%%%%action.register%%%%) och sedan knuffa "
"%s eller skriva en notis för hans eller hennes uppmärksamhet."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du och vänner"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Uppdateringar från %1$s och vänner på %2$s!"
@@ -183,20 +198,20 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metod hittades inte."
@@ -228,8 +243,9 @@ msgstr "Kunde inte uppdatera användare."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Användaren har ingen profil."
@@ -255,7 +271,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -365,69 +381,69 @@ msgstr "Kunde inte fastställa användare hos källan."
msgid "Could not find target user."
msgstr "Kunde inte hitta målanvändare."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
"Smeknamnet får endast innehålla små bokstäver eller siffror, inga mellanslag."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Smeknamnet används redan. Försök med ett annat."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Inte ett giltigt smeknamn."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Hemsida är inte en giltig URL."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Fullständigt namn är för långt (max 255 tecken)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "Beskrivning är för lång (max 140 tecken)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Beskrivning av plats är för lång (max 255 tecken)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "För många alias! Maximum %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Ogiltigt alias: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Alias \"%s\" används redan. Försök med ett annat."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Alias kan inte vara samma som smeknamn."
@@ -438,15 +454,15 @@ msgstr "Alias kan inte vara samma som smeknamn."
msgid "Group not found!"
msgstr "Grupp hittades inte!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Du är redan en medlem i denna grupp."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Du har blivit blockerad från denna grupp av administratören."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Kunde inte ansluta användare %1$s till grupp %2$s."
@@ -455,7 +471,7 @@ msgstr "Kunde inte ansluta användare %1$s till grupp %2$s."
msgid "You are not a member of this group."
msgstr "Du är inte en medlem i denna grupp."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Kunde inte ta bort användare %1$s från grupp %2$s."
@@ -486,7 +502,7 @@ msgstr "Ogiltig token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -495,7 +511,7 @@ msgstr "Ogiltig token."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -527,7 +543,7 @@ msgstr "Begäran-token %s har nekats och återkallats."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -553,13 +569,13 @@ msgstr ""
"möjligheten att <strong>%3$s</strong> din %4$s kontoinformation. Du bör bara "
"ge tillgång till ditt %4$s-konto till tredje-parter du litar på."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -635,23 +651,11 @@ msgstr "Format som inte stödjs."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoriter från %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidslinje"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Uppdateringar från %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -677,17 +681,17 @@ msgstr "%s uppdateringar från alla!"
msgid "Repeated to %s"
msgstr "Upprepat till %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Upprepningar av %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notiser taggade med %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Uppdateringar taggade med %1$s på %2$s!"
@@ -703,8 +707,7 @@ msgstr "Ingen sådan bilaga."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Inget smeknamn."
@@ -716,7 +719,7 @@ msgstr "Ingen storlek."
msgid "Invalid size."
msgstr "Ogiltig storlek."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -734,30 +737,30 @@ msgid "User without matching profile"
msgstr "Användare utan matchande profil"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Avatarinställningar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Orginal"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Förhandsgranska"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Ta bort"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Ladda upp"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Beskär"
@@ -765,7 +768,7 @@ msgstr "Beskär"
msgid "Pick a square area of the image to be your avatar"
msgstr "Välj ett kvadratiskt område i bilden som din avatar"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Förlorade vår fildata."
@@ -800,22 +803,22 @@ msgstr ""
"framtiden och du kommer inte bli underrättad om några @-svar från dem."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Nej"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Blockera inte denna användare"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Ja"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blockera denna användare"
@@ -823,40 +826,44 @@ msgstr "Blockera denna användare"
msgid "Failed to save block information."
msgstr "Misslyckades att spara blockeringsinformation."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Ingen sådan grupp."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "%s blockerade profiler"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%1$s blockerade profiler, sida %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
"En lista med de användare som blockerats från att gå med i denna grupp."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Häv blockering av användare från grupp"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Häv blockering"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Häv blockering av denna användare"
@@ -912,7 +919,7 @@ msgid "Conversation"
msgstr "Konversationer"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notiser"
@@ -931,7 +938,7 @@ msgstr "Du är inte ägaren av denna applikation."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Det var ett problem med din sessions-token."
@@ -957,12 +964,13 @@ msgstr "Ta inte bort denna applikation"
msgid "Delete this application"
msgstr "Ta bort denna applikation"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Inte inloggad."
@@ -991,7 +999,7 @@ msgstr "Är du säker på att du vill ta bort denna notis?"
msgid "Do not delete this notice"
msgstr "Ta inte bort denna notis"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Ta bort denna notis"
@@ -1007,7 +1015,7 @@ msgstr "Du kan bara ta bort lokala användare."
msgid "Delete user"
msgstr "Ta bort användare"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1015,12 +1023,12 @@ msgstr ""
"Är du säker på att du vill ta bort denna användare? Det kommer rensa all "
"data om användaren från databasen, utan en säkerhetskopia."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Ta bort denna användare"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Utseende"
@@ -1123,6 +1131,18 @@ msgstr "Återställ standardutseende"
msgid "Reset back to default"
msgstr "Återställ till standardvärde"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Spara"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Spara utseende"
@@ -1214,29 +1234,29 @@ msgstr "Redigera %s grupp"
msgid "You must be logged in to create a group."
msgstr "Du måste vara inloggad för att skapa en grupp."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Du måste vara en administratör för att redigera gruppen."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "Använd detta formulär för att redigera gruppen."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "beskrivning är för lång (max %d tecken)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Kunde inte uppdatera grupp."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Kunde inte skapa alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Alternativ sparade."
@@ -1355,7 +1375,7 @@ msgid "Cannot normalize that email address"
msgstr "Kan inte normalisera den e-postadressen"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Inte en giltig e-postadress."
@@ -1548,6 +1568,25 @@ msgstr "Ingen sådan fil."
msgid "Cannot read file."
msgstr "Kan inte läsa fil."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ogiltig token."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan inte flytta användare till sandlådan på denna webbplats."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Användaren är redan nedtystad."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1577,7 +1616,7 @@ msgstr "Användaren är redan blockerad från grupp."
msgid "User is not a member of group."
msgstr "Användare är inte en gruppmedlem."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blockera användare från grupp"
@@ -1612,31 +1651,31 @@ msgstr "Ingen ID."
msgid "You must be logged in to edit a group."
msgstr "Du måste vara inloggad för att redigera en grupp."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Gruppens utseende"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
"Anpassa hur din grupp ser ut genom att välja bakgrundbild och färgpalett."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Kunde inte uppdatera dina utseendeinställningar."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Utseendeinställningar sparade."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Gruppens logotyp"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1644,62 +1683,68 @@ msgstr ""
"Du kan ladda upp en logotypbild för din grupp. Den maximala filstorleken är %"
"s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "Användare utan matchande profil."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Välj ett kvadratiskt område i bilden som logotyp"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Logtyp uppdaterad."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "Misslyckades uppdatera logtyp."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s gruppmedlemmar"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s gruppmedlemmar, sida %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "En lista av användarna i denna grupp."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administratör"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blockera"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Gör användare till en administratör för gruppen"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Gör till administratör"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Gör denna användare till administratör"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidslinje"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Uppdateringar från medlemmar i %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -1959,16 +2004,18 @@ msgstr "Personligt meddelande"
msgid "Optionally add a personal message to the invitation."
msgstr "Om du vill, skriv ett personligt meddelande till inbjudan."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr "Skicka"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s har bjudit in dig att gå med dem på %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2029,7 +2076,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Du måste vara inloggad för att kunna gå med i en grupp."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Inget smeknamn eller ID."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s gick med i grupp %2$s"
@@ -2038,11 +2089,11 @@ msgstr "%1$s gick med i grupp %2$s"
msgid "You must be logged in to leave a group."
msgstr "Du måste vara inloggad för att lämna en grupp."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Du är inte en medlem i den gruppen."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s lämnade grupp %2$s"
@@ -2059,8 +2110,7 @@ msgstr "Felaktigt användarnamn eller lösenord."
msgid "Error setting user. You are probably not authorized."
msgstr "Fel vid inställning av användare. Du har sannolikt inte tillstånd."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logga in"
@@ -2314,8 +2364,8 @@ msgstr "innehållstyp "
msgid "Only "
msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ett dataformat som inte stödjs"
@@ -2454,7 +2504,8 @@ msgstr "Kan inte spara nytt lösenord."
msgid "Password saved."
msgstr "Lösenord sparat."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Sökvägar"
@@ -2487,7 +2538,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ogiltigt SSL-servernamn. Den maximala längden är 255 tecken."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Webbplats"
@@ -2576,7 +2626,7 @@ msgstr "Katalog med bakgrunder"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Aldrig"
@@ -2631,11 +2681,11 @@ msgstr "Inte en giltig persontagg: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Användare som taggat sig själv med %1$s - sida %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ogiltigt notisinnehåll"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Licensen för notiser ‘%1$s’ är inte förenlig webbplatslicensen ‘%2$s’."
@@ -2660,7 +2710,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 små bokstäver eller nummer, inga punkter eller mellanslag"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Fullständigt namn"
@@ -2688,7 +2738,7 @@ msgid "Bio"
msgstr "Biografi"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2715,7 +2765,7 @@ msgstr ""
"Taggar för dig själv (bokstäver, nummer, -, ., och _), separerade med "
"kommatecken eller mellanslag"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2743,7 +2793,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Biografin är för lång (max %d tecken)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidszon inte valt."
@@ -2756,23 +2806,24 @@ msgstr "Språknamn är för långt (max 50 tecken)."
msgid "Invalid tag: \"%s\""
msgstr "Ogiltig tagg: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Kunde inte uppdatera användaren för automatisk prenumeration."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Kunde inte spara platsinställningar."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Kunde inte spara profil."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Kunde inte spara taggar."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Inställningar sparade."
@@ -2785,28 +2836,28 @@ msgstr "Bortom sidbegränsningen (%s)"
msgid "Could not retrieve public stream."
msgstr "Kunde inte hämta publik ström."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Publik tidslinje, sida %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Publik tidslinje"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Publikt flöde av ström (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Publikt flöde av ström (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Publikt flöde av ström (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2815,11 +2866,11 @@ msgstr ""
"Detta är den publika tidslinjen för %%site.name%% men ingen har postat något "
"än."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Bli först att posta!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2827,7 +2878,7 @@ msgstr ""
"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
"posta!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2840,7 +2891,7 @@ msgstr ""
"net/). [Gå med nu](%%action.register%%) för att dela notiser om dig själv "
"med vänner, familj och kollegor! ([Läs mer](%%doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3019,8 +3070,7 @@ msgstr "Tyvärr, ogiltig inbjudningskod."
msgid "Registration successful"
msgstr "Registreringen genomförd"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrera"
@@ -3063,7 +3113,7 @@ msgid "Same as password above. Required."
msgstr "Samma som lösenordet ovan. Måste fyllas i."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -3171,7 +3221,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL till din profil på en annan kompatibel mikrobloggtjänst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Prenumerera"
@@ -3209,7 +3259,7 @@ msgstr "Du kan inte upprepa din egna notis."
msgid "You already repeated that notice."
msgstr "Du har redan upprepat denna notis."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Upprepad"
@@ -3217,33 +3267,33 @@ msgstr "Upprepad"
msgid "Repeated!"
msgstr "Upprepad!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Svarat till %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Svar till %1$s, sida %2$s"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Flöde med svar för %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Flöde med svar för %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Flöde med svar för %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3252,7 +3302,7 @@ msgstr ""
"Detta är tidslinjen som visar svar till %s1$ men %2$s har inte tagit emot en "
"notis för dennes uppmärksamhet än."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3261,7 +3311,7 @@ msgstr ""
"Du kan engagera andra användare i en konversation, prenumerera på fler "
"personer eller [gå med i grupper](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3275,6 +3325,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Svar till %1$s på %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kan inte tysta ned användare på denna webbplats."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Användare utan matchande profil."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3287,8 +3347,9 @@ msgstr "Du kan inte flytta användare till sandlådan på denna webbplats."
msgid "User is already sandboxed."
msgstr "Användare är redan flyttad till sandlådan."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessioner"
@@ -3312,8 +3373,8 @@ msgstr "Sessionsfelsökning"
msgid "Turn on debugging output for sessions."
msgstr "Sätt på felsökningsutdata för sessioner."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Spara webbplatsinställningar"
@@ -3343,8 +3404,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Beskrivning"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistik"
@@ -3407,22 +3468,22 @@ msgstr "%1$ss favoritnotiser, sida %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Kunde inte hämta favoritnotiser."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Flöde för %ss favoriter (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Flöde för %ss favoriter (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Flöde för %ss favoriter (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3431,7 +3492,7 @@ msgstr ""
"bredvid någon notis du skulle vilja bokmärka för senare tillfälle eller för "
"att sätta strålkastarljuset på."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3440,7 +3501,7 @@ msgstr ""
"%s har inte lagt till några notiser till sina favoriter ännu. Posta något "
"intressant de skulle lägga till sina favoriter :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3451,7 +3512,7 @@ msgstr ""
"[registrera ett konto](%%%%action.register%%%%) och posta något intressant "
"de skulle lägga till sina favoriter :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Detta är ett sätt att dela med av det du gillar."
@@ -3465,67 +3526,67 @@ msgstr "%s grupp"
msgid "%1$s group, page %2$d"
msgstr "%1$s grupp, sida %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Grupprofil"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "Notis"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Åtgärder för grupp"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Flöde av notiser för %s grupp (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Flöde av notiser för %s grupp (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Flöde av notiser för %s grupp (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF för %s grupp"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alla medlemmar"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Skapad"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3540,7 +3601,7 @@ msgstr ""
"sina liv och intressen. [Gå med nu](%%%%action.register%%%%) för att bli en "
"del av denna grupp och många fler! ([Läs mer](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3553,7 +3614,7 @@ msgstr ""
"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
"sina liv och intressen. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratörer"
@@ -3674,147 +3735,138 @@ msgid "User is already silenced."
msgstr "Användaren är redan nedtystad."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Grundinställningar för din StatusNet-webbplats"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Webbplatsnamnet måste vara minst ett tecken långt."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Du måste ha en giltig e-postadress."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Okänt språk \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Ogiltig rapport-URL för ögonblicksbild"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Ogiltigt körvärde för ögonblicksbild."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Minsta textbegränsning är 140 tecken."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Begränsning av duplikat måste vara en eller fler sekuner."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Allmänt"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Webbplatsnamn"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Namnet på din webbplats, t.ex. \"Företagsnamn mikroblogg\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Tillhandahållen av"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Text som används för tillskrivningslänkar i sidfoten på varje sida."
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Tillhandahållen av URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL som används för tillskrivningslänkar i sidfoten på varje sida"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakte-postadress för din webbplats"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokal"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardtidszon"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standardtidzon för denna webbplats; vanligtvis UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Webbplatsens standardspråk"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Ögonblicksbild"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Slumpmässigt vid webbförfrågningar"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "I ett schemalagt jobb"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Ögonblicksbild av data"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "När statistikdata skall skickas till status.net-servrar"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frekvens"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL för rapport"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Ögonblicksbild kommer skickat till denna URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Begränsningar"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Textbegränsning"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximala antalet tecken för notiser."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplikatbegränsning"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Hur länge användare måste vänta (i sekunder) för att posta samma sak igen."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Webbplatsnotis"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nytt meddelande"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Kunde inte spara dina utseendeinställningar."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Webbplatsnotis"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Webbplatsnotis"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Inställningar för SMS"
@@ -3914,19 +3966,88 @@ msgstr ""
msgid "No code entered"
msgstr "Ingen kod ifylld"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Ögonblicksbild"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Ändra webbplatskonfiguration"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Ogiltigt körvärde för ögonblicksbild."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Ogiltig rapport-URL för ögonblicksbild"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Slumpmässigt vid webbförfrågningar"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "I ett schemalagt jobb"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Ögonblicksbild av data"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "När statistikdata skall skickas till status.net-servrar"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frekvens"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL för rapport"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Ögonblicksbild kommer skickat till denna URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Spara webbplatsinställningar"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du är inte prenumerat hos den profilen."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Kunde inte spara prenumeration."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Inte en lokal användare."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Denna åtgärd accepterar endast POST-begäran."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Ingen sådan profil."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Du kan inte prenumerera på en 0MB 0.1-fjärrprofil med denna åtgärd."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Prenumerant"
@@ -3990,7 +4111,7 @@ msgstr "Det är dessa personer vars meddelanden du lyssnar på."
msgid "These are the people whose notices %s listens to."
msgstr "Det är dessa personer vars notiser %s lyssnar på."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4006,35 +4127,35 @@ msgstr ""
"twittersettings%%) kan du prenumerera automatiskt på personer som du redan "
"följer där."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s lyssnar inte på någon."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Notiser taggade med %1$s, sida %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Flöde av notiser för tagg %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Flöde av notiser för tagg %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Flöde av notiser för tagg %s (Atom)"
@@ -4089,7 +4210,7 @@ msgstr ""
msgid "No such tag."
msgstr "Ingen sådan tagg."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-metoden är under uppbyggnad."
@@ -4113,7 +4234,7 @@ msgstr "Ingen profil-ID i begäran."
msgid "Unsubscribed"
msgstr "Prenumeration avslutad"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4121,72 +4242,73 @@ msgstr ""
"Licensen för lyssnarströmmen '%1$s' är inte förenlig med webbplatslicensen '%"
"2$s'."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "Användare"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "Användarinställningar för denna StatusNet-webbplats"
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Ogiltig begränsning av biografi. Måste vara numerisk."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Ogiltig välkomsttext. Maximal längd är 255 tecken."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Ogiltig standardprenumeration: '%1$s' är inte användare."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "Begränsning av biografi"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "Maximal teckenlängd av profilbiografi."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nya användare"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "Välkomnande av ny användare"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "Välkomsttext för nya användare (max 255 tecken)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "Standardprenumerationer"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr ""
"Lägg automatiskt till en prenumeration på denna användare för alla nya "
"användare."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Inbjudningar"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Inbjudningar aktiverade"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "Hurvida användare skall tillåtas bjuda in nya användare."
@@ -4316,17 +4438,23 @@ msgstr "%1$s grupper, sida %2$d"
msgid "Search for more groups"
msgstr "Sök efter fler grupper"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s är inte en medlem i någon grupp."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Prova att [söka efter grupper](%%action.groupsearch%%) och gå med i dem."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Uppdateringar från %1$s på %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4382,7 +4510,7 @@ msgstr ""
msgid "Plugins"
msgstr "Insticksmoduler"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4421,6 +4549,10 @@ msgstr "Inte med i grupp."
msgid "Group leave failed."
msgstr "Grupputträde misslyckades."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Kunde inte uppdatera lokal grupp."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4438,27 +4570,27 @@ msgstr "Kunde inte infoga meddelande."
msgid "Could not update message with new URI."
msgstr "Kunde inte uppdatera meddelande med ny URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Databasfel vid infogning av hashtag: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem vid sparande av notis. För långt."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem vid sparande av notis. Okänd användare."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"För många notiser för snabbt; ta en vilopaus och posta igen om ett par "
"minuter."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4466,41 +4598,73 @@ msgstr ""
"För många duplicerade meddelanden för snabbt; ta en vilopaus och posta igen "
"om ett par minuter."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Du är utestängd från att posta notiser på denna webbplats."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem med att spara notis."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem med att spara gruppinkorg."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Databasfel vid infogning av svar: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Du har blivit utestängd från att prenumerera."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Redan prenumerant!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "Användaren har blockerat dig."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Inte prenumerant!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Kunde inte ta bort själv-prenumeration."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Kunde inte ta bort prenumeration."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Kunde inte ta bort prenumeration."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Välkommen till %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Kunde inte skapa grupp."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Kunde inte ställa in grupp-URI."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Kunde inte ställa in gruppmedlemskap."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Kunde inte spara lokal gruppinformation."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Ändra dina profilinställningar"
@@ -4538,124 +4702,171 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Namnlös sida"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primär webbplatsnavigation"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Hem"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personlig profil och vänners tidslinje"
-#: lib/action.php:441
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personligt"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Ändra din e-post, avatar, lösenord, profil"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Anslut"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Anslut till tjänster"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "Anslut"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Ändra webbplatskonfiguration"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Bjud in"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administratör"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Bjud in vänner och kollegor att gå med dig på %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Logga ut"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Bjud in"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logga ut från webbplatsen"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logga ut"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Skapa ett konto"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrera"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Logga in på webbplatsen"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hjälp"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logga in"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjälp mig!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Sök"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjälp"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Sök efter personer eller text"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "Sök"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Webbplatsnotis"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokala vyer"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidnotis"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Sekundär webbplatsnavigation"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjälp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "Frågor & svar"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "Användarvillkor"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Sekretess"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Källa"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblem"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Programvarulicens för StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4664,12 +4875,12 @@ msgstr ""
"**%%site.name%%** är en mikrobloggtjänst tillhandahållen av [%%site.broughtby"
"%%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** är en mikrobloggtjänst. "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4680,95 +4891,147 @@ msgstr ""
"version %s, tillgänglig under [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licens för webbplatsinnehåll"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Innehåll och data av %1$s är privat och konfidensiell."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Innehåll och data copyright av %1$s. Alla rättigheter reserverade."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Innehåll och data copyright av medarbetare. Alla rättigheter reserverade."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Alla "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "licens."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Numrering av sidor"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Senare"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Tidigare"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Kan inte hantera fjärrinnehåll ännu."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Kan inte hantera inbäddat XML-innehåll ännu."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Kan inte hantera inbäddat Base64-innehåll ännu."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Du kan inte göra förändringar av denna webbplats."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Ändringar av den panelen tillåts inte."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() är inte implementerat."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSetting() är inte implementerat."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Kunde inte ta bort utseendeinställning."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Grundläggande webbplatskonfiguration"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Webbplats"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Konfiguration av utseende"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Utseende"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Konfiguration av användare"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Användare"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Konfiguration av åtkomst"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguration av sökvägar"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Konfiguration av sessioner"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Webbplatsnotis"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Konfiguration av sökvägar"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"API-resursen kräver läs- och skrivrättigheter, men du har bara läsrättighet."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4861,11 +5124,11 @@ msgstr "Notiser där denna bilaga förekommer"
msgid "Tags for this attachment"
msgstr "Taggar för denna billaga"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Byte av lösenord misslyckades"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Byte av lösenord är inte tillåtet"
@@ -5016,81 +5279,90 @@ msgstr "Fel vid sparande av notis."
msgid "Specify the name of the user to subscribe to"
msgstr "Ange namnet på användaren att prenumerara på"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Ingen sådan användare."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "Prenumerar på %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Ange namnet på användaren att avsluta prenumeration på"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "Prenumeration hos %s avslutad"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Kommando inte implementerat än."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Notifikation av."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Kan inte sätta på notifikation."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Notifikation på."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Kan inte stänga av notifikation."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Inloggningskommando är inaktiverat"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Denna länk är endast användbar en gång, och gäller bara i 2 minuter: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "Prenumeration avslutad %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Du prenumererar inte på någon."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du prenumererar på denna person:"
msgstr[1] "Du prenumererar på dessa personer:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "Ingen prenumerar på dig."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Denna person prenumererar på dig:"
msgstr[1] "Dessa personer prenumererar på dig:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Du är inte medlem i några grupper."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
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:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5104,6 +5376,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5142,6 +5415,7 @@ msgstr ""
"d <smeknamn> <text> - direktmeddelande till användare\n"
"get <smeknamn> - hämta senaste notis från användare\n"
"whois <smeknamn> - hämta profilinformation om användare\n"
+"lose <smeknamn> - tvinga användare att sluta följa dig\n"
"fav <smeknamn> - lägg till användarens senaste notis som favorit\n"
"fav #<notisid> - lägg till notis med given id som favorit\n"
"repeat #<notisid> - upprepa en notis med en given id\n"
@@ -5168,19 +5442,19 @@ msgstr ""
"tracks - inte implementerat än.\n"
"tracking - inte implementerat än.\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ingen konfigurationsfil hittades. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Jag letade efter konfigurationsfiler på följande platser: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Du kanske vill köra installeraren för att åtgärda detta."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "GÃ¥ till installeraren."
@@ -5279,6 +5553,11 @@ msgstr "Välj en tagg för att begränsa lista"
msgid "Go"
msgstr "GÃ¥"
+#: lib/grantroleform.php:91
+#, php-format
+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 till gruppen eller ämnets hemsida eller blogg"
@@ -5368,23 +5647,23 @@ msgstr "Systemfel vid uppladdning av fil."
msgid "Not an image or corrupt file."
msgstr "Inte en bildfil eller så är filen korrupt."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Bildfilens format stödjs inte."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Förlorade vår fil."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Okänd filtyp"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "kB"
@@ -5673,7 +5952,7 @@ msgstr ""
"engagera andra användare i konversationen. Folk kan skicka meddelanden till "
"dig som bara du ser."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "från"
@@ -5766,6 +6045,11 @@ msgstr "Till"
msgid "Available characters"
msgstr "Tillgängliga tecken"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Skicka"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "Skicka en notis"
@@ -5799,48 +6083,48 @@ msgstr ""
"Tyvärr, hämtning av din geografiska plats tar längre tid än förväntat, var "
"god försök igen senare"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "N"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "S"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "Ö"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "V"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "på"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "i sammanhang"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Upprepad av"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svara på denna notis"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Notis upprepad"
@@ -5872,10 +6156,6 @@ msgstr "Fel vid infogning av fjärrprofilen"
msgid "Duplicate notice"
msgstr "Duplicerad notis"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Du har blivit utestängd från att prenumerera."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kunde inte infoga ny prenumeration."
@@ -5917,7 +6197,7 @@ msgstr "Taggar i %ss notiser"
msgid "Unknown"
msgstr "Okänd"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Prenumerationer"
@@ -5925,23 +6205,23 @@ msgstr "Prenumerationer"
msgid "All subscriptions"
msgstr "Alla prenumerationer"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Prenumeranter"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alla prenumeranter"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Användar-ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem sedan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alla grupper"
@@ -5981,7 +6261,12 @@ msgstr "Upprepa denna notis?"
msgid "Repeat this notice"
msgstr "Upprepa denna notis"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Blockera denna användare från denna grupp"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Ingen enskild användare definierad för enanvändarläge."
@@ -6001,6 +6286,10 @@ msgstr "Sök webbplats"
msgid "Keyword(s)"
msgstr "Nyckelord"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Sök"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Sök hjälp"
@@ -6052,33 +6341,14 @@ msgstr "Personer som prenumererar på %s"
msgid "Groups %s is a member of"
msgstr "Grupper %s är en medlem i"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Redan prenumerant!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "Användaren har blockerat dig."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Kunde inte prenumerera."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Kunde inte göra andra till prenumeranter hos dig."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Inte prenumerant!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Kunde inte ta bort själv-prenumeration."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Bjud in"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Kunde inte ta bort prenumeration."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "Bjud in vänner och kollegor att gå med dig på %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6130,67 +6400,84 @@ msgstr "Redigera avatar"
msgid "User actions"
msgstr "Åtgärder för användare"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "Redigera profilinställningar"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Redigera"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "Skicka ett direktmeddelande till denna användare"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "Meddelande"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Moderera"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Användarprofil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratörer"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderera"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "ett par sekunder sedan"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "för ett år sedan"
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index 85719532b..f2e49f934 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Telugu
#
+# Author@translatewiki.net: Brion
# Author@translatewiki.net: Veeven
# --
# This file is distributed under the same license as the StatusNet package.
@@ -8,78 +9,86 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:03+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:23+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "అంగీకరించà±"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "సైటౠఅందà±à°¬à°¾à°Ÿà± అమరికలà±"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "నమోదà±"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "అంతరంగికం"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr "à°…à°œà±à°žà°¾à°¤ (à°ªà±à°°à°µà±‡à°¶à°¿à°‚చని) వాడà±à°•à°°à±à°²à°¨à°¿ సైటà±à°¨à°¿ చూడకà±à°‚à°¡à°¾ నిషేధించాలా?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à°•à± మాతà±à°°à°®à±‡"
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "అంతరంగికం"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à± మాతà±à°°à°®à±‡ నమోదౠఅవà±à°µà°—లిగేలా చెయà±à°¯à°¿."
-#: actions/accessadminpanel.php:173
-#, fuzzy
-msgid "Closed"
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à°•à± మాతà±à°°à°®à±‡"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "కొతà±à°¤ నమోదà±à°²à°¨à± అచేతనంచేయి."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "à°­à°¦à±à°°à°ªà°°à°šà±"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "à°­à°¦à±à°°à°ªà°°à°šà±"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -93,78 +102,87 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s మరియౠమితà±à°°à±à°²à±, పేజీ %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s మరియౠమితà±à°°à±à°²à±"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "%s యొకà±à°• మితà±à°°à±à°² ఫీడౠ(RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "%s యొకà±à°• మితà±à°°à±à°² ఫీడౠ(RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "%s యొకà±à°• మితà±à°°à±à°² ఫీడౠ(ఆటమà±)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "ఇది %s మరియౠమితà±à°°à±à°² కాలరేఖ కానీ ఇంకా ఎవరూ à°à°®à±€ రాయలేదà±."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr "ఇతరà±à°²à°•à°¿ చందా చేరండి, [à°à°¦à±ˆà°¨à°¾ à°—à±à°‚à°ªà±à°²à±‹ చేరండి](%%action.groups%%) లేదా మీరే à°à°¦à±ˆà°¨à°¾ à°µà±à°°à°¾à°¯à°‚à°¡à°¿."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "మీరౠమరియౠమీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à±"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -177,20 +195,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±."
@@ -224,8 +242,9 @@ msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
@@ -250,7 +269,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -364,68 +383,68 @@ msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±
msgid "Could not find target user."
msgstr "లకà±à°·à±à°¯à°¿à°¤ వాడà±à°•à°°à°¿à°¨à°¿ à°•à°¨à±à°—ొనలేకపోయాం."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "పేరà±à°²à±‹ à°šà°¿à°¨à±à°¨à°¬à°¡à°¿ à°…à°•à±à°·à°°à°¾à°²à± మరియౠఅంకెలౠమాతà±à°°à°®à±‡ ఖాళీలౠలేకà±à°‚à°¡à°¾ ఉండాలి."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "à°† పేరà±à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ వాడà±à°¤à±à°¨à±à°¨à°¾à°°à±. మరోటి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "సరైన పేరౠకాదà±."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "హోమౠపేజీ URL సరైనది కాదà±."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "పూరà±à°¤à°¿ పేరౠచాలా పెదà±à°¦à°—à°¾ ఉంది (à°—à°°à°¿à°·à±à° à°‚à°—à°¾ 255 à°…à°•à±à°·à°°à°¾à°²à±)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "వివరణ చాలా పెదà±à°¦à°—à°¾ ఉంది (%d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "à°ªà±à°°à°¾à°‚తం పేరౠమరీ పెదà±à°¦à°—à°¾ ఉంది (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "చాలా మారà±à°ªà±‡à°°à±à°²à±! %d à°—à°°à°¿à°·à±à° à°‚."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "తపà±à°ªà±à°¡à± మారà±à°ªà±‡à°°à±: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "\"%s\" à°…à°¨à±à°¨ మారà±à°ªà±‡à°°à±à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ వాడà±à°¤à±à°¨à±à°¨à°¾à°°à±. మరొకటి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "మారà±à°ªà±‡à°°à± పేరà±à°¤à±‹ సమానంగా ఉండకూడదà±."
@@ -436,15 +455,15 @@ msgstr "మారà±à°ªà±‡à°°à± పేరà±à°¤à±‹ సమానంగా ఉం
msgid "Group not found!"
msgstr "à°—à±à°‚పౠదొరకలేదà±!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à±."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à± à°† à°—à±à°‚పౠనà±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిరోధించారà±."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "ఓపెనà±à°à°¡à±€ ఫారమà±à°¨à± సృషà±à°Ÿà°¿à°‚చలేకపోయాం: %s"
@@ -453,7 +472,7 @@ msgstr "ఓపెనà±à°à°¡à±€ ఫారమà±à°¨à± సృషà±à°Ÿà°¿à°‚à°šà
msgid "You are not a member of this group."
msgstr "మీరౠఈ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం."
@@ -485,7 +504,7 @@ msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -494,7 +513,7 @@ msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -528,7 +547,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -551,13 +570,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "ఖాతా"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -633,23 +652,11 @@ msgstr ""
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s కాలరేఖ"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -675,17 +682,17 @@ msgstr "అందరి à°¨à±à°‚à°¡à°¿ %s తాజాకరణలà±!"
msgid "Repeated to %s"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "%s యొకà±à°• à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¾à°²à±"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
@@ -701,8 +708,7 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ జోడింపౠలేదà±."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
#, fuzzy
msgid "No nickname."
msgstr "పేరౠలేదà±."
@@ -715,7 +721,7 @@ msgstr "పరిమాణం లేదà±."
msgid "Invalid size."
msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "అవతారం"
@@ -732,30 +738,30 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "అవతారపౠఅమరికలà±"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "అసలà±"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "à°®à±à°¨à±à°œà±‚à°ªà±"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "తొలగించà±"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "à°Žà°—à±à°®à°¤à°¿à°‚à°šà±"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "à°•à°¤à±à°¤à°¿à°°à°¿à°‚à°šà±"
@@ -763,7 +769,7 @@ msgstr "à°•à°¤à±à°¤à°¿à°°à°¿à°‚à°šà±"
msgid "Pick a square area of the image to be your avatar"
msgstr "మీ అవతారానికి గానూ à°ˆ à°šà°¿à°¤à±à°°à°‚ à°¨à±à°‚à°¡à°¿ à°’à°• à°šà°¤à±à°°à°¸à±à°°à°ªà± à°ªà±à°°à°¦à±‡à°¶à°¾à°¨à±à°¨à°¿ à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -795,22 +801,22 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "కాదà±"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించకà±"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "à°…à°µà±à°¨à±"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
@@ -818,40 +824,44 @@ msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
msgid "Failed to save block information."
msgstr "నిరోధపౠసమాచారానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో విఫలమయà±à°¯à°¾à°‚."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°—à±à°‚పౠలేదà±."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s మరియౠమితà±à°°à±à°²à±"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "à°ˆ à°—à±à°‚పౠలోనికి చేరకà±à°‚à°¡à°¾ నిరోధించిన వాడà±à°•à°°à±à°² యొకà±à°• జాబితా."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
@@ -908,7 +918,7 @@ msgid "Conversation"
msgstr "సంభాషణ"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "సందేశాలà±"
@@ -927,7 +937,7 @@ msgstr "మీరౠఈ ఉపకరణం యొకà±à°• యజమాని à
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -952,12 +962,13 @@ msgstr "à°ˆ ఉపకరణానà±à°¨à°¿ తొలగించకà±"
msgid "Delete this application"
msgstr "à°ˆ ఉపకరణానà±à°¨à°¿ తొలగించà±"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చలేదà±."
@@ -984,7 +995,7 @@ msgstr "మీరౠనిజంగానే à°ˆ నోటీసà±à°¨à°¿ à°¤à±
msgid "Do not delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించకà±"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±"
@@ -1000,7 +1011,7 @@ msgstr "మీరౠసà±à°¥à°¾à°¨à°¿à°• వాడà±à°•à°°à±à°²à°¨à± మా
msgid "Delete user"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తొలగించà±"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1008,12 +1019,12 @@ msgstr ""
"మీరౠనిజంగానే à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ తొలగించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? ఇది à°† వాడà±à°•à°°à°¿ భోగటà±à°Ÿà°¾à°¨à°¿ డాటాబేసౠనà±à°‚à°¡à°¿ తొలగిసà±à°¤à±à°‚ది, "
"వెనకà±à°•à°¿ తేలేకà±à°‚à°¡à°¾."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ తొలగించà±"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "రూపà±à°°à±‡à°–à°²à±"
@@ -1114,6 +1125,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "à°­à°¦à±à°°à°ªà°°à°šà±"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "రూపà±à°°à±‡à°–లని à°­à°¦à±à°°à°ªà°°à°šà±"
@@ -1209,29 +1232,29 @@ msgstr "%s à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà±"
msgid "You must be logged in to create a group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చడానికి మీరౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చాలి."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ మీరౠనిరà±à°µà°¾à°¹à°•à±à°²à°¯à°¿ ఉండాలి."
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించండి."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "వివరణ చాలా పెదà±à°¦à°¦à°¿à°—à°¾ ఉంది (140 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "ఎంపికలౠభదà±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
@@ -1347,7 +1370,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "సరైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ కాదà±:"
@@ -1532,6 +1555,25 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ ఫైలౠలేదà±."
msgid "Cannot read file."
msgstr "ఫైలà±à°¨à°¿ చదవలేకపోతà±à°¨à±à°¨à°¾à°‚."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ నిరోధించారà±."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1561,7 +1603,7 @@ msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à
msgid "User is not a member of group."
msgstr "వాడà±à°•à°°à°¿ à°ˆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚పౠనà±à°‚à°¡à°¿ నిరోధించà±"
@@ -1596,93 +1638,99 @@ msgstr "à°à°¡à±€ లేదà±."
msgid "You must be logged in to edit a group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "à°—à±à°‚పౠఅలంకారం"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "మీ రూపà±à°°à±‡à°–లని తాజాకరించలేకపోయాం."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "à°…à°­à°¿à°°à±à°šà±à°²à± à°­à°¦à±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "à°—à±à°‚పౠచిహà±à°¨à°‚"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "మీ à°—à±à°‚à°ªà±à°•à°¿ మీరౠఒక à°šà°¿à°¹à±à°¨à°¾à°¨à±à°¨à°¿ à°Žà°•à±à°•à°¿à°‚చవచà±à°šà±. à°† ఫైలౠయొకà±à°• à°—à°°à°¿à°·à±à°  పరిమాణం %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "à°šà°¿à°¹à±à°¨à°‚à°—à°¾ ఉండాలà±à°¸à°¿à°¨ à°šà°¤à±à°°à°¸à±à°¤à±à°° à°ªà±à°°à°¦à±‡à°¶à°¾à°¨à±à°¨à°¿ బొమà±à°® à°¨à±à°‚à°¡à°¿ à°Žà°‚à°šà±à°•à±‹à°‚à°¡à°¿."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "à°šà°¿à°¹à±à°¨à°¾à°¨à±à°¨à°¿ తాజాకరించాం."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "à°šà°¿à°¹à±à°¨à°ªà± తాజాకరణ విఫలమైంది."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s à°—à±à°‚పౠసభà±à°¯à±à°²à±"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "à°ˆ à°—à±à°‚à°ªà±à°²à±‹ వాడà±à°•à°°à±à°²à± జాబితా."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "నిరోధించà±"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚à°ªà±à°•à°¿ à°’à°• నిరà±à°µà°¾à°¹à°•à±à°¨à°¿à°—à°¾ చేయి"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°¨à±à°¨à°¿ చేయి"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరà±à°µà°¾à°¹à°•à±à°¨à±à°¨à°¿ చేయి"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s కాలరేఖ"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "à°—à±à°‚à°ªà±à°²à±"
@@ -1922,16 +1970,19 @@ msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం"
msgid "Optionally add a personal message to the invitation."
msgstr "à°à°šà±à°›à°¿à°•à°‚à°—à°¾ ఆహà±à°µà°¾à°¨à°¾à°¨à°¿à°•à°¿ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం చేరà±à°šà°‚à°¡à°¿."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "పంపించà±"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%2$sలో చేరమని %1$s మిమà±à°®à°²à±à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚చారà±"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -1966,7 +2017,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "à°—à±à°‚à°ªà±à°²à±à°²à±‹ చేరడానికి మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "పేరౠలేదà±."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s %2$s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±"
@@ -1975,11 +2031,11 @@ msgstr "%1$s %2$s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±"
msgid "You must be logged in to leave a group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "మీరౠఆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%2$s à°—à±à°‚పౠనà±à°‚à°¡à°¿ %1$s వైదొలిగారà±"
@@ -1996,8 +2052,7 @@ msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా సంకేతపదం
msgid "Error setting user. You are probably not authorized."
msgstr ""
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
@@ -2191,9 +2246,8 @@ msgid "You must be logged in to list your applications."
msgstr "మీ ఉపకరణాలనౠచూడడానికి మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "ఇతర ఎంపికలà±"
+msgstr "OAuth ఉపకరణాలà±"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2246,8 +2300,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాతà±à°°à°®à±‡ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2391,7 +2445,8 @@ msgstr "కొతà±à°¤ సంకేతపదానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à
msgid "Password saved."
msgstr "సంకేతపదం à°­à°¦à±à°°à°®à°¯à±à°¯à°¿à°‚ది."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2424,7 +2479,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "సైటà±"
@@ -2515,7 +2569,7 @@ msgstr "నేపథà±à°¯à°¾à°² సంచయం"
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "వైదొలగà±"
@@ -2573,11 +2627,11 @@ msgstr "సరైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ కాదà±
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "సందేశపౠవిషయం సరైనది కాదà±"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2602,7 +2656,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 à°šà°¿à°¨à±à°¨à°¬à°¡à°¿ à°…à°•à±à°·à°°à°¾à°²à± లేదా అంకెలà±, విరామచిహà±à°¨à°¾à°²à± మరియౠఖాళీలౠతపà±à°ª"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "పూరà±à°¤à°¿ పేరà±"
@@ -2630,7 +2684,7 @@ msgid "Bio"
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2655,7 +2709,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "భాష"
@@ -2681,7 +2735,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚ చాలా పెదà±à°¦à°—à°¾ ఉంది (%d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "కాలమండలానà±à°¨à°¿ à°Žà°‚à°šà±à°•à±‹à°²à±‡à°¦à±."
@@ -2694,24 +2748,25 @@ msgstr "భాష మరీ పెదà±à°¦à°—à°¾ ఉంది (50 à°…à°•à±à°·à
msgid "Invalid tag: \"%s\""
msgstr "'%s' అనే హోమౠపేజీ సరైనదికాదà±"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "à°Ÿà±à°¯à°¾à°—à±à°²à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "à°Ÿà±à°¯à°¾à°—à±à°²à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "అమరికలౠభదà±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
@@ -2724,48 +2779,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "à°ªà±à°°à°œà°¾ కాలరేఖ, పేజీ %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "à°ªà±à°°à°œà°¾ కాలరేఖ"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2774,7 +2829,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2947,8 +3002,7 @@ msgstr "à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, తపà±à°ªà± ఆహà±à°µà°¾à°¨ à°¸à°
msgid "Registration successful"
msgstr "నమోదౠవిజయవంతం"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "నమోదà±"
@@ -2987,7 +3041,7 @@ msgid "Same as password above. Required."
msgstr "పై సంకేతపదం మరోసారి. తపà±à°ªà°¨à°¿à°¸à°°à°¿."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "ఈమెయిలà±"
@@ -3084,7 +3138,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "చందాచేరà±"
@@ -3123,7 +3177,7 @@ msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోà
msgid "You already repeated that notice."
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించారà±."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
@@ -3133,40 +3187,40 @@ msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
msgid "Repeated!"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr "ఇది %s మరియౠమితà±à°°à±à°² కాలరేఖ కానీ ఇంకా ఎవరూ à°à°®à±€ రాయలేదà±."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3175,7 +3229,7 @@ msgstr ""
"మీరౠఇతర వాడà±à°•à°°à±à°²à°¤à±‹ సంభాషించవచà±à°šà±, మరింత మంది à°µà±à°¯à°•à±à°¤à±à°²à°•à± చందాచేరవచà±à°šà± లేదా [à°—à±à°‚à°ªà±à°²à°²à±‹ చేరవచà±à°šà±]"
"(%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3187,6 +3241,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà±"
@@ -3201,8 +3265,9 @@ msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡
msgid "User is already sandboxed."
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ నిరోధించారà±."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3227,8 +3292,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
@@ -3259,8 +3324,8 @@ msgstr "సంసà±à°§"
msgid "Description"
msgstr "వివరణ"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "గణాంకాలà±"
@@ -3322,35 +3387,35 @@ msgstr "%1$sà°•à°¿ ఇషà±à°Ÿà°®à±ˆà°¨ నోటీసà±à°²à±, పేజీ
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "%s యొకà±à°• మితà±à°°à±à°² ఫీడà±"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "%s యొకà±à°• మితà±à°°à±à°² ఫీడà±"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "%s యొకà±à°• ఇషà±à°Ÿà°¾à°‚శాల ఫీడౠ(ఆటమà±)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3358,7 +3423,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "మీకౠనచà±à°šà°¿à°¨à°µà°¿ పంచà±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ ఇదొక మారà±à°—à°‚."
@@ -3372,67 +3437,67 @@ msgstr "%s à°—à±à°‚à°ªà±"
msgid "%1$s group, page %2$d"
msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "à°—à±à°‚పౠపà±à°°à±Šà°«à±ˆà°²à±"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "గమనిక"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "మారà±à°ªà±‡à°°à±à°²à±"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "à°—à±à°‚పౠచరà±à°¯à°²à±"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s à°—à±à°‚à°ªà±"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "సభà±à°¯à±à°²à±"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(à°à°®à±€à°²à±‡à°¦à±)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "అందరౠసభà±à°¯à±à°²à±‚"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3442,7 +3507,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3451,7 +3516,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
@@ -3563,147 +3628,138 @@ msgid "User is already silenced."
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ నిరోధించారà±."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "à°ˆ à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటౠసైటà±à°•à°¿ à°ªà±à°°à°¾à°§à°®à°¿à°• అమరికలà±."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "సైటౠపేరౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ à°¸à±à°¨à±à°¨à°¾ కంటే à°Žà°•à±à°•à±à°µ పొడవà±à°‚డాలి."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "మీకౠసరైన సంపà±à°°à°¦à°¿à°‚పౠఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ ఉండాలి."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "à°—à±à°°à±à°¤à± తెలియని భాష \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "కనిషà±à°  పాఠà±à°¯ పరిమితి 140 à°…à°•à±à°·à°°à°¾à°²à±."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "సాధారణ"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "సైటౠపేరà±"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "మీ సైటౠయొకà±à°• పేరà±, ఇలా \"మీకంపెనీ మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à±ˆ నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°²à± à°à°®à±€ లేవà±."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "à°¸à±à°¥à°¾à°¨à°¿à°•"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯ కాలమండలం"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯ సైటౠభాష"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "తరచà±à°¦à°¨à°‚"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "పరిమితà±à°²à±"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "పాఠà±à°¯à°ªà± పరిమితి"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "సందేశాలలోని à°…à°•à±à°·à°°à°¾à°² à°—à°°à°¿à°·à±à°  సంఖà±à°¯."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "సైటౠగమనిక"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "కొతà±à°¤ సందేశం"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "సైటౠగమనిక"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "సైటౠగమనిక"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS అమరికలà±"
@@ -3798,20 +3854,90 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "చందాలà±"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "తరచà±à°¦à°¨à°‚"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "చందాని సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• వాడà±à°•à°°à°¿ కాదà±."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+#, fuzzy
+msgid "No such profile."
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ ఫైలౠలేదà±."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "చందాదారà±à°²à±"
@@ -3873,7 +3999,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3883,35 +4009,35 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr ""
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "జాబరà±"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
@@ -3962,7 +4088,7 @@ msgstr ""
msgid "No such tag."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°Ÿà±à°¯à°¾à°—ౠలేదà±."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3989,77 +4115,79 @@ msgstr ""
msgid "Unsubscribed"
msgstr "చందాదారà±à°²à±"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "వాడà±à°•à°°à°¿"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "à°ˆ à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటౠసైటà±à°•à°¿ వాడà±à°•à°°à°¿ అమరికలà±."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯ పరిమితి"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚ యొకà±à°• à°—à°°à°¿à°·à±à°  పొడవà±, à°…à°•à±à°·à°°à°¾à°²à°²à±‹."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "కొతà±à°¤ వాడà±à°•à°°à±à°²à±"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "కొతà±à°¤ వాడà±à°•à°°à°¿ à°¸à±à°µà°¾à°—తం"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "కొతà±à°¤ వాడà±à°•à°°à±à°²à°•à±ˆ à°¸à±à°µà°¾à°—à°¤ సందేశం (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯ చందా"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "ఉపయోగించాలà±à°¸à°¿à°¨ యాంతà±à°°à°¿à°• à°•à±à°¦à°¿à°‚పౠసేవ."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "ఆహà±à°µà°¾à°¨à°¾à°²à±"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "ఆహà±à°µà°¾à°¨à°¾à°²à°¨à°¿ చేతనంచేసాం"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "వాడà±à°•à°°à±à°²à°¨à± కొతà±à°¤ వారిని ఆహà±à°µà°¾à°¨à°¿à°‚చడానికి à°…à°¨à±à°®à°¤à°¿à°‚చాలా వదà±à°¦à°¾."
@@ -4179,16 +4307,22 @@ msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
msgid "Search for more groups"
msgstr "మరినà±à°¨à°¿ à°—à±à°‚à°ªà±à°²à°•à±ˆ వెతà±à°•à±"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s à° à°—à±à°‚పౠలోనూ సభà±à°¯à±à°²à± కాదà±."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "[à°—à±à°‚à°ªà±à°²à°¨à°¿ వెతికి](%%action.groupsearch%%) వాటిలో చేరడానికి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4232,7 +4366,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "సంచిక"
@@ -4269,6 +4403,11 @@ msgstr "à°—à±à°‚à°ªà±à°²à±‹ భాగం కాదà±."
msgid "Group leave failed."
msgstr "à°—à±à°‚పౠనà±à°‚à°¡à°¿ వైదొలగడం విఫలమైంది."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4286,68 +4425,104 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "à°ˆ సైటà±à°²à±‹ నోటీసà±à°²à± రాయడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "చందాచేరడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ చందాచేరారà±!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "వాడà±à°•à°°à°¿ మిమà±à°®à°²à±à°¨à°¿ నిరోధించారà±."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "చందాదారà±à°²à±"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "చందాని తొలగించలేకపోయాం."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "చందాని తొలగించలేకపోయాం."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "చందాని తొలగించలేకపోయాం."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "@%2$s, %1$sà°•à°¿ à°¸à±à°µà°¾à°—తం!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "చందాని సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4386,126 +4561,188 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "à°®à±à°‚గిలి"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "మీ ఈమెయిలà±, అవతారం, సంకేతపదం మరియౠపà±à°°à±Œà°«à±ˆà°³à±à°³à°¨à± మారà±à°šà±à°•à±‹à°‚à°¡à°¿"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
+
+#: lib/action.php:443
+#, fuzzy
msgid "Connect"
msgstr "à°…à°¨à±à°¸à°‚ధానించà±"
-#: lib/action.php:444
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:448
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "చందాలà±"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
-#: lib/action.php:453 lib/subgroupnav.php:106
-#, php-format
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
+msgstr "à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించి మీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à°¨à± మరియౠసహోదà±à°¯à±‹à°—à±à°²à°¨à± à°ˆ సేవనౠవినియోగించà±à°•à±‹à°®à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà°‚à°¡à°¿."
-#: lib/action.php:458
-msgid "Logout"
-msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "సైటౠనà±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "కొతà±à°¤ ఖాతా సృషà±à°Ÿà°¿à°‚à°šà±"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "నమోదà±"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "సైటà±à°²à±‹à°¨à°¿ à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "సహాయం"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "సహాయం కావాలి!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "వెతà±à°•à±"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "సహాయం"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr ""
+msgstr "మరినà±à°¨à°¿ à°—à±à°‚à°ªà±à°²à°•à±ˆ వెతà±à°•à±"
+
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "వెతà±à°•à±"
-#: lib/action.php:493
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "సైటౠగమనిక"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• వీకà±à°·à°£à°²à±"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "పేజీ గమనిక"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "చందాలà±"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "సహాయం"
+
+#: lib/action.php:754
msgid "About"
msgstr "à°—à±à°°à°¿à°‚à°šà°¿"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "à°ªà±à°°à°¶à±à°¨à°²à±"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "సేవా నియమాలà±"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "అంతరంగికత"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "మూలమà±"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "సంపà±à°°à°¦à°¿à°‚à°šà±"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "బాడà±à°œà°¿"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà± మృదూపకరణ లైసెనà±à°¸à±"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4514,12 +4751,12 @@ msgstr ""
"**%%site.name%%** అనేది [%%site.broughtby%%](%%site.broughtbyurl%%) వారౠ"
"అందిసà±à°¤à±à°¨à±à°¨ మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚. "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** అనేది మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4530,97 +4767,151 @@ msgstr ""
"html) à°•à°¿à°‚à°¦ లభà±à°¯à°®à°¯à±à°¯à±‡ [à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటà±](http://status.net/) మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠఉపకరణం సంచిక %s "
"పై నడà±à°¸à±à°¤à±à°‚ది."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "కొతà±à°¤ సందేశం"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "à°…à°¨à±à°¨à±€ "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "పేజీకరణ"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "తరà±à°µà°¾à°¤"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "ఇంతకà±à°°à°¿à°¤à°‚"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "à°ˆ సైటà±à°•à°¿ మీరౠమారà±à°ªà±à°²à± చేయలేరà±."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "à°ªà±à°°à°¾à°¥à°®à°¿à°• సైటౠసà±à°µà°°à±‚పణం"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "సైటà±"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "రూపà±à°°à±‡à°–à°²à±"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "వాడà±à°•à°°à°¿ à°¸à±à°µà°°à±‚పణం"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "వాడà±à°•à°°à°¿"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS నిరà±à°§à°¾à°°à°£"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS నిరà±à°§à°¾à°°à°£"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "సైటౠగమనిక"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS నిరà±à°§à°¾à°°à°£"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4678,11 +4969,11 @@ msgstr ""
#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "చదవడం-మాతà±à°°à°®à±‡"
#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "చదవడం-à°µà±à°°à°¾à°¯à°¡à°‚"
#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
@@ -4714,12 +5005,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "సంకేతపదం మారà±à°ªà±"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "సంకేతపదం మారà±à°ªà±"
@@ -4875,80 +5166,89 @@ msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొà
msgid "Specify the name of the user to subscribe to"
msgstr "à°à°µà°°à°¿à°•à°¿ చందా చేరాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "%sà°•à°¿ చందా చేరారà±"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "ఎవరి à°¨à±à°‚à°¡à°¿ చందా విరమించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "à°ˆ లంకెని ఒకే సారి ఉపయోగించగలరà±, మరియౠఅది పనిచేసేది 2 నిమిషాలౠమాతà±à°°à°®à±‡: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "మీరౠఎవరికీ చందాచేరలేదà±."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "మీకౠచందాదారà±à°²à± ఎవరూ లేరà±."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "మీరౠఠగà±à°‚à°ªà±à°²à±‹à°¨à±‚ సభà±à°¯à±à°²à± కాదà±."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
msgstr[1] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4962,6 +5262,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -4989,20 +5290,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం లేదà±."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5100,6 +5401,11 @@ msgstr ""
msgid "Go"
msgstr "వెళà±à°³à±"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5192,24 +5498,24 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr "బొమà±à°® కాదౠలేదా పాడైపోయిన ఫైలà±."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ సందేశమేమీ లేదà±."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "తెలియని ఫైలౠరకం"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "మెబై"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "కిబై"
@@ -5289,7 +5595,7 @@ msgstr ""
"%7$s.\n"
"\n"
"----\n"
-"మీ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¨à°¿ లేదా గమనింపà±à°² ఎంపికలనౠ%8$s వదà±à°¦ మారà±à°šà±à°•à±‹à°‚à°¡à°¿"
+"మీ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¨à°¿ లేదా గమనింపà±à°² ఎంపికలనౠ%8$s వదà±à°¦ మారà±à°šà±à°•à±‹à°‚à°¡à°¿\n"
#: lib/mail.php:258
#, php-format
@@ -5434,7 +5740,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "à°¨à±à°‚à°¡à°¿"
@@ -5524,6 +5830,12 @@ msgstr ""
msgid "Available characters"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨ à°…à°•à±à°·à°°à°¾à°²à±"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "పంపించà±"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5558,49 +5870,49 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "à°‰"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "à°¦"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "తూ"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "à°ª"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "సందరà±à°­à°‚లో"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "నోటీసà±à°¨à°¿ తొలగించాం."
@@ -5635,10 +5947,6 @@ msgstr "దూరపౠపà±à°°à±Šà°ªà±ˆà°²à±à°¨à°¿ చేరà±à°šà°Ÿà°‚à°²à
msgid "Duplicate notice"
msgstr "కొతà±à°¤ సందేశం"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "చందాచేరడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5680,7 +5988,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "చందాలà±"
@@ -5688,23 +5996,23 @@ msgstr "చందాలà±"
msgid "All subscriptions"
msgstr "à°…à°¨à±à°¨à°¿ చందాలà±"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "చందాదారà±à°²à±"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "అందరౠచందాదారà±à°²à±"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "వాడà±à°•à°°à°¿ ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "సభà±à°¯à±à°²à±ˆà°¨ తేదీ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "à°…à°¨à±à°¨à°¿ à°—à±à°‚à°ªà±à°²à±"
@@ -5738,16 +6046,19 @@ msgid "Popular"
msgstr "à°ªà±à°°à°¾à°šà±à°°à±à°¯à°‚"
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి"
+msgstr "à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చాలా?"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి"
+msgstr "à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚à°šà±"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "à°ˆ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5768,6 +6079,10 @@ msgstr "సైటà±à°¨à°¿ వెతà±à°•à±"
msgid "Keyword(s)"
msgstr "కీపదమà±(à°²à±)"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "వెతà±à°•à±"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "సహాయంలో వెతà±à°•à±"
@@ -5821,36 +6136,15 @@ msgstr "%sà°•à°¿ చందాచేరిన à°µà±à°¯à°•à±à°¤à±à°²à±"
msgid "Groups %s is a member of"
msgstr "%s సభà±à°¯à±à°²à±à°—à°¾ ఉనà±à°¨ à°—à±à°‚à°ªà±à°²à±"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ చందాచేరారà±!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "వాడà±à°•à°°à°¿ మిమà±à°®à°²à±à°¨à°¿ నిరోధించారà±."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "చందా చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "చందాదారà±à°²à±"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "చందాని తొలగించలేకపోయాం."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "చందాని తొలగించలేకపోయాం."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -5903,68 +6197,84 @@ msgstr "అవతారానà±à°¨à°¿ మారà±à°šà±"
msgid "User actions"
msgstr "వాడà±à°•à°°à°¿ à°šà°°à±à°¯à°²à±"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "à°«à±à°°à±Šà°«à±ˆà°²à± అమరికలà±"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "మారà±à°šà±"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ à°’à°• నేరౠసందేశానà±à°¨à°¿ పంపించండి"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "సందేశం"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "కొనà±à°¨à°¿ à°•à±à°·à°£à°¾à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "à°“ నిమిషం à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "à°’à°• à°—à°‚à°Ÿ à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d à°—à°‚à°Ÿà°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "à°“ రోజౠకà±à°°à°¿à°¤à°‚"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d రోజà±à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "à°“ నెల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "à°’à°• సంవతà±à°¸à°°à°‚ à°•à±à°°à°¿à°¤à°‚"
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index 5368680c6..8051f448b 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -9,82 +9,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:08+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:26+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Kabul et"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Ayarlar"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Kayıt"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Gizlilik"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
msgid "Invite only"
msgstr ""
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Böyle bir kullanıcı yok."
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Kaydet"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Ayarlar"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Kaydet"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Böyle bir durum mesajı yok."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -98,79 +105,88 @@ msgstr "Böyle bir durum mesajı yok."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Böyle bir kullanıcı yok."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s ve arkadaşları"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s ve arkadaşları"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s ve arkadaşları"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -183,20 +199,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Onay kodu bulunamadı."
@@ -230,8 +246,9 @@ msgstr "Kullanıcı güncellenemedi."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "Kullanıcının profili yok."
@@ -256,7 +273,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -374,7 +391,7 @@ msgstr "Kullanıcı güncellenemedi."
msgid "Could not find target user."
msgstr "Kullanıcı güncellenemedi."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -382,62 +399,62 @@ msgstr ""
"Takma ad sadece küçük harflerden ve rakamlardan oluşabilir, boşluk "
"kullanılamaz. "
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Takma ad kullanımda. Başka bir tane deneyin."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Geçersiz bir takma ad."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Tam isim çok uzun (azm: 255 karakter)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Yer bilgisi çok uzun (azm: 255 karakter)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "%s Geçersiz başlangıç sayfası"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Takma ad kullanımda. Başka bir tane deneyin."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -449,16 +466,16 @@ msgstr ""
msgid "Group not found!"
msgstr "İstek bulunamadı!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Sunucuya yönlendirme yapılamadı: %s"
@@ -468,7 +485,7 @@ msgstr "Sunucuya yönlendirme yapılamadı: %s"
msgid "You are not a member of this group."
msgstr "Bize o profili yollamadınız"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "OpenID formu yaratılamadı: %s"
@@ -500,7 +517,7 @@ msgstr "Geçersiz büyüklük."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -509,7 +526,7 @@ msgstr "Geçersiz büyüklük."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -544,7 +561,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -567,14 +584,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Hakkında"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -655,23 +672,11 @@ msgstr "Desteklenmeyen görüntü dosyası biçemi."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s'in %2$s'deki durum mesajları "
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -697,17 +702,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr "%s için cevaplar"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "%s için cevaplar"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s adli kullanicinin durum mesajlari"
@@ -725,8 +730,7 @@ msgstr "Böyle bir belge yok."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Takma ad yok"
@@ -738,7 +742,7 @@ msgstr ""
msgid "Invalid size."
msgstr "Geçersiz büyüklük."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -755,31 +759,31 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
#, fuzzy
msgid "Avatar settings"
msgstr "Ayarlar"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr ""
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Yükle"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -787,7 +791,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -822,23 +826,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr ""
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Böyle bir kullanıcı yok."
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Böyle bir kullanıcı yok."
@@ -847,41 +851,45 @@ msgstr "Böyle bir kullanıcı yok."
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "Böyle bir durum mesajı yok."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "Kullanıcının profili yok."
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s ve arkadaşları"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "Böyle bir kullanıcı yok."
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "Böyle bir kullanıcı yok."
@@ -940,7 +948,7 @@ msgid "Conversation"
msgstr "Yer"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Durum mesajları"
@@ -962,7 +970,7 @@ msgstr "Bize o profili yollamadınız"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -988,12 +996,13 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Delete this application"
msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Giriş yapılmadı."
@@ -1021,7 +1030,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Böyle bir durum mesajı yok."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -1039,19 +1048,19 @@ msgstr "Yerel aboneliÄŸi kullanabilirsiniz!"
msgid "Delete user"
msgstr ""
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Böyle bir kullanıcı yok."
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1162,6 +1171,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Kaydet"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1261,31 +1282,31 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "Kullanıcı güncellenemedi."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Avatar bilgisi kaydedilemedi"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
#, fuzzy
msgid "Options saved."
msgstr "Ayarlar kaydedildi."
@@ -1404,7 +1425,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geçersiz bir eposta adresi."
@@ -1597,6 +1618,25 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Cannot read file."
msgstr "Böyle bir durum mesajı yok."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Geçersiz büyüklük."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Bize o profili yollamadınız"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Kullanıcının profili yok."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1628,7 +1668,7 @@ msgstr "Kullanıcının profili yok."
msgid "User is not a member of group."
msgstr "Bize o profili yollamadınız"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Böyle bir kullanıcı yok."
@@ -1664,96 +1704,102 @@ msgstr "Kullanıcı numarası yok"
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Kullanıcı güncellenemedi."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Tercihler kaydedildi."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Kullanıcının profili yok."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "Avatar güncellendi."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "Avatar güncellemede hata."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2004,16 +2050,19 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Gönder"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2048,7 +2097,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Takma ad yok"
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2057,12 +2111,12 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "Bize o profili yollamadınız"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s'in %2$s'deki durum mesajları "
@@ -2080,8 +2134,7 @@ msgstr "Yanlış kullanıcı adı veya parola."
msgid "Error setting user. You are probably not authorized."
msgstr "YetkilendirilmemiÅŸ."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "GiriÅŸ"
@@ -2333,8 +2386,8 @@ msgstr "BaÄŸlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2482,7 +2535,8 @@ msgstr "Yeni parola kaydedilemedi."
msgid "Password saved."
msgstr "Parola kaydedildi."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2515,7 +2569,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2608,7 +2661,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Geri al"
@@ -2668,11 +2721,11 @@ msgstr "Geçersiz bir eposta adresi."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Geçersiz durum mesajı"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2700,7 +2753,7 @@ msgstr ""
"verilmez"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Tam Ä°sim"
@@ -2730,7 +2783,7 @@ msgid "Bio"
msgstr "Hakkında"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2755,7 +2808,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2781,7 +2834,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2794,25 +2847,26 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "%s Geçersiz başlangıç sayfası"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Profil kaydedilemedi."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Profil kaydedilemedi."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "Profil kaydedilemedi."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Ayarlar kaydedildi."
@@ -2825,48 +2879,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "Genel zaman çizgisi"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Genel zaman çizgisi"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2875,7 +2929,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3048,8 +3102,7 @@ msgstr "Onay kodu hatası."
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Kayıt"
@@ -3088,7 +3141,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Eposta"
@@ -3177,7 +3230,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abone ol"
@@ -3217,7 +3270,7 @@ msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
msgid "You already repeated that notice."
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Yarat"
@@ -3227,47 +3280,47 @@ msgstr "Yarat"
msgid "Repeated!"
msgstr "Yarat"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "%s için cevaplar"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "%s için cevaplar"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "%s için durum RSS beslemesi"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3279,6 +3332,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%s için cevaplar"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Bize o profili yollamadınız"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Kullanıcının profili yok."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3294,8 +3357,9 @@ msgstr "Bize o profili yollamadınız"
msgid "User is already sandboxed."
msgstr "Kullanıcının profili yok."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3319,8 +3383,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Ayarlar"
@@ -3355,8 +3419,8 @@ msgstr "Yer"
msgid "Description"
msgstr "Abonelikler"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Ä°statistikler"
@@ -3416,35 +3480,35 @@ msgstr "%s ve arkadaşları"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3452,7 +3516,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3466,71 +3530,71 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Bütün abonelikler"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Böyle bir durum mesajı yok."
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
#, fuzzy
msgid "Note"
msgstr "Durum mesajları"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Üyelik başlangıcı"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Yarat"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3540,7 +3604,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3549,7 +3613,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3661,149 +3725,137 @@ msgid "User is already silenced."
msgstr "Kullanıcının profili yok."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Geçersiz bir eposta adresi."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Yer"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Durum mesajını kaydederken hata oluştu."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Yeni durum mesajı"
#: actions/smssettings.php:58
#, fuzzy
@@ -3900,22 +3952,92 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Abonelikler"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Ayarlar"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
msgstr "Bize o profili yollamadınız"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "Abonelik oluşturulamadı."
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "Böyle bir kullanıcı yok."
+msgid "No such profile."
+msgstr "Böyle bir durum mesajı yok."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Bize o profili yollamadınız"
+
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "Abone ol"
@@ -3976,7 +4098,7 @@ msgstr "Sizin durumlarını takip ettiğiniz kullanıcılar"
msgid "These are the people whose notices %s listens to."
msgstr "%s adlı kullanıcının durumlarını takip ettiği kullanıcılar"
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3986,36 +4108,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s %2$s'da durumunuzu takip ediyor"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "JabberID yok."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "%s için durum RSS beslemesi"
@@ -4069,7 +4191,7 @@ msgstr ""
msgid "No such tag."
msgstr "Böyle bir durum mesajı yok."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -4098,79 +4220,80 @@ msgstr "Yetkilendirme isteÄŸi yok!"
msgid "Unsubscribed"
msgstr "Aboneliği sonlandır"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr ""
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Bütün abonelikler"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "Takip talebine izin verildi"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "Yer"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4297,16 +4420,22 @@ msgstr "Bütün abonelikler"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Bize o profili yollamadınız"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4350,7 +4479,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "KiÅŸisel"
@@ -4391,6 +4520,11 @@ msgstr "Kullanıcı güncellenemedi."
msgid "Group leave failed."
msgstr "Böyle bir durum mesajı yok."
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Kullanıcı güncellenemedi."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4408,70 +4542,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Cevap eklenirken veritabanı hatası: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+#, fuzzy
+msgid "User has blocked you."
+msgstr "Kullanıcının profili yok."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Abonelik silinemedi."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Abonelik silinemedi."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Abonelik silinemedi."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Avatar bilgisi kaydedilemedi"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Abonelik oluşturulamadı."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Abonelik oluşturulamadı."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Abonelik oluşturulamadı."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4511,131 +4682,186 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Başlangıç"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "KiÅŸisel"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "BaÄŸlan"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "Parolayı değiştir"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Sunucuya yönlendirme yapılamadı: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "BaÄŸlan"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Abonelikler"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Çıkış"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Geçersiz büyüklük."
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Çıkış"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Yeni hesap oluÅŸtur"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Kayıt"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Yardım"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "GiriÅŸ"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Yardım"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Ara"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Yardım"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Ara"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Yeni durum mesajı"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Yeni durum mesajı"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Abonelikler"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Yardım"
+
+#: lib/action.php:754
msgid "About"
msgstr "Hakkında"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "SSS"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Gizlilik"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Kaynak"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Ä°letiÅŸim"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4644,12 +4870,12 @@ msgstr ""
"**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından "
"hazırlanan anında mesajlaşma ağıdır. "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** bir aninda mesajlaşma sosyal ağıdır."
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4660,102 +4886,156 @@ msgstr ""
"licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) "
"microbloglama yazılımının %s. versiyonunu kullanmaktadır."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Yeni durum mesajı"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Sonra"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Önce »"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Eposta adresi onayı"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Yeni durum mesajı"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Eposta adresi onayı"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "KiÅŸisel"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Eposta adresi onayı"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Eposta adresi onayı"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Eposta adresi onayı"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Eposta adresi onayı"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Yeni durum mesajı"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Eposta adresi onayı"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4853,12 +5133,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Parola kaydedildi."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Parola kaydedildi."
@@ -5013,80 +5293,90 @@ msgstr "Durum mesajını kaydederken hata oluştu."
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Böyle bir kullanıcı yok."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Aboneliği sonlandır"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Bize o profili yollamadınız"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Uzaktan abonelik"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Uzaktan abonelik"
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:714
+#: lib/command.php:755
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"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5100,6 +5390,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5127,20 +5418,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Onay kodu yok."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5242,6 +5533,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5338,24 +5634,24 @@ msgstr "Dosya yüklemede sistem hatası."
msgid "Not an image or corrupt file."
msgstr "Bu bir resim dosyası değil ya da dosyada hata var"
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Desteklenmeyen görüntü dosyası biçemi."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "Böyle bir durum mesajı yok."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5569,7 +5865,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr ""
@@ -5660,6 +5956,12 @@ msgstr ""
msgid "Available characters"
msgstr "6 veya daha fazla karakter"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Gönder"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5694,51 +5996,51 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "İçerik yok!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Yarat"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "cevapla"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Durum mesajları"
@@ -5772,10 +6074,6 @@ msgstr "Uzak profil eklemede hata oluÅŸtu"
msgid "Duplicate notice"
msgstr "Yeni durum mesajı"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Yeni abonelik eklenemedi."
@@ -5817,7 +6115,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonelikler"
@@ -5825,24 +6123,24 @@ msgstr "Abonelikler"
msgid "All subscriptions"
msgstr "Bütün abonelikler"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abone olanlar"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Abone olanlar"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Üyelik başlangıcı"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5886,7 +6184,12 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Repeat this notice"
msgstr "Böyle bir durum mesajı yok."
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Böyle bir kullanıcı yok."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5908,6 +6211,10 @@ msgstr "Ara"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Ara"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5962,37 +6269,15 @@ msgstr "Uzaktan abonelik"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Kullanıcının profili yok."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Abonelik silinemedi."
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Abonelik silinemedi."
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -6046,68 +6331,83 @@ msgstr "Avatar"
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Profil ayarları"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr ""
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Kullanıcının profili yok."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "birkaç saniye önce"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index 5f5fa846e..08f93f255 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -10,78 +10,84 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:16+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:28+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10< =4 && (n%100<10 or n%100>=20) ? 1 : 2);\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "ПогодитиÑÑŒ"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
msgid "Site access settings"
msgstr "Параметри доÑтупу на Ñайт"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
msgid "Registration"
msgstr "РеєÑтраціÑ"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr "Приватно"
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
"Заборонити анонімним відвідувачам (Ñ‚Ñ–, що не увійшли до ÑиÑтеми) переглÑдати "
"Ñайт?"
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
-msgstr "Лише за запрошеннÑми"
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Приватно"
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr "Зробити регіÑтрацію лише за запрошеннÑми."
-#: actions/accessadminpanel.php:173
-msgid "Closed"
-msgstr "Закрито"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Лише за запрошеннÑми"
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr "СкаÑувати подальшу регіÑтрацію."
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "Зберегти"
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Закрито"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
msgid "Save access settings"
msgstr "Зберегти параметри доÑтупу"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Зберегти"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "Ðемає такої Ñторінки"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -95,52 +101,59 @@ msgstr "Ðемає такої Ñторінки"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Такого кориÑтувача немає."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%1$s та друзі, Ñторінка %2$d"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s з друзÑми"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ð´Ñ€ÑƒÐ·Ñ–Ð² %s (RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ð´Ñ€ÑƒÐ·Ñ–Ð² %s (RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ð´Ñ€ÑƒÐ·Ñ–Ð² %s (Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "Це Ñтрічка допиÑів %s Ñ– друзів, але вона поки що порожнÑ."
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
@@ -149,7 +162,8 @@ msgstr ""
"Спробуйте до когоÑÑŒ підпиÑатиÑÑŒ, [приєднатиÑÑŒ до групи](%%action.groups%%) "
"або напишіть щоÑÑŒ Ñамі."
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
@@ -158,7 +172,7 @@ msgstr ""
"Ви можете [«розштовхати» %1$s](../%2$s) зі Ñторінки його профілю або [щоÑÑŒ "
"йому напиÑати](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
@@ -167,12 +181,13 @@ msgstr ""
"Чому б не [зареєÑтруватиÑÑŒ](%%%%action.register%%%%) Ñ– не Ñпробувати "
"«розштовхати» %s або щоÑÑŒ йому напиÑати."
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ви з друзÑми"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!"
@@ -185,20 +200,20 @@ msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API метод не знайдено."
@@ -231,8 +246,9 @@ msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ кориÑтувача."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "КориÑтувач не має профілю."
@@ -258,7 +274,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -369,7 +385,7 @@ msgstr "Ðе вдалоÑÑŒ вÑтановити джерело кориÑтув
msgid "Could not find target user."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ цільового кориÑтувача."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
@@ -377,62 +393,62 @@ msgstr ""
"Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача повинно ÑкладатиÑÑŒ з літер нижнього регіÑтру Ñ– цифр, ніÑких "
"інтервалів."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Це Ñ–Ð¼â€™Ñ Ð²Ð¶Ðµ викориÑтовуєтьÑÑ. Спробуйте інше."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Це недійÑне Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Веб-Ñторінка має недійÑну URL-адреÑу."
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Повне Ñ–Ð¼â€™Ñ Ð·Ð°Ð´Ð¾Ð²Ð³Ðµ (255 знаків макÑимум)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, php-format
msgid "Description is too long (max %d chars)."
msgstr "ÐžÐ¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий (%d знаків макÑимум)."
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Ð›Ð¾ÐºÐ°Ñ†Ñ–Ñ Ð½Ð°Ð´Ñ‚Ð¾ довга (255 знаків макÑимум)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr "Забагато додаткових імен! МакÑимум Ñтановить %d."
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
msgstr "Помилкове додаткове ім’Ñ: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Додаткове Ñ–Ð¼â€™Ñ \"%s\" вже викориÑтовуєтьÑÑ. Спробуйте інше."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr "Додаткове Ñ–Ð¼â€™Ñ Ð½Ðµ може бути таким Ñамим що й оÑновне."
@@ -443,15 +459,15 @@ msgstr "Додаткове Ñ–Ð¼â€™Ñ Ð½Ðµ може бути таким ÑамиÐ
msgid "Group not found!"
msgstr "Групу не знайдено!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr "Ви вже Ñ” учаÑником цієї групи."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr "Ðдмін цієї групи заблокував Вашу приÑутніÑÑ‚ÑŒ в ній."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Ðе вдалоÑÑŒ долучити кориÑтувача %1$s до групи %2$s."
@@ -460,7 +476,7 @@ msgstr "Ðе вдалоÑÑŒ долучити кориÑтувача %1$s до г
msgid "You are not a member of this group."
msgstr "Ви не Ñ” учаÑником цієї групи."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Ðе вдалоÑÑŒ видалити кориÑтувача %1$s з групи %2$s."
@@ -491,7 +507,7 @@ msgstr "Ðевірний токен."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -500,7 +516,7 @@ msgstr "Ðевірний токен."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -535,7 +551,7 @@ msgstr "Токен запиту %s було ÑкаÑовано Ñ– відхиле
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -562,13 +578,13 @@ msgstr ""
"на доÑтуп до Вашого акаунту %4$s лише тим Ñтороннім додаткам, Ñким Ви "
"довірÑєте."
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Ðкаунт"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -646,23 +662,11 @@ msgstr "Формат не підтримуєтьÑÑ."
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Обрані від %2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… від %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s Ñтрічка"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -688,17 +692,17 @@ msgstr "%s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ уÑÑ–Ñ…!"
msgid "Repeated to %s"
msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "ДопиÑи позначені з %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ– з %1$s на %2$s!"
@@ -714,8 +718,7 @@ msgstr "Такого Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ”."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Ðемає імені."
@@ -727,7 +730,7 @@ msgstr "Ðемає розміру."
msgid "Invalid size."
msgstr "ÐедійÑний розмір."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватара"
@@ -744,30 +747,30 @@ msgid "User without matching profile"
msgstr "КориÑтувач з невідповідним профілем"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€Ð¸"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "Оригінал"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "ПереглÑд"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr "Видалити"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Завантажити"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Ð’Ñ‚Ñти"
@@ -775,7 +778,7 @@ msgstr "Ð’Ñ‚Ñти"
msgid "Pick a square area of the image to be your avatar"
msgstr "Оберіть квадратну ділÑнку зображеннÑ, Ñка й буде Вашою автарою."
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "Дані Вашого файлу деÑÑŒ загубилиÑÑŒ."
@@ -810,22 +813,22 @@ msgstr ""
"більше не отримуватимете жодних допиÑів від нього."
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "ÐÑ–"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
msgstr "Ðе блокувати цього кориÑтувача"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Так"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокувати кориÑтувача"
@@ -833,39 +836,43 @@ msgstr "Блокувати кориÑтувача"
msgid "Failed to save block information."
msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð¾ÑÑŒ невдачею."
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "Такої групи немає."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, php-format
msgid "%s blocked profiles"
msgstr "Заблоковані профілі %s"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "Заблоковані профілі %1$s, Ñторінка %2$d"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr "СпиÑок кориÑтувачів блокованих в цій групі."
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
msgstr "Розблокувати кориÑтувача"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "Розблокувати"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Розблокувати цього кориÑтувача"
@@ -921,7 +928,7 @@ msgid "Conversation"
msgstr "Розмова"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "ДопиÑи"
@@ -940,7 +947,7 @@ msgstr "Ви не Ñ” влаÑником цього додатку."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Виникли певні проблеми з токеном поточної ÑеÑÑ–Ñ—."
@@ -966,12 +973,13 @@ msgstr "Ðе видалÑти додаток"
msgid "Delete this application"
msgstr "Видалити додаток"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Ðе увійшли."
@@ -998,7 +1006,7 @@ msgstr "Ви впевненні, що бажаєте видалити цей дÐ
msgid "Do not delete this notice"
msgstr "Ðе видалÑти цей допиÑ"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Видалити допиÑ"
@@ -1014,7 +1022,7 @@ msgstr "Ви можете видалÑти лише локальних кориÑ
msgid "Delete user"
msgstr "Видалити кориÑтувача"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
@@ -1022,12 +1030,12 @@ msgstr ""
"Впевнені, що бажаєте видалити цього кориÑтувача? УÑÑ– дані буде знищено без "
"можливоÑÑ‚Ñ– відновленнÑ."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Видалити цього кориÑтувача"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "Дизайн"
@@ -1130,6 +1138,18 @@ msgstr "Оновити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм"
msgid "Reset back to default"
msgstr "ПовернутиÑÑŒ до початкових налаштувань"
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Зберегти"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Зберегти дизайн"
@@ -1221,29 +1241,29 @@ msgstr "Редагувати групу %s"
msgid "You must be logged in to create a group."
msgstr "Ви маєте Ñпочатку увійти, аби мати змогу Ñтворити групу."
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr "Ви маєте бути наділені правами адміниÑтратора, аби редагувати групу"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "СкориÑтайтеÑÑŒ цією формою, щоб відредагувати групу."
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, php-format
msgid "description is too long (max %d chars)."
msgstr "Ð¾Ð¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий (%d знаків макÑимум)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ групу."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Ðеможна призначити додаткові імена."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Опції збережено."
@@ -1361,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðе можна полагодити цю поштову адреÑу"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Це недійÑна електронна адреÑа."
@@ -1552,6 +1572,25 @@ msgstr "Такого файлу немає."
msgid "Cannot read file."
msgstr "Ðе можу прочитати файл."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ðевірний токен."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ви не можете нікого ізолювати на цьому Ñайті."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "КориÑтувачу наразі заклеїли рота Ñкотчем."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1581,7 +1620,7 @@ msgstr "КориÑтувача заблоковано в цій групі."
msgid "User is not a member of group."
msgstr "КориÑтувач не Ñ” учаÑником групи."
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Блокувати кориÑтувача в групі"
@@ -1616,11 +1655,11 @@ msgstr "Ðемає ID."
msgid "You must be logged in to edit a group."
msgstr "Ви маєте Ñпочатку увійти, аби мати змогу редагувати групу."
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr "Дизайн групи"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
@@ -1628,20 +1667,20 @@ msgstr ""
"Ðалаштуйте виглÑд Ñторінки групи, викориÑтовуючи фонове Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– кольори "
"на Ñвій Ñмак."
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дизайн."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Преференції дизайну збережно."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "Логотип групи"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
@@ -1649,62 +1688,68 @@ msgstr ""
"Ви маєте можливіÑÑ‚ÑŒ завантажити логотип Ð´Ð»Ñ Ð’Ð°ÑˆÐ¾Ñ— группи. МакÑимальний "
"розмір файлу %s."
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr "КориÑтувач без відповідного профілю."
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr "Оберіть квадратну ділÑнку зображеннÑ, Ñка й буде логотипом групи."
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "Логотип оновлено."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð»Ð¾Ð³Ð¾Ñ‚Ð¸Ð¿Ñƒ завершилоÑÑŒ невдачею."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "УчаÑники групи %s"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr "УчаÑники групи %1$s, Ñторінка %2$d"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "СпиÑок учаÑників цієї групи."
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Ðдмін"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блок"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Ðадати кориÑтувачеві права адмініÑтратора"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Зробити адміном"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr "Ðадати цьому кориÑтувачеві права адмініÑтратора"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s Ñтрічка"
+
+#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð»ÐµÐ½Ñ–Ð² %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -1965,16 +2010,18 @@ msgstr "ОÑобиÑÑ‚Ñ– повідомленнÑ"
msgid "Optionally add a personal message to the invitation."
msgstr "Можна додати перÑональне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ (опціонально)."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
-msgstr "Так!"
+msgstr "ÐадіÑлати"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s запроÑив(ла) Ð’Ð°Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ð´Ð¾ нього(неї) на %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2036,7 +2083,11 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Ви повинні Ñпочатку увійти на Ñайт, аби приєднатиÑÑ Ð´Ð¾ групи."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Ðемає імені або ІД."
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s"
@@ -2045,11 +2096,11 @@ msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s"
msgid "You must be logged in to leave a group."
msgstr "Ви повинні Ñпочатку увійти на Ñайт, аби залишити групу."
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr "Ви не Ñ” учаÑником цієї групи."
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s залишив групу %2$s"
@@ -2066,8 +2117,7 @@ msgstr "Ðеточне Ñ–Ð¼â€™Ñ Ð°Ð±Ð¾ пароль."
msgid "Error setting user. You are probably not authorized."
msgstr "Помилка. Можливо, Ви не авторизовані."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Увійти"
@@ -2323,8 +2373,8 @@ msgstr "тип зміÑту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Такий формат даних не підтримуєтьÑÑ."
@@ -2465,7 +2515,8 @@ msgstr "Ðеможна зберегти новий пароль."
msgid "Password saved."
msgstr "Пароль збережено."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "ШлÑÑ…"
@@ -2498,7 +2549,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Помилковий SSL-Ñервер. МакÑимальна довжина 255 знаків."
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr "Сайт"
@@ -2586,7 +2636,7 @@ msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ Ñ„Ð¾Ð½Ñ–Ð²"
msgid "SSL"
msgstr "SSL-шифруваннÑ"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðіколи"
@@ -2642,11 +2692,11 @@ msgstr "Це недійÑний оÑобиÑтий теґ: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "КориÑтувачі з оÑобиÑтим теґом %1$s — Ñторінка %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "ÐедійÑний зміÑÑ‚ допиÑу"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð´Ð¾Ð¿Ð¸Ñу «%1$s» Ñ” неÑуміÑною з ліцензією Ñайту «%2$s»."
@@ -2671,7 +2721,7 @@ msgstr ""
"1-64 літери нижнього регіÑтру Ñ– цифри, ніÑкої пунктуації або інтервалів"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Повне ім’Ñ"
@@ -2699,7 +2749,7 @@ msgid "Bio"
msgstr "Про Ñебе"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2726,7 +2776,7 @@ msgstr ""
"Позначте Ñебе теґами (літери, цифри, -, . та _), відокремлюючи кожен комою "
"або пробілом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Мова"
@@ -2753,7 +2803,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Ви перевищили ліміт (%d знаків макÑимум)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ЧаÑовий поÑÑ Ð½Ðµ обрано."
@@ -2766,23 +2816,24 @@ msgstr "Мова задовга (50 знаків макÑимум)."
msgid "Invalid tag: \"%s\""
msgstr "ÐедійÑний теґ: \"%s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ кориÑтувача Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¿Ñ–Ð´Ð¿Ð¸Ñки."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ теґи."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾."
@@ -2795,28 +2846,28 @@ msgstr "ДоÑÑгнуто ліміту Ñторінки (%s)"
msgid "Could not retrieve public stream."
msgstr "Ðе вдаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ загальну Ñтрічку."
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr "Загальний Ñтрічка, Ñторінка %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Загальна Ñтрічка"
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Стрічка публічних допиÑів (RSS 1.0)"
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Стрічка публічних допиÑів (RSS 2.0)"
-#: actions/public.php:167
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Стрічка публічних допиÑів (Atom)"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2824,11 +2875,11 @@ msgid ""
msgstr ""
"Це публічна Ñтрічка допиÑів Ñайту %%site.name%%, але вона поки що порожнÑ."
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Станьте першим! Ðапишіть щоÑÑŒ!"
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2836,7 +2887,7 @@ msgstr ""
"Чому б не [зареєÑтруватиÑÑŒ](%%action.register%%) Ñ– не зробити Ñвій перший "
"допиÑ!"
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2850,7 +2901,7 @@ msgstr ""
"розділити Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ð· друзÑми, родиною Ñ– колегами! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%"
"doc.help%%))"
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3030,8 +3081,7 @@ msgstr "Даруйте, помилка у коді запрошеннÑ."
msgid "Registration successful"
msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ ÑƒÑпішна"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РеєÑтраціÑ"
@@ -3074,7 +3124,7 @@ msgid "Same as password above. Required."
msgstr "Такий Ñамо, Ñк Ñ– пароль вище. Ðеодмінно."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Пошта"
@@ -3179,7 +3229,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL-адреÑа Вашого профілю на іншому ÑуміÑному ÑервіÑÑ–"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "ПідпиÑатиÑÑŒ"
@@ -3216,7 +3266,7 @@ msgstr "Ви не можете вторувати Ñвоїм влаÑним до
msgid "You already repeated that notice."
msgstr "Ви вже вторували цьому допиÑу."
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "ВторуваннÑ"
@@ -3224,33 +3274,33 @@ msgstr "ВторуваннÑ"
msgid "Repeated!"
msgstr "Вторувати!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Відповіді до %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "Відповіді до %1$s, Ñторінка %2$d"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Стрічка відповідей до %s (RSS 1.0)"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Стрічка відповідей до %s (RSS 2.0)"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Стрічка відповідей до %s (Atom)"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
@@ -3259,7 +3309,7 @@ msgstr ""
"Ð¦Ñ Ñтрічка допиÑів міÑтить відповіді Ð´Ð»Ñ %1$s, але %2$s поки що нічого не "
"отримав у відповідь."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3268,7 +3318,7 @@ msgstr ""
"Ви можете долучити інших кориÑтувачів до ÑпілкуваннÑ, підпиÑавшиÑÑŒ до "
"більшої кількоÑÑ‚Ñ– людей або [приєднавшиÑÑŒ до груп](%%action.groups%%)."
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3282,6 +3332,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Відповіді до %1$s на %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ви не можете позбавлÑти кориÑтувачів права голоÑу на цьому Ñайті."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "КориÑтувач без відповідного профілю."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3294,8 +3354,9 @@ msgstr "Ви не можете нікого ізолювати на цьому Ñ
msgid "User is already sandboxed."
msgstr "КориÑтувача ізольовано доки наберетьÑÑ ÑƒÐ¼Ñƒ-розуму."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "СеÑÑ–Ñ—"
@@ -3319,8 +3380,8 @@ msgstr "СеÑÑ–Ñ Ð½Ð°Ð»Ð°Ð´ÐºÐ¸"
msgid "Turn on debugging output for sessions."
msgstr "Виводити дані ÑеÑÑ–Ñ— наладки."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñайту"
@@ -3350,8 +3411,8 @@ msgstr "ОрганізаціÑ"
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
@@ -3413,22 +3474,22 @@ msgstr "Обрані допиÑи %1$s, Ñторінка %2$d"
msgid "Could not retrieve favorite notices."
msgstr "Ðе можна відновити обрані допиÑи."
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Стрічка обраних допиÑів %s (RSS 1.0)"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Стрічка обраних допиÑів %s (RSS 2.0)"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Стрічка обраних допиÑів %s (Atom)"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
@@ -3437,7 +3498,7 @@ msgstr ""
"допиÑÑ– Ñкий Ви вподобали, аби повернутиÑÑŒ до нього пізніше, або звернути на "
"нього увагу інших."
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
@@ -3446,7 +3507,7 @@ msgstr ""
"%s поки що не вподобав жодних допиÑів. Може Ви б напиÑали йому щоÑÑŒ "
"цікаве? :)"
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3457,7 +3518,7 @@ msgstr ""
"action.register%%%%) Ñ– не напиÑати щоÑÑŒ цікаве, що мало б ÑподобатиÑÑŒ цьому "
"кориÑтувачеві :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Це ÑпоÑіб поділитиÑÑŒ з уÑіма тим, що вам подобаєтьÑÑ."
@@ -3471,67 +3532,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Група %1$s, Ñторінка %2$d"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профіль групи"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr "ЗауваженнÑ"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Додаткові імена"
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "ДіÑльніÑÑ‚ÑŒ групи"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Стрічка допиÑів групи %s (RSS 1.0)"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Стрічка допиÑів групи %s (RSS 2.0)"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Стрічка допиÑів групи %s (Atom)"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "УчаÑники"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(ПуÑто)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Ð’ÑÑ– учаÑники"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Створено"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3546,7 +3607,7 @@ msgstr ""
"короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. [ПриєднуйтеÑÑŒ](%%action.register%"
"%) зараз Ñ– долучітьÑÑ Ð´Ð¾ ÑпілкуваннÑ! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%doc.help%%))"
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3559,7 +3620,7 @@ msgstr ""
"забезпеченні [StatusNet](http://status.net/). Члени цієї групи роблÑÑ‚ÑŒ "
"короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Ðдміни"
@@ -3681,150 +3742,141 @@ msgid "User is already silenced."
msgstr "КориÑтувачу наразі заклеїли рота Ñкотчем."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Загальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Ð†Ð¼â€™Ñ Ñайту не може бути порожнім."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Електронна адреÑа має бути чинною."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Ðевідома мова «%s»."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Помилковий Ñнепшот URL."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñнепшоту."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "ЧаÑтота Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñнепшотів має міÑтити цифру."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Ліміт текÑтових повідомлень Ñтановить 140 знаків."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
"ЧаÑове Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ надÑиланні дублікату Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” Ñтановити від 1 Ñ– "
"більше Ñекунд."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "ОÑновні"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Ðазва Ñайту"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Ðазва Вашого Ñайту, штибу \"Мікроблоґи компанії ...\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Ðадано"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "ТекÑÑ‚ викориÑтаний Ð´Ð»Ñ Ð¿Ð¾Ñілань кредитів унизу кожної Ñторінки"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Ðаданий URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL викориÑтаний Ð´Ð»Ñ Ð¿Ð¾Ñілань кредитів унизу кожної Ñторінки"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна електронна адреÑа Ð´Ð»Ñ Ð’Ð°ÑˆÐ¾Ð³Ð¾ Ñайту"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локаль"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑовий поÑÑ Ð·Ð° замовчуваннÑм"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑовий поÑÑ Ð·Ð° замовчуваннÑм Ð´Ð»Ñ Ñайту; зазвичай UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Мова Ñайту за замовчуваннÑм"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снепшоти"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Випадково під Ñ‡Ð°Ñ Ð²ÐµÐ±-хіта"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Згідно плану робіт"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снепшоти даних"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Коли надÑилати ÑтатиÑтичні дані до Ñерверів status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "ЧаÑтота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снепшоти надÑилатимутьÑÑ Ñ€Ð°Ð· на N веб-хітів"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Ð—Ð²Ñ–Ñ‚Ð½Ñ URL-адреÑа"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снепшоти надÑилатимутьÑÑ Ð½Ð° цю URL-адреÑу"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "ОбмеженнÑ"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "ТекÑтові обмеженнÑ"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимальна кількіÑÑ‚ÑŒ знаків у допиÑÑ–."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "ЧаÑове обмеженнÑ"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Як довго кориÑтувачі мають зачекати (в Ñекундах) аби надіÑлати той Ñамий "
"Ð´Ð¾Ð¿Ð¸Ñ Ñ‰Ðµ раз."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñайту"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ðове повідомленнÑ"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Ðе маю можливоÑÑ‚Ñ– зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñайту"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñайту"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¡ÐœÐ¡"
@@ -3924,19 +3976,88 @@ msgstr ""
msgid "No code entered"
msgstr "Код не введено"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снепшоти"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Змінити конфігурацію Ñайту"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñнепшоту."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "ЧаÑтота Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñнепшотів має міÑтити цифру."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Помилковий Ñнепшот URL."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Випадково під Ñ‡Ð°Ñ Ð²ÐµÐ±-хіта"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Згідно плану робіт"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снепшоти даних"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Коли надÑилати ÑтатиÑтичні дані до Ñерверів status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "ЧаÑтота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Снепшоти надÑилатимутьÑÑ Ñ€Ð°Ð· на N веб-хітів"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Ð—Ð²Ñ–Ñ‚Ð½Ñ URL-адреÑа"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снепшоти надÑилатимутьÑÑ Ð½Ð° цю URL-адреÑу"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñайту"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Ви не підпиÑані до цього профілю."
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
msgid "Could not save subscription."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ підпиÑку."
-#: actions/subscribe.php:55
-msgid "Not a local user."
-msgstr "Такого кориÑтувача немає."
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr "Ð¦Ñ Ð´Ñ–Ñ Ð¿Ñ€Ð¸Ð¹Ð¼Ð°Ñ” лише запити POST."
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Ðемає такого профілю."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Цією дією Ви не зможете підпиÑатиÑÑ Ð´Ð¾ віддаленого профілю OMB 0.1."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "ПідпиÑані"
@@ -4000,7 +4121,7 @@ msgstr "Тут предÑтавлені Ñ‚Ñ–, за чиїми допиÑами Ð
msgid "These are the people whose notices %s listens to."
msgstr "Тут предÑтавлені Ñ‚Ñ–, за чиїми допиÑами Ñлідкує %s."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4016,35 +4137,35 @@ msgstr ""
"action.twittersettings%%), то можете автоматично підпиÑатиÑÑŒ до людей, за "
"Ñкими Ñлідкуєте там."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
msgstr "%s не відÑлідковує нічого"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "СМС"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "ДопиÑи з теґом %1$s, Ñторінка %2$d"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ñ‚ÐµÒ‘Ñƒ %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ñ‚ÐµÒ‘Ñƒ %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Стрічка допиÑів Ð´Ð»Ñ Ñ‚ÐµÒ‘Ñƒ %s (Atom)"
@@ -4098,7 +4219,7 @@ msgstr "СкориÑтайтеÑÑŒ цією формою, щоб додати Ñ‚
msgid "No such tag."
msgstr "Такого теґу немає."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API метод наразі знаходитьÑÑ Ñƒ розробці."
@@ -4122,76 +4243,77 @@ msgstr "У запиті відÑутній ID профілю."
msgid "Unsubscribed"
msgstr "ВідпиÑано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Â«%1$s» не відповідає ліцензії Ñайту «%2$s»."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr "КориÑтувач"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr "ВлаÑні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr "Помилкове Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð±Ñ–Ð¾. Це мають бути цифри."
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr "Помилковий текÑÑ‚ привітаннÑ. МакÑимальна довжина 255 знаків."
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr "Помилкова підпиÑка за замовчуваннÑм: '%1$s' не Ñ” кориÑтувачем."
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Профіль"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð±Ñ–Ð¾"
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr "МакÑимальна довжина біо кориÑтувача в знаках."
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Ðові кориÑтувачі"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr "ÐŸÑ€Ð¸Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кориÑтувача"
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr "ТекÑÑ‚ Ð¿Ñ€Ð¸Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… кориÑтувачів (255 знаків)."
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
msgid "Default subscription"
msgstr "ПідпиÑка за замовчуваннÑм"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr "Ðвтоматично підпиÑувати нових кориÑтувачів до цього кориÑтувача."
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "ЗапрошеннÑ"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÑкаÑовано"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
"Ð’ той чи інший ÑпоÑіб дозволити кориÑтувачам вітати нових кориÑтувачів."
@@ -4323,17 +4445,23 @@ msgstr "Групи %1$s, Ñторінка %2$d"
msgid "Search for more groups"
msgstr "Шукати групи ще"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не Ñ” учаÑником жодної групи."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Спробуйте [знайти ÑкіÑÑŒ групи](%%action.groupsearch%%) Ñ– приєднайтеÑÑ Ð´Ð¾ них."
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4389,7 +4517,7 @@ msgstr ""
msgid "Plugins"
msgstr "Додатки"
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ВерÑÑ–Ñ"
@@ -4428,6 +4556,10 @@ msgstr "Ðе Ñ” чаÑтиною групи."
msgid "Group leave failed."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ñ‚Ð¸ групу."
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Ðе вдаєтьÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ локальну групу."
+
#: classes/Login_token.php:76
#, php-format
msgid "Could not create login token for %s"
@@ -4445,27 +4577,27 @@ msgstr "Ðе можна долучити повідомленнÑ."
msgid "Could not update message with new URI."
msgstr "Ðе можна оновити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· новим URI."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Помилка бази даних при додаванні теґу: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблема при збереженні допиÑу. Ðадто довге."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при збереженні допиÑу. Ðевідомий кориÑтувач."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Дуже багато допиÑів за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4473,41 +4605,73 @@ msgstr ""
"Дуже багато повідомлень за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам заборонено надÑилати допиÑи до цього Ñайту."
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблема при збереженні допиÑу."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблема при збереженні вхідних допиÑів Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Помилка бази даних при додаванні відповіді: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr "Ð’Ð°Ñ Ð¿Ð¾Ð·Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ можливоÑÑ‚Ñ– підпиÑатиÑÑŒ."
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr "Вже підпиÑаний!"
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr "КориÑтувач заблокував ВаÑ."
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr "Ðе підпиÑано!"
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr "Ðе можу видалити ÑамопідпиÑку."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку."
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Вітаємо на %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Ðе вдалоÑÑ Ñтворити нову групу."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити URI групи."
+
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити членÑтво."
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ інформацію про локальну групу."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
@@ -4545,124 +4709,171 @@ msgstr "%1$s — %2$s"
msgid "Untitled page"
msgstr "Сторінка без заголовку"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Відправна Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ð¿Ð¾ Ñайту"
-#: lib/action.php:439
-msgid "Home"
-msgstr "Дім"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "ПерÑональний профіль Ñ– Ñтрічка друзів"
-#: lib/action.php:441
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "ОÑобиÑте"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Змінити електронну адреÑу, аватару, пароль, профіль"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "З’єднаннÑ"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· ÑервіÑами"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "З’єднаннÑ"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Змінити конфігурацію Ñайту"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ЗапроÑити"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ðдмін"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "ЗапроÑÑ–Ñ‚ÑŒ друзів та колег приєднатиÑÑŒ до Ð’Ð°Ñ Ð½Ð° %s"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Вийти"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ЗапроÑити"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Вийти з Ñайту"
-#: lib/action.php:463
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Вийти"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Створити новий акаунт"
-#: lib/action.php:466
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "РеєÑтраціÑ"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Увійти на Ñайт"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Допомога"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Увійти"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Допоможіть!"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Пошук"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Довідка"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пошук людей або текÑтів"
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr "Пошук"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñайту"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "ОглÑд"
-#: lib/action.php:625
+#: lib/action.php:645
msgid "Page notice"
msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñторінки"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ДругорÑдна Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ð¿Ð¾ Ñайту"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Допомога"
+
+#: lib/action.php:754
msgid "About"
msgstr "Про"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаПи"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr "Умови"
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "КонфіденційніÑÑ‚ÑŒ"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Джерело"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ StatusNet"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4671,12 +4882,12 @@ msgstr ""
"**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð² наданий вам [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð². "
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4687,96 +4898,148 @@ msgstr ""
"Ð´Ð»Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð², верÑÑ–Ñ %s, доÑтупному під [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
msgid "Site content license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð·Ð¼Ñ–Ñту Ñайту"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "ЗміÑÑ‚ Ñ– дані %1$s Ñ” приватними Ñ– конфіденційними."
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать %1$s. Ð’ÑÑ– права захищено."
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать розробникам. Ð’ÑÑ– права захищено."
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "Ð’ÑÑ– "
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "ліцензіÑ."
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "ÐÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ Ñторінок"
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr "Вперед"
-#: lib/action.php:1147
+#: lib/action.php:1169
msgid "Before"
msgstr "Ðазад"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr "Поки що не можу обробити віддалений контент."
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr "Поки що не можу обробити вбудований XML контент."
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr "Поки що не можу обробити вбудований контент Base64."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr "Ви не можете щоÑÑŒ змінювати на цьому Ñайті."
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr "Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— панелі зміни не припуÑтимі."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не виконано."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не виконано."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Ðемає можливоÑÑ‚Ñ– видалити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ОÑновна ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñайту"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Сайт"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Дизайн"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "КориÑтувач"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "ПрийнÑти конфігурацію"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÑˆÐ»Ñху"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÑеÑій"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñайту"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÑˆÐ»Ñху"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"API-реÑÑƒÑ€Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” дозвіл типу «читаннÑ-запиÑ», але у Ð²Ð°Ñ Ñ” лише доÑтуп Ð´Ð»Ñ "
"читаннÑ."
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4868,11 +5131,11 @@ msgstr "ДопиÑи, до Ñких прикріплено це вкладенн
msgid "Tags for this attachment"
msgstr "Теґи Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вкладеннÑ"
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пароль"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Змінювати пароль не дозволено"
@@ -5023,84 +5286,93 @@ msgstr "Проблема при збереженні допиÑу."
msgid "Specify the name of the user to subscribe to"
msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, до Ñкого бажаєте підпиÑатиÑÑŒ"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Такого кориÑтувача немає."
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "ПідпиÑано до %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, від Ñкого бажаєте відпиÑатиÑÑŒ"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "ВідпиÑано від %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¾."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "Ðе можна вимкнути ÑповіщеннÑ."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¾."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "Ðе можна увімкнути ÑповіщеннÑ."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr "Команду входу відключено"
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтати лише раз, воно дійÑне протÑгом 2 хвилин: %s"
-#: lib/command.php:668
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr "ВідпиÑано %s"
+
+#: lib/command.php:709
msgid "You are not subscribed to anyone."
msgstr "Ви не маєте жодних підпиÑок."
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ви підпиÑані до цієї оÑоби:"
msgstr[1] "Ви підпиÑані до цих людей:"
msgstr[2] "Ви підпиÑані до цих людей:"
-#: lib/command.php:690
+#: lib/command.php:731
msgid "No one is subscribed to you."
msgstr "До Ð’Ð°Ñ Ð½Ñ–Ñ…Ñ‚Ð¾ не підпиÑаний."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Ð¦Ñ Ð¾Ñоба Ñ” підпиÑаною до ВаÑ:"
msgstr[1] "Ці люди підпиÑані до ВаÑ:"
msgstr[2] "Ці люди підпиÑані до ВаÑ:"
-#: lib/command.php:712
+#: lib/command.php:753
msgid "You are not a member of any groups."
msgstr "Ви не Ñ” учаÑником жодної групи."
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ви Ñ” учаÑником групи:"
msgstr[1] "Ви Ñ” учаÑником таких груп:"
msgstr[2] "Ви Ñ” учаÑником таких груп:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5114,6 +5386,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5176,19 +5449,19 @@ msgstr ""
"tracks — наразі не виконуєтьÑÑ\n"
"tracking — наразі не виконуєтьÑÑ\n"
-#: lib/common.php:135
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Файлу конфігурації не знайдено. "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Шукав файли конфігурації в цих міÑцÑÑ…: "
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ файл інÑталÑції, аби полагодити це."
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Іти до файлу інÑталÑції."
@@ -5287,6 +5560,11 @@ msgstr "Оберіть теґ до звуженого ÑпиÑку"
msgid "Go"
msgstr "Вперед"
+#: lib/grantroleform.php:91
+#, php-format
+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-адреÑа веб-Ñторінки, блоґу групи, або тематичного блоґу"
@@ -5377,23 +5655,23 @@ msgstr "СиÑтема відповіла помилкою при заванта
msgid "Not an image or corrupt file."
msgstr "Це не зображеннÑ, або файл зіпÑовано."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Формат Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
msgstr "Файл втрачено."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "Тип файлу не підтримуєтьÑÑ"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr "Мб"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr "кб"
@@ -5683,7 +5961,7 @@ msgstr ""
"Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¸ долучити кориÑтувачів до розмови. Такі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ð°Ñ‡Ð¸Ñ‚Ðµ "
"лише Ви."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "від"
@@ -5775,6 +6053,11 @@ msgstr "До"
msgid "Available characters"
msgstr "ЛишилоÑÑŒ знаків"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Так!"
+
#: lib/noticeform.php:160
msgid "Send a notice"
msgstr "ÐадіÑлати допиÑ"
@@ -5808,48 +6091,48 @@ msgstr ""
"Ðа жаль, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— щодо Вашого міÑÑ†ÐµÐ·Ð½Ð°Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð¹Ð¼Ðµ більше "
"чаÑу, ніж очікувалоÑÑŒ; будь лаÑка, Ñпробуйте пізніше"
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr "Півн."
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr "Півд."
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr "Сх."
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr "Зах."
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr "в"
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑÑ‚Ñ–"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Вторуванні"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ВідповіÑти на цей допиÑ"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "ВідповіÑти"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð²Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð»Ð¸"
@@ -5881,10 +6164,6 @@ msgstr "Помилка при додаванні віддаленого проф
msgid "Duplicate notice"
msgstr "Дублікат допиÑу"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Ð’Ð°Ñ Ð¿Ð¾Ð·Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ можливоÑÑ‚Ñ– підпиÑатиÑÑŒ."
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ нову підпиÑку."
@@ -5926,7 +6205,7 @@ msgstr "Теґи у допиÑах %s"
msgid "Unknown"
msgstr "Ðевідомо"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "ПідпиÑки"
@@ -5934,23 +6213,23 @@ msgstr "ПідпиÑки"
msgid "All subscriptions"
msgstr "Ð’ÑÑ– підпиÑки"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "ПідпиÑчики"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Ð’ÑÑ– підпиÑчики"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ІД"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "З нами від"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Ð’ÑÑ– групи"
@@ -5990,7 +6269,12 @@ msgstr "Повторити цей допиÑ?"
msgid "Repeat this notice"
msgstr "Вторувати цьому допиÑу"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Блокувати кориÑтувача цієї групи"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "КориÑтувача Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÐºÐ¾Ñ€Ð¸Ñтувацького режиму не визначено."
@@ -6010,6 +6294,10 @@ msgstr "Пошук"
msgid "Keyword(s)"
msgstr "Ключові Ñлова"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Пошук"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Пошук"
@@ -6061,33 +6349,14 @@ msgstr "Люди підпиÑані до %s"
msgid "Groups %s is a member of"
msgstr "%s бере учаÑÑ‚ÑŒ в цих групах"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr "Вже підпиÑаний!"
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr "КориÑтувач заблокував ВаÑ."
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "Ðевдала підпиÑка."
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ð¿Ð¸Ñати інших до ВаÑ."
-
-#: lib/subs.php:137
-msgid "Not subscribed!"
-msgstr "Ðе підпиÑано!"
-
-#: lib/subs.php:142
-msgid "Couldn't delete self-subscription."
-msgstr "Ðе можу видалити ÑамопідпиÑку."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ЗапроÑити"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "ЗапроÑÑ–Ñ‚ÑŒ друзів та колег приєднатиÑÑŒ до Ð’Ð°Ñ Ð½Ð° %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6139,67 +6408,84 @@ msgstr "Ðватара"
msgid "User actions"
msgstr "ДіÑльніÑÑ‚ÑŒ кориÑтувача"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr "Правка"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr "ÐадіÑлати прÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð¼Ñƒ кориÑтувачеві"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr "ПовідомленнÑ"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr "Модерувати"
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Профіль кориÑтувача."
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Ðдміни"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модерувати"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "мить тому"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "міÑÑць тому"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "близько %d міÑÑців тому"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "рік тому"
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index cf152eff5..2a3c0ceeb 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,83 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:19+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:31+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Chấp nhận"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "Thay đổi hình đại diện"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "Äăng ký"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "Riêng tư"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "ThÆ° má»i"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "Ban user"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "LÆ°u"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "Thay đổi hình đại diện"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "LÆ°u"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "Không có tin nhắn nào."
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -97,79 +104,88 @@ msgstr "Không có tin nhắn nào."
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "Không có user nào."
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s và bạn bè"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s và bạn bè"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s và bạn bè"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -182,20 +198,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Phương thức API không tìm thấy!"
@@ -229,8 +245,9 @@ msgstr "Không thể cập nhật thành viên."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "NgÆ°á»i dùng không có thông tin."
@@ -255,7 +272,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -378,68 +395,68 @@ msgstr "Không thể lấy lại các tin nhắn ưa thích"
msgid "Could not find target user."
msgstr "Không tìm thấy bất kỳ trạng thái nào."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "Biệt hiệu phải là chữ viết thÆ°á»ng hoặc số và không có khoảng trắng."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "Biệt hiệu này đã dùng rồi. Hãy nhập biệt hiệu khác."
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "Biệt hiệu không hợp lệ."
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "Trang chủ không phải là URL"
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "Tên đầy đủ quá dài (tối đa là 255 ký tự)."
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "Lý lịch quá dài (không quá 140 ký tự)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "Trang chủ '%s' không hợp lệ"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "Biệt hiệu này đã dùng rồi. Hãy nhập biệt hiệu khác."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -451,16 +468,16 @@ msgstr ""
msgid "Group not found!"
msgstr "Phương thức API không tìm thấy!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
@@ -470,7 +487,7 @@ msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè cá»
msgid "You are not a member of this group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
@@ -502,7 +519,7 @@ msgstr "Kích thước không hợp lệ."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -511,7 +528,7 @@ msgstr "Kích thước không hợp lệ."
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -546,7 +563,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -569,14 +586,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Giới thiệu"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -656,23 +673,11 @@ msgstr "Không hỗ trợ kiểu file ảnh này."
msgid "%1$s / Favorites from %2$s"
msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Tất cả các cập nhật của %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, fuzzy, php-format
-msgid "%s timeline"
-msgstr "Dòng tin nhắn của %s"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -698,17 +703,17 @@ msgstr "%s cập nhật từ tất cả má»i ngÆ°á»i!"
msgid "Repeated to %s"
msgstr "Trả lá»i cho %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "Trả lá»i cho %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Thông báo được gắn thẻ %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Dòng tin nhắn cho %s"
@@ -726,8 +731,7 @@ msgstr "Không có tài liệu nào."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "Không có biệt hiệu."
@@ -739,7 +743,7 @@ msgstr "Không có kích thước."
msgid "Invalid size."
msgstr "Kích thước không hợp lệ."
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Hình đại diện"
@@ -759,31 +763,31 @@ msgid "User without matching profile"
msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "Thay đổi hình đại diện"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "Xem trÆ°á»›c"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
#, fuzzy
msgid "Delete"
msgstr "Xóa tin nhắn"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "Tải file"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
#, fuzzy
msgid "Crop"
msgstr "Nhóm"
@@ -792,7 +796,7 @@ msgstr "Nhóm"
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -827,23 +831,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "Không"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "Bá» chặn ngÆ°á»i dùng này"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "Có"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Ban user"
@@ -852,41 +856,45 @@ msgstr "Ban user"
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "Không có tin nhắn nào."
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "Hồ sơ"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s và bạn bè"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "Bá» chặn ngÆ°á»i dùng này"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "BỠchặn"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
msgstr "Bá» chặn ngÆ°á»i dùng này"
@@ -944,7 +952,7 @@ msgid "Conversation"
msgstr "Không có mã số xác nhận."
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Tin nhắn"
@@ -966,7 +974,7 @@ msgstr "Bạn chưa cập nhật thông tin riêng"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
@@ -993,12 +1001,13 @@ msgstr "Không thể xóa tin nhắn này."
msgid "Delete this application"
msgstr "Xóa tin nhắn"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "Chưa đăng nhập."
@@ -1027,7 +1036,7 @@ msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
msgid "Do not delete this notice"
msgstr "Không thể xóa tin nhắn này."
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "Xóa tin nhắn"
@@ -1047,19 +1056,19 @@ msgstr "Bạn đã không xóa trạng thái của những ngÆ°á»i khác."
msgid "Delete user"
msgstr "Xóa tin nhắn"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "Xóa tin nhắn"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1174,6 +1183,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "LÆ°u"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
#, fuzzy
msgid "Save design"
@@ -1279,32 +1300,32 @@ msgstr "%s và nhóm"
msgid "You must be logged in to create a group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "Lý lịch quá dài (không quá 140 ký tự)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "Không thể cập nhật thành viên."
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Không thể tạo favorite."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
#, fuzzy
msgid "Options saved."
msgstr "Äã lÆ°u các Ä‘iá»u chỉnh."
@@ -1430,7 +1451,7 @@ msgid "Cannot normalize that email address"
msgstr "Không thể bình thÆ°á»ng hóa địa chỉ GTalk này"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Äịa chỉ email không hợp lệ."
@@ -1636,6 +1657,25 @@ msgstr "Không có tin nhắn nào."
msgid "Cannot read file."
msgstr "Không có tin nhắn nào."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Kích thước không hợp lệ."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Bạn đã theo những ngÆ°á»i này:"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "NgÆ°á»i dùng không có thông tin."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1668,7 +1708,7 @@ msgstr "NgÆ°á»i dùng không có thông tin."
msgid "User is not a member of group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Ban user"
@@ -1705,100 +1745,106 @@ msgstr "Không có id."
msgid "You must be logged in to edit a group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "Nhóm"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Không thể cập nhật thành viên."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Các tính năng đã được lưu."
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
#, fuzzy
msgid "Group logo"
msgstr "Mã nhóm"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "Hình đại diện đã được cập nhật."
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "Cập nhật hình đại diện không thành công."
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, fuzzy, php-format
msgid "%s group members"
msgstr "Thành viên"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "Thành viên"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make this user an admin"
msgstr "Kênh mà bạn tham gia"
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, fuzzy, php-format
+msgid "%s timeline"
+msgstr "Dòng tin nhắn của %s"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Dòng tin nhắn cho %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
#, fuzzy
msgid "Groups"
@@ -2057,16 +2103,19 @@ msgstr "Tin nhắn cá nhân"
msgid "Optionally add a personal message to the invitation."
msgstr "Không bắt buá»™c phải thêm thông Ä‘iệp vào thÆ° má»i."
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "Gá»­i"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s moi ban tham gia vao %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2128,7 +2177,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Không có biệt hiệu."
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s và nhóm"
@@ -2138,12 +2192,12 @@ msgstr "%s và nhóm"
msgid "You must be logged in to leave a group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s và nhóm"
@@ -2161,8 +2215,7 @@ msgstr "Sai tên đăng nhập hoặc mật khẩu."
msgid "Error setting user. You are probably not authorized."
msgstr "Chưa được phép."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Äăng nhập"
@@ -2422,8 +2475,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Không hỗ trợ định dạng dữ liệu này."
@@ -2575,7 +2628,8 @@ msgstr "Không thể lưu mật khẩu mới"
msgid "Password saved."
msgstr "Äã lÆ°u mật khẩu."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2608,7 +2662,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "ThÆ° má»i"
@@ -2708,7 +2761,7 @@ msgstr "Background Theme:"
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Khôi phục"
@@ -2767,11 +2820,11 @@ msgstr "Äịa chỉ email không hợp lệ."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Dòng tin nhắn cho %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Nội dung tin nhắn không hợp lệ"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2797,7 +2850,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 chữ cái thÆ°á»ng hoặc là chữ số, không có dấu chấm hay "
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "Tên đầy đủ"
@@ -2826,7 +2879,7 @@ msgid "Bio"
msgstr "Lý lịch"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2851,7 +2904,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Ngôn ngữ"
@@ -2877,7 +2930,7 @@ msgstr "Tá»± Ä‘á»™ng theo những ngÆ°á»i nào đăng ký theo tôi"
msgid "Bio is too long (max %d chars)."
msgstr "Lý lịch quá dài (không quá 140 ký tự)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2891,26 +2944,27 @@ msgstr "Ngôn ngữ quaÌ daÌ€i (tối Ä‘a là 50 ký tá»±)."
msgid "Invalid tag: \"%s\""
msgstr "Trang chủ '%s' không hợp lệ"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
#, fuzzy
msgid "Couldn't update user for autosubscribe."
msgstr "Không thể cập nhật thành viên."
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "Không thể lưu hồ sơ cá nhân."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "Không thể lưu hồ sơ cá nhân."
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "Không thể lưu hồ sơ cá nhân."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Äã lÆ°u các Ä‘iá»u chỉnh."
@@ -2924,48 +2978,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "Không thể lấy lại các tin nhắn ưa thích"
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "Dòng tin công cộng"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Dòng tin công cộng"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2974,7 +3028,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3148,8 +3202,7 @@ msgstr "Lỗi xảy ra với mã xác nhận."
msgid "Registration successful"
msgstr "Äăng ký thành công"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Äăng ký"
@@ -3191,7 +3244,7 @@ msgid "Same as password above. Required."
msgstr "Cùng mật khẩu ở trên. Bắt buộc."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3295,7 +3348,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL trong hồ sơ cá nhân của bạn ở trên các trang microblogging khác"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Theo bạn này"
@@ -3336,7 +3389,7 @@ msgstr "Bạn không thể đăng ký nếu không đồng ý các Ä‘iá»u khoáº
msgid "You already repeated that notice."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Tạo"
@@ -3346,47 +3399,47 @@ msgstr "Tạo"
msgid "Repeated!"
msgstr "Tạo"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "Trả lá»i cho %s"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "%s chào mừng bạn "
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3398,6 +3451,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%s chào mừng bạn "
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Bạn đã theo những ngÆ°á»i này:"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3413,8 +3476,9 @@ msgstr "Bạn đã theo những ngÆ°á»i này:"
msgid "User is already sandboxed."
msgstr "NgÆ°á»i dùng không có thông tin."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3438,8 +3502,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "Thay đổi hình đại diện"
@@ -3474,8 +3538,8 @@ msgstr "ThÆ° má»i đã gá»­i"
msgid "Description"
msgstr "Mô tả"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Số liệu thống kê"
@@ -3536,35 +3600,35 @@ msgstr "Những tin nhắn ưa thích của %s"
msgid "Could not retrieve favorite notices."
msgstr "Không thể lấy lại các tin nhắn ưa thích"
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "Chá»n những ngÆ°á»i bạn của %s"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3572,7 +3636,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3586,72 +3650,72 @@ msgstr "%s và nhóm"
msgid "%1$s group, page %2$d"
msgstr "Thành viên"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Thông tin nhóm"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
#, fuzzy
msgid "Note"
msgstr "Tin nhắn"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
#, fuzzy
msgid "Group actions"
msgstr "Mã nhóm"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Hộp thư đi của %s"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Thành viên"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
#, fuzzy
msgid "All members"
msgstr "Thành viên"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Tạo"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3661,7 +3725,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3670,7 +3734,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3784,150 +3848,139 @@ msgid "User is already silenced."
msgstr "NgÆ°á»i dùng không có thông tin."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Äịa chỉ email không hợp lệ."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Dia chi email moi de gui tin nhan den %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Thành phố"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ngôn ngữ bạn thích"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Tin mới nhất"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Không thể lưu thông tin Twitter của bạn!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Thông báo mới"
#: actions/smssettings.php:58
#, fuzzy
@@ -4039,22 +4092,92 @@ msgstr ""
msgid "No code entered"
msgstr "Không có mã nào được nhập"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Tôi theo"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Thay đổi hình đại diện"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "Không thể tạo đăng nhận."
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "Không có user nào."
+msgid "No such profile."
+msgstr "Không có tin nhắn nào."
-#: actions/subscribe.php:69
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Bạn chưa cập nhật thông tin riêng"
+
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "Theo bạn này"
@@ -4115,7 +4238,7 @@ msgstr "Có nhiá»u ngÆ°á»i gá»­i lá»i nhắn để bạn nghe theo."
msgid "These are the people whose notices %s listens to."
msgstr "Có nhiá»u ngÆ°á»i gá»­i lá»i nhắn để %s nghe theo."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4125,36 +4248,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s dang theo doi tin nhan cua ban tren %2$s."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "Không có Jabber ID."
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "Dòng tin nhắn cho %s"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "Dòng tin nhắn cho %s"
@@ -4209,7 +4332,7 @@ msgstr ""
msgid "No such tag."
msgstr "Không có tin nhắn nào."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Phương thức API dưới cấu trúc có sẵn."
@@ -4238,81 +4361,82 @@ msgstr "Không có URL cho hồ sÆ¡ để quay vá»."
msgid "Unsubscribed"
msgstr "Hết theo"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Hồ sơ "
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "Gá»­i thÆ° má»i đến những ngÆ°á»i chÆ°a có tài khoản"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "Tất cả đăng nhận"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "Tá»± Ä‘á»™ng theo những ngÆ°á»i nào đăng ký theo tôi"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "ThÆ° má»i đã gá»­i"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "ThÆ° má»i đã gá»­i"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4446,16 +4570,22 @@ msgstr "Thành viên"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4499,7 +4629,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Cá nhân"
@@ -4540,6 +4670,11 @@ msgstr "Không thể cập nhật thành viên."
msgid "Group leave failed."
msgstr "Thông tin nhóm"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Không thể cập nhật thành viên."
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4560,70 +4695,107 @@ msgstr "Không thể chèn thêm vào đăng nhận."
msgid "Could not update message with new URI."
msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, fuzzy, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+#, fuzzy
+msgid "User has blocked you."
+msgstr "NgÆ°á»i dùng không có thông tin."
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "Chưa đăng nhận!"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Không thể xóa đăng nhận."
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Không thể xóa đăng nhận."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "Không thể xóa đăng nhận."
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%s chào mừng bạn "
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Không thể tạo favorite."
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Không thể tạo đăng nhận."
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Không thể tạo đăng nhận."
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "Không thể tạo đăng nhận."
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Thay đổi các thiết lập trong hồ sơ cá nhân của bạn"
@@ -4664,135 +4836,189 @@ msgstr "%s (%s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "Trang chủ"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Cá nhân"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Thay đổi mật khẩu của bạn"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "Kết nối"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Không thể chuyển đến máy chủ: %s"
-#: lib/action.php:448
+#: lib/action.php:443
#, fuzzy
+msgid "Connect"
+msgstr "Kết nối"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Tôi theo"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ThÆ° má»i"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
"Äiá»n địa chỉ email và ná»™i dung tin nhắn để gá»­i thÆ° má»i bạn bè và đồng nghiệp "
"của bạn tham gia vào dịch vụ này."
-#: lib/action.php:458
-msgid "Logout"
-msgstr "Thoát"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ThÆ° má»i"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Thoát"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Tạo tài khoản mới"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "Äăng ký"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "Hướng dẫn"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Äăng nhập"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hướng dẫn"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "Tìm kiếm"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hướng dẫn"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "Tìm kiếm"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Thông báo mới"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Thông báo mới"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Tôi theo"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hướng dẫn"
+
+#: lib/action.php:754
msgid "About"
msgstr "Giới thiệu"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "Riêng tư"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "Nguồn"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "Liên hệ"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tin đã gửi"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4801,12 +5027,12 @@ msgstr ""
"**%%site.name%%** là dịch vụ gửi tin nhắn được cung cấp từ [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** là dịch vụ gửi tin nhắn. "
-#: lib/action.php:786
+#: lib/action.php:806
#, fuzzy, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4817,105 +5043,159 @@ msgstr ""
"quyá»n [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Tìm theo nội dung của tin nhắn"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "Sau"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "TrÆ°á»›c"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "Biệt hiệu không được cho phép."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Không thể lưu thông tin Twitter của bạn!"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Xac nhan dia chi email"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "ThÆ° má»i"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Xác nhận SMS"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "Cá nhân"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Xác nhận SMS"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Xác nhận SMS"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Xác nhận SMS"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Xác nhận SMS"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Thông báo mới"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Xác nhận SMS"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5011,12 +5291,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Äã lÆ°u mật khẩu."
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Äã lÆ°u mật khẩu."
@@ -5176,82 +5456,92 @@ msgstr "Có lỗi xảy ra khi lưu tin nhắn."
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "Không có user nào."
+
+#: lib/command.php:561
#, fuzzy, php-format
msgid "Subscribed to %s"
msgstr "Theo nhóm này"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, fuzzy, php-format
msgid "Unsubscribed from %s"
msgstr "Hết theo"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
#, fuzzy
msgid "Notification off."
msgstr "Không có mã số xác nhận."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
#, fuzzy
msgid "Notification on."
msgstr "Không có mã số xác nhận."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "Hết theo"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Bạn đã theo những ngÆ°á»i này:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Không thể tạo favorite."
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Không thể tạo favorite."
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:714
+#: lib/command.php:755
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"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5265,6 +5555,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5292,20 +5583,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Không có mã số xác nhận."
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5412,6 +5703,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5509,25 +5805,25 @@ msgstr "Hệ thống xảy ra lỗi trong khi tải file."
msgid "Not an image or corrupt file."
msgstr "File há»ng hoặc không phải là file ảnh."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "Không hỗ trợ kiểu file ảnh này."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "Không có tin nhắn nào."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
#, fuzzy
msgid "Unknown file type"
msgstr "Không hỗ trợ kiểu file ảnh này."
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5791,7 +6087,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " từ "
@@ -5885,6 +6181,12 @@ msgstr ""
msgid "Available characters"
msgstr "Nhiá»u hÆ¡n 6 ký tá»±"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Gá»­i"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5919,52 +6221,52 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "Không"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Không có nội dung!"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Tạo"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "Trả lá»i tin nhắn này"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Trả lá»i"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Tin đã gửi"
@@ -6001,10 +6303,6 @@ msgstr "Lỗi xảy ra khi thêm mới hồ sơ cá nhân"
msgid "Duplicate notice"
msgstr "Xóa tin nhắn"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Không thể chèn thêm vào đăng nhận."
@@ -6047,7 +6345,7 @@ msgstr "cảnh báo tin nhắn"
msgid "Unknown"
msgstr "Không tìm thấy action"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tôi theo bạn này"
@@ -6055,24 +6353,24 @@ msgstr "Tôi theo bạn này"
msgid "All subscriptions"
msgstr "Tất cả đăng nhận"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Bạn này theo tôi"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Bạn này theo tôi"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Gia nhập từ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
#, fuzzy
msgid "All groups"
msgstr "Nhóm"
@@ -6119,7 +6417,12 @@ msgstr "Trả lá»i tin nhắn này"
msgid "Repeat this notice"
msgstr "Trả lá»i tin nhắn này"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Ban user"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6142,6 +6445,10 @@ msgstr "Tìm kiếm"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Tìm kiếm"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6197,38 +6504,16 @@ msgstr "Theo nhóm này"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-#, fuzzy
-msgid "User has blocked you."
-msgstr "NgÆ°á»i dùng không có thông tin."
-
-#: lib/subs.php:63
-#, fuzzy
-msgid "Could not subscribe."
-msgstr "Chưa đăng nhận!"
-
-#: lib/subs.php:82
-#, fuzzy
-msgid "Could not subscribe other to you."
-msgstr "Không thể tạo favorite."
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Chưa đăng nhận!"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "Không thể xóa đăng nhận."
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "ThÆ° má»i"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "Không thể xóa đăng nhận."
+#: lib/subgroupnav.php:106
+#, fuzzy, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+"Äiá»n địa chỉ email và ná»™i dung tin nhắn để gá»­i thÆ° má»i bạn bè và đồng nghiệp "
+"của bạn tham gia vào dịch vụ này."
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6286,70 +6571,85 @@ msgstr "Hình đại diện"
msgid "User actions"
msgstr "Không tìm thấy action"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "Các thiết lập cho Hồ sơ cá nhân"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
#, fuzzy
msgid "Send a direct message to this user"
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
#, fuzzy
msgid "Message"
msgstr "Tin mới nhất"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Hồ sơ"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "vài giây trước"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1 giá» trÆ°á»›c"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d giá» trÆ°á»›c"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1 năm trước"
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index a7aeec7ca..5b2dae110 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -10,82 +10,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:22+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:34+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "接å—"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "头åƒè®¾ç½®"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "注册"
-#: actions/accessadminpanel.php:161
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
#, fuzzy
+msgctxt "LABEL"
msgid "Private"
msgstr "éšç§"
-#: actions/accessadminpanel.php:163
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:167
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
#, fuzzy
msgid "Invite only"
msgstr "邀请"
-#: actions/accessadminpanel.php:169
-msgid "Make registration invitation only."
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:173
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
#, fuzzy
msgid "Closed"
msgstr "阻止"
-#: actions/accessadminpanel.php:175
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr "ä¿å­˜"
-
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "头åƒè®¾ç½®"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+#, fuzzy
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
msgid "No such page"
msgstr "没有该页é¢"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -99,79 +106,88 @@ msgstr "没有该页é¢"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "没有这个用户。"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s åŠå¥½å‹"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s åŠå¥½å‹"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "%s 好å‹çš„èšåˆ(RSS 1.0)"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "%s 好å‹çš„èšåˆ(RSS 2.0)"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "%s 好å‹çš„èšåˆ(Atom)"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr "这是 %s 和好å‹çš„时间线,但是没有任何人å‘布内容。"
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s åŠå¥½å‹"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼"
@@ -184,20 +200,20 @@ msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼"
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 方法未实现ï¼"
@@ -231,8 +247,9 @@ msgstr "无法更新用户。"
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr "用户没有个人信æ¯ã€‚"
@@ -257,7 +274,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
@@ -376,68 +393,68 @@ msgstr "无法获å–收è—的通告。"
msgid "Could not find target user."
msgstr "找ä¸åˆ°ä»»ä½•ä¿¡æ¯ã€‚"
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "昵称åªèƒ½ä½¿ç”¨å°å†™å­—æ¯å’Œæ•°å­—,ä¸åŒ…å«ç©ºæ ¼ã€‚"
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "昵称已被使用,æ¢ä¸€ä¸ªå§ã€‚"
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„昵称。"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "主页的URLä¸æ­£ç¡®ã€‚"
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "å…¨å过长(ä¸èƒ½è¶…过 255 个字符)。"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "æ述过长(ä¸èƒ½è¶…过140字符)。"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "ä½ç½®è¿‡é•¿(ä¸èƒ½è¶…过255个字符)。"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "主页'%s'ä¸æ­£ç¡®"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "昵称已被使用,æ¢ä¸€ä¸ªå§ã€‚"
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -449,16 +466,16 @@ msgstr ""
msgid "Group not found!"
msgstr "API 方法未实现ï¼"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
#, fuzzy
msgid "You are already a member of that group."
msgstr "您已ç»æ˜¯è¯¥ç»„æˆå‘˜"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "无法把 %s 用户添加到 %s 组"
@@ -468,7 +485,7 @@ msgstr "无法把 %s 用户添加到 %s 组"
msgid "You are not a member of this group."
msgstr "您未告知此个人信æ¯"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "无法订阅用户:未找到。"
@@ -500,7 +517,7 @@ msgstr "大å°ä¸æ­£ç¡®ã€‚"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -509,7 +526,7 @@ msgstr "大å°ä¸æ­£ç¡®ã€‚"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -544,7 +561,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -567,13 +584,13 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "å¸å·"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -654,23 +671,11 @@ msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚"
msgid "%1$s / Favorites from %2$s"
msgstr "%s çš„æ”¶è— / %s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 收è—了 %s çš„ %s 通告。"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s 时间表"
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -696,17 +701,17 @@ msgstr "æ¥è‡ªæ‰€æœ‰äººçš„ %s 消æ¯ï¼"
msgid "Repeated to %s"
msgstr "%s 的回å¤"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, fuzzy, php-format
msgid "Repeats of %s"
msgstr "%s 的回å¤"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "带 %s 标签的通告"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼"
@@ -724,8 +729,7 @@ msgstr "没有这份文档。"
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "没有昵称。"
@@ -737,7 +741,7 @@ msgstr "没有大å°ã€‚"
msgid "Invalid size."
msgstr "大å°ä¸æ­£ç¡®ã€‚"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "头åƒ"
@@ -754,31 +758,31 @@ msgid "User without matching profile"
msgstr "找ä¸åˆ°åŒ¹é…的用户。"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
msgid "Avatar settings"
msgstr "头åƒè®¾ç½®"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr "原æ¥çš„"
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr "预览"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
#, fuzzy
msgid "Delete"
msgstr "删除"
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr "上传"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "剪è£"
@@ -786,7 +790,7 @@ msgstr "剪è£"
msgid "Pick a square area of the image to be your avatar"
msgstr "请选择一å—方形区域作为你的头åƒ"
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr "文件数æ®ä¸¢å¤±"
@@ -821,23 +825,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr "å¦"
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "å–消阻止次用户"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr "是"
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "阻止该用户"
@@ -846,41 +850,45 @@ msgstr "阻止该用户"
msgid "Failed to save block information."
msgstr "ä¿å­˜é˜»æ­¢ä¿¡æ¯å¤±è´¥ã€‚"
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
msgid "No such group."
msgstr "没有这个组。"
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "用户没有个人信æ¯ã€‚"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s åŠå¥½å‹"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
#, fuzzy
msgid "A list of the users blocked from joining this group."
msgstr "该组æˆå‘˜åˆ—表。"
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "å–消阻止用户失败。"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr "å–消阻止"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "å–消阻止次用户"
@@ -940,7 +948,7 @@ msgid "Conversation"
msgstr "确认ç "
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "通告"
@@ -962,7 +970,7 @@ msgstr "您未告知此个人信æ¯"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
@@ -989,12 +997,13 @@ msgstr "无法删除通告。"
msgid "Delete this application"
msgstr "删除通告"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr "未登录。"
@@ -1023,7 +1032,7 @@ msgstr "确定è¦åˆ é™¤è¿™æ¡æ¶ˆæ¯å—?"
msgid "Do not delete this notice"
msgstr "无法删除通告。"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "删除通告"
@@ -1043,19 +1052,19 @@ msgstr "您ä¸èƒ½åˆ é™¤å…¶ä»–用户的状æ€ã€‚"
msgid "Delete user"
msgstr "删除"
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "删除通告"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1166,6 +1175,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "ä¿å­˜"
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1268,31 +1289,31 @@ msgstr "编辑 %s 组"
msgid "You must be logged in to create a group."
msgstr "您必须登录æ‰èƒ½åˆ›å»ºå°ç»„。"
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr "使用这个表å•æ¥ç¼–辑组"
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "æ述过长(ä¸èƒ½è¶…过140字符)。"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "无法更新组"
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "无法创建收è—。"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "选项已ä¿å­˜ã€‚"
@@ -1413,7 +1434,7 @@ msgid "Cannot normalize that email address"
msgstr "无法识别此电å­é‚®ä»¶"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„电å­é‚®ä»¶ã€‚"
@@ -1612,6 +1633,25 @@ msgstr "没有这份通告。"
msgid "Cannot read file."
msgstr "没有这份通告。"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "大å°ä¸æ­£ç¡®ã€‚"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "用户没有个人信æ¯ã€‚"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1646,7 +1686,7 @@ msgstr "用户没有个人信æ¯ã€‚"
msgid "User is not a member of group."
msgstr "您未告知此个人信æ¯"
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "阻止用户"
@@ -1683,99 +1723,105 @@ msgstr "没有ID"
msgid "You must be logged in to edit a group."
msgstr "您必须登录æ‰èƒ½åˆ›å»ºå°ç»„。"
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
#, fuzzy
msgid "Group design"
msgstr "组"
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "无法更新用户。"
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "åŒæ­¥é€‰é¡¹å·²ä¿å­˜ã€‚"
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr "组logo"
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, fuzzy, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr "ä½ å¯ä»¥ç»™ä½ çš„组上载一个logo图。"
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
#, fuzzy
msgid "User without matching profile."
msgstr "找ä¸åˆ°åŒ¹é…的用户。"
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
#, fuzzy
msgid "Pick a square area of the image to be the logo."
msgstr "请选择一å—方形区域作为你的头åƒ"
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
msgid "Logo updated."
msgstr "logo已更新。"
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "更新logo失败。"
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr "%s 组æˆå‘˜"
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, fuzzy, php-format
msgid "%1$s group members, page %2$d"
msgstr "%s 组æˆå‘˜, 第 %d 页"
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr "该组æˆå‘˜åˆ—表。"
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "阻止"
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s 时间表"
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "组"
@@ -2021,16 +2067,19 @@ msgstr "个人消æ¯"
msgid "Optionally add a personal message to the invitation."
msgstr "在邀请中加几å¥è¯(å¯é€‰)。"
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+#, fuzzy
+msgctxt "BUTTON"
msgid "Send"
msgstr "å‘é€"
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr "%1$s 邀请您加入 %2$s"
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2086,7 +2135,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr "您必须登录æ‰èƒ½åŠ å…¥ç»„。"
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "没有昵称。"
+
+#: actions/joingroup.php:141
#, fuzzy, php-format
msgid "%1$s joined group %2$s"
msgstr "%s 加入 %s 组"
@@ -2096,12 +2150,12 @@ msgstr "%s 加入 %s 组"
msgid "You must be logged in to leave a group."
msgstr "您必须登录æ‰èƒ½é‚€è¯·å…¶ä»–人使用 %s"
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
#, fuzzy
msgid "You are not a member of that group."
msgstr "您未告知此个人信æ¯"
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%s 离开群 %s"
@@ -2119,8 +2173,7 @@ msgstr "用户å或密ç ä¸æ­£ç¡®ã€‚"
msgid "Error setting user. You are probably not authorized."
msgstr "未认è¯ã€‚"
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "登录"
@@ -2372,8 +2425,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚"
@@ -2522,7 +2575,8 @@ msgstr "无法ä¿å­˜æ–°å¯†ç ã€‚"
msgid "Password saved."
msgstr "密ç å·²ä¿å­˜ã€‚"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2555,7 +2609,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
#, fuzzy
msgid "Site"
msgstr "邀请"
@@ -2651,7 +2704,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS短信"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "æ¢å¤"
@@ -2710,11 +2763,11 @@ msgstr "ä¸æ˜¯æœ‰æ•ˆçš„电å­é‚®ä»¶"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "用户自加标签 %s - 第 %d 页"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "通告内容ä¸æ­£ç¡®"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2738,7 +2791,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 到 64 个å°å†™å­—æ¯æˆ–数字,ä¸åŒ…å«æ ‡ç‚¹åŠç©ºç™½"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "å…¨å"
@@ -2767,7 +2820,7 @@ msgid "Bio"
msgstr "自述"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2792,7 +2845,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "你的标签 (å­—æ¯letters, æ•°å­—numbers, -, ., å’Œ _), 以逗å·æˆ–空格分隔"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "语言"
@@ -2818,7 +2871,7 @@ msgstr "自动订阅任何订阅我的更新的人(这个选项最适åˆæœºå™¨äº
msgid "Bio is too long (max %d chars)."
msgstr "自述过长(ä¸èƒ½è¶…过140字符)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "未选择时区。"
@@ -2831,25 +2884,26 @@ msgstr "语言过长(ä¸èƒ½è¶…过50个字符)。"
msgid "Invalid tag: \"%s\""
msgstr "主页'%s'ä¸æ­£ç¡®"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "无法更新用户的自动订阅选项。"
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "设置已ä¿å­˜ã€‚"
@@ -2863,48 +2917,48 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr "无法获å–收è—的通告。"
-#: actions/public.php:129
+#: actions/public.php:130
#, fuzzy, php-format
msgid "Public timeline, page %d"
msgstr "公开的时间表"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "公开的时间表"
-#: actions/public.php:159
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "公开的èšåˆ"
-#: actions/public.php:163
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "公开的èšåˆ"
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "公开的èšåˆ"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2913,7 +2967,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -3086,8 +3140,7 @@ msgstr "验è¯ç å‡ºé”™ã€‚"
msgid "Registration successful"
msgstr "注册æˆåŠŸã€‚"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "注册"
@@ -3126,7 +3179,7 @@ msgid "Same as password above. Required."
msgstr "相åŒçš„密ç ã€‚此项必填。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "电å­é‚®ä»¶"
@@ -3227,7 +3280,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "您在其他兼容的微åšå®¢æœåŠ¡çš„个人信æ¯URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "订阅"
@@ -3270,7 +3323,7 @@ msgstr "您必须åŒæ„此授æƒæ–¹å¯æ³¨å†Œã€‚"
msgid "You already repeated that notice."
msgstr "您已æˆåŠŸé˜»æ­¢è¯¥ç”¨æˆ·ï¼š"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "创建"
@@ -3280,47 +3333,47 @@ msgstr "创建"
msgid "Repeated!"
msgstr "创建"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr "%s 的回å¤"
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "%s 的通告èšåˆ"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, fuzzy, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr "这是 %s 和好å‹çš„时间线,但是没有任何人å‘布内容。"
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3332,6 +3385,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "找ä¸åˆ°åŒ¹é…的用户。"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3347,8 +3410,9 @@ msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
msgid "User is already sandboxed."
msgstr "用户没有个人信æ¯ã€‚"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3372,8 +3436,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "头åƒè®¾ç½®"
@@ -3409,8 +3473,8 @@ msgstr "分页"
msgid "Description"
msgstr "æè¿°"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "统计"
@@ -3471,35 +3535,35 @@ msgstr "%s 收è—的通告"
msgid "Could not retrieve favorite notices."
msgstr "无法获å–收è—的通告。"
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "%s 好å‹çš„èšåˆ"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "%s 好å‹çš„èšåˆ"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "%s 好å‹çš„èšåˆ"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3507,7 +3571,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3521,71 +3585,71 @@ msgstr "%s 组"
msgid "%1$s group, page %2$d"
msgstr "%s 组æˆå‘˜, 第 %d 页"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "组资料"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr "URL 互è”网地å€"
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
#, fuzzy
msgid "Note"
msgstr "通告"
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr "组动作"
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s çš„å‘件箱"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "注册于"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(没有)"
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr "所有æˆå‘˜"
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "创建"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3595,7 +3659,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3606,7 +3670,7 @@ msgstr ""
"**%s** 是一个 %%%%site.name%%%% 的用户组,一个微åšå®¢æœåŠ¡ [micro-blogging]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "admin管ç†å‘˜"
@@ -3722,150 +3786,139 @@ msgid "User is already silenced."
msgstr "用户没有个人信æ¯ã€‚"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„电å­é‚®ä»¶"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新通告"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "新的电å­é‚®ä»¶åœ°å€ï¼Œç”¨äºŽå‘布 %s ä¿¡æ¯"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "本地显示"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "首选语言"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "新通告"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "新消æ¯"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "无法ä¿å­˜ Twitter 设置ï¼"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新通告"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "新通告"
#: actions/smssettings.php:58
#, fuzzy
@@ -3968,22 +4021,92 @@ msgstr ""
msgid "No code entered"
msgstr "没有输入验è¯ç "
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "主站导航"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "头åƒè®¾ç½®"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
msgstr "您未告知此个人信æ¯"
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "无法删除订阅。"
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "没有这个用户。"
+msgid "No such profile."
+msgstr "没有这份通告。"
+
+#: actions/subscribe.php:117
+#, fuzzy
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "您未告知此个人信æ¯"
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "订阅"
@@ -4044,7 +4167,7 @@ msgstr "这是您订阅的用户。"
msgid "These are the people whose notices %s listens to."
msgstr "这是 %s 订阅的用户。"
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -4054,36 +4177,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "%1$s 开始关注您的 %2$s ä¿¡æ¯ã€‚"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "没有 Jabber ID。"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS短信"
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "用户自加标签 %s - 第 %d 页"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, fuzzy, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr "%s 的通告èšåˆ"
@@ -4139,7 +4262,7 @@ msgstr "使用这个表格给你的关注者或你的订阅加注标签。"
msgid "No such tag."
msgstr "未找到此消æ¯ã€‚"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API 方法尚未实现。"
@@ -4168,81 +4291,83 @@ msgstr "æœåŠ¡å™¨æ²¡æœ‰è¿”回个人信æ¯URL。"
msgid "Unsubscribed"
msgstr "退订"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
msgstr "用户"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "个人信æ¯"
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
#, fuzzy
msgid "New users"
msgstr "邀请新用户"
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "所有订阅"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr "自动订阅任何订阅我的更新的人(这个选项最适åˆæœºå™¨äºº)"
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "å·²å‘é€é‚€è¯·"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
#, fuzzy
msgid "Invitations enabled"
msgstr "å·²å‘é€é‚€è¯·"
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4373,16 +4498,22 @@ msgstr "%s 组æˆå‘˜, 第 %d 页"
msgid "Search for more groups"
msgstr "检索人或文字"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "您未告知此个人信æ¯"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4426,7 +4557,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "个人"
@@ -4467,6 +4598,11 @@ msgstr "无法更新组"
msgid "Group leave failed."
msgstr "组资料"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "无法更新组"
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4485,70 +4621,108 @@ msgstr "无法添加信æ¯ã€‚"
msgid "Could not update message with new URI."
msgstr "无法添加新URIçš„ä¿¡æ¯ã€‚"
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "添加标签时数æ®åº“出错:%s"
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚"
-#: classes/Notice.php:229
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚"
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "在这个网站你被ç¦æ­¢å‘布消æ¯ã€‚"
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "添加回å¤æ—¶æ•°æ®åº“出错:%s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+#, fuzzy
+msgid "You have been banned from subscribing."
+msgstr "那个用户阻止了你的订阅。"
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+#, fuzzy
+msgid "User has blocked you."
+msgstr "用户没有个人信æ¯ã€‚"
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "未订阅ï¼"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "无法删除订阅。"
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "无法删除订阅。"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "无法删除订阅。"
+
+#: classes/User.php:373
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "无法创建组。"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "无法删除订阅。"
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "无法删除订阅。"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "无法删除订阅。"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "修改您的个人信æ¯"
@@ -4587,133 +4761,192 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "无标题页"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "主站导航"
-#: lib/action.php:439
-msgid "Home"
-msgstr "主页"
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "个人资料åŠæœ‹å‹å¹´è¡¨"
-#: lib/action.php:441
+#: lib/action.php:433
#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "个人"
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "修改资料"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "连接"
-
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "无法é‡å®šå‘到æœåŠ¡å™¨ï¼š%s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "连接"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "主站导航"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "邀请"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "admin管ç†å‘˜"
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, fuzzy, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "使用这个表å•æ¥é‚€è¯·å¥½å‹å’ŒåŒäº‹åŠ å…¥ã€‚"
-#: lib/action.php:458
-msgid "Logout"
-msgstr "登出"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "邀请"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "登出本站"
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "登出"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "创建新å¸å·"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "注册"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "登入本站"
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "帮助"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "登录"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "帮助"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr "æœç´¢"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "帮助"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "检索人或文字"
-#: lib/action.php:493
+#: lib/action.php:491
+#, fuzzy
+msgctxt "MENU"
+msgid "Search"
+msgstr "æœç´¢"
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "新通告"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr "本地显示"
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新通告"
-#: lib/action.php:727
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "次项站导航"
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "帮助"
+
+#: lib/action.php:754
msgid "About"
msgstr "关于"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "常è§é—®é¢˜FAQ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr "éšç§"
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr "æ¥æº"
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "è”系人"
-#: lib/action.php:751
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "呼å«"
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4722,12 +4955,12 @@ msgstr ""
"**%%site.name%%** 是一个微åšå®¢æœåŠ¡ï¼Œæ供者为 [%%site.broughtby%%](%%site."
"broughtbyurl%%)。"
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 是一个微åšå®¢æœåŠ¡ã€‚"
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4738,107 +4971,161 @@ msgstr ""
"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
"授æƒã€‚"
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr "全部"
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr "注册è¯"
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr "分页"
-#: lib/action.php:1139
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« 之åŽ"
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "ä¹‹å‰ Â»"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
#, fuzzy
msgid "You cannot make changes to this site."
msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
#, fuzzy
msgid "Changes to that panel are not allowed."
msgstr "ä¸å…许注册。"
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "命令尚未实现。"
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "命令尚未实现。"
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "无法ä¿å­˜ Twitter 设置ï¼"
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "电å­é‚®ä»¶åœ°å€ç¡®è®¤"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "邀请"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS短信确认"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "个人"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS短信确认"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "用户"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS短信确认"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS短信确认"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS短信确认"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "新通告"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS短信确认"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4934,12 +5221,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "密ç å·²ä¿å­˜ã€‚"
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "密ç å·²ä¿å­˜ã€‚"
@@ -5093,80 +5380,89 @@ msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
msgid "Specify the name of the user to subscribe to"
msgstr "指定è¦è®¢é˜…的用户å"
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "没有这个用户。"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr "订阅 %s"
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr "指定è¦å–消订阅的用户å"
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr "å–消订阅 %s"
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr "命令尚未实现。"
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr "通告关闭。"
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr "无法关闭通告。"
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr "通告开å¯ã€‚"
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr "无法开å¯é€šå‘Šã€‚"
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "å–消订阅 %s"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "您已订阅这些用户:"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "无法订阅他人更新。"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "无法订阅他人更新。"
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "您未告知此个人信æ¯"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5180,6 +5476,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5207,20 +5504,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "没有验è¯ç "
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "登入本站"
@@ -5326,6 +5623,11 @@ msgstr "选择标签缩å°æ¸…å•"
msgid "Go"
msgstr "执行"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5420,24 +5722,24 @@ msgstr "上传文件时出错。"
msgid "Not an image or corrupt file."
msgstr "ä¸æ˜¯å›¾ç‰‡æ–‡ä»¶æˆ–文件已æŸå。"
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚"
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "没有这份通告。"
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr "未知文件类型"
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5659,7 +5961,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
#, fuzzy
msgid "from"
msgstr " 从 "
@@ -5752,6 +6054,12 @@ msgstr "到"
msgid "Available characters"
msgstr "6 个或更多字符"
+#: lib/messageform.php:178 lib/noticeform.php:236
+#, fuzzy
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "å‘é€"
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5786,53 +6094,53 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
#, fuzzy
msgid "N"
msgstr "å¦"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "没有内容ï¼"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "创建"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "无法删除通告。"
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "回å¤"
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "消æ¯å·²å‘布。"
@@ -5867,11 +6175,6 @@ msgstr "添加远程的个人信æ¯å‡ºé”™"
msgid "Duplicate notice"
msgstr "删除通告"
-#: lib/oauthstore.php:465 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "那个用户阻止了你的订阅。"
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "无法添加新的订阅。"
@@ -5914,7 +6217,7 @@ msgstr "%s's 的消æ¯çš„标签"
msgid "Unknown"
msgstr "未知动作"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "订阅"
@@ -5922,25 +6225,25 @@ msgstr "订阅"
msgid "All subscriptions"
msgstr "所有订阅"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "订阅者"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "订阅者"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "用户"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "用户始于"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "所有组"
@@ -5985,7 +6288,12 @@ msgstr "无法删除通告。"
msgid "Repeat this notice"
msgstr "无法删除通告。"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "该组æˆå‘˜åˆ—表。"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6008,6 +6316,10 @@ msgstr "æœç´¢"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "æœç´¢"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6063,36 +6375,14 @@ msgstr "订阅 %s"
msgid "Groups %s is a member of"
msgstr "%s 组是æˆå‘˜ç»„æˆäº†"
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-#, fuzzy
-msgid "User has blocked you."
-msgstr "用户没有个人信æ¯ã€‚"
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
-msgstr "无法订阅。"
-
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
-msgstr "无法订阅他人更新。"
-
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "未订阅ï¼"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "无法删除订阅。"
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "邀请"
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "无法删除订阅。"
+#: lib/subgroupnav.php:106
+#, fuzzy, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr "使用这个表å•æ¥é‚€è¯·å¥½å‹å’ŒåŒäº‹åŠ å…¥ã€‚"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6151,70 +6441,86 @@ msgstr "头åƒ"
msgid "User actions"
msgstr "未知动作"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "个人设置"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
#, fuzzy
msgid "Send a direct message to this user"
msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
#, fuzzy
msgid "Message"
msgstr "新消æ¯"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "用户没有个人信æ¯ã€‚"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "admin管ç†å‘˜"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "几秒å‰"
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "一分钟å‰"
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟å‰"
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "一å°æ—¶å‰"
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d å°æ—¶å‰"
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "一天å‰"
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d 天å‰"
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "一个月å‰"
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d 个月å‰"
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "一年å‰"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 815f95eac..e7314d5e6 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,81 +7,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-11 08:14+0000\n"
-"PO-Revision-Date: 2010-02-11 08:16:25+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-04 18:57:37+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r62295); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63249); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: actions/accessadminpanel.php:54 lib/adminpanelaction.php:326
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "接å—"
-#: actions/accessadminpanel.php:65
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
#, fuzzy
msgid "Site access settings"
msgstr "線上å³æ™‚通設定"
-#: actions/accessadminpanel.php:158
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
#, fuzzy
msgid "Registration"
msgstr "所有訂閱"
-#: actions/accessadminpanel.php:161
-msgid "Private"
-msgstr ""
-
-#: actions/accessadminpanel.php:163
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-msgid "Invite only"
+msgctxt "LABEL"
+msgid "Private"
msgstr ""
-#: actions/accessadminpanel.php:169
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
msgstr ""
-#: actions/accessadminpanel.php:173
-#, fuzzy
-msgid "Closed"
-msgstr "無此使用者"
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
-#: actions/accessadminpanel.php:175
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
msgstr ""
-#: actions/accessadminpanel.php:189 actions/designadminpanel.php:586
-#: actions/emailsettings.php:195 actions/imsettings.php:163
-#: actions/othersettings.php:126 actions/pathsadminpanel.php:351
-#: actions/profilesettings.php:174 actions/sessionsadminpanel.php:199
-#: actions/siteadminpanel.php:336 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:293 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334 lib/designsettings.php:256
-#: lib/groupeditform.php:202
-msgid "Save"
-msgstr ""
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "無此使用者"
-#: actions/accessadminpanel.php:189
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
#, fuzzy
msgid "Save access settings"
msgstr "線上å³æ™‚通設定"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr ""
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
#, fuzzy
msgid "No such page"
msgstr "無此通知"
-#: actions/all.php:74 actions/allrss.php:68
+#: actions/all.php:75 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
#: actions/apiaccountupdateprofile.php:105
#: actions/apiaccountupdateprofilebackgroundimage.php:116
@@ -95,79 +101,88 @@ msgstr "無此通知"
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
-#: actions/microsummary.php:62 actions/newmessage.php:116 actions/otp.php:76
-#: actions/remotesubscribe.php:145 actions/remotesubscribe.php:154
-#: actions/replies.php:73 actions/repliesrss.php:38 actions/rsd.php:116
-#: actions/showfavorites.php:105 actions/userbyid.php:74
-#: actions/usergroups.php:91 actions/userrss.php:38 actions/xrds.php:71
-#: lib/command.php:163 lib/command.php:302 lib/command.php:355
-#: lib/command.php:401 lib/command.php:462 lib/command.php:518
-#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
-#: lib/subs.php:34 lib/subs.php:125
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
+#: lib/command.php:355 lib/command.php:401 lib/command.php:462
+#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
+#: lib/profileaction.php:77
msgid "No such user."
msgstr "無此使用者"
-#: actions/all.php:84
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
#, fuzzy, php-format
msgid "%1$s and friends, page %2$d"
msgstr "%s與好å‹"
-#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
msgstr "%s與好å‹"
-#: actions/all.php:99
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 1.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/all.php:107
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
#, fuzzy, php-format
msgid "Feed for friends of %s (RSS 2.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/all.php:115
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
#, fuzzy, php-format
msgid "Feed for friends of %s (Atom)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/all.php:127
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
-#: actions/all.php:132
+#: actions/all.php:139
#, php-format
msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
-#: actions/all.php:134
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:211
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
#, php-format
msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-#: actions/all.php:165
+#. TRANS: H1 text
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s與好å‹"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr ""
@@ -180,20 +195,20 @@ msgstr ""
#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:136
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:137
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:146 actions/apitimelinefriends.php:155
-#: actions/apitimelinegroup.php:150 actions/apitimelinehome.php:156
-#: actions/apitimelinementions.php:151 actions/apitimelinepublic.php:131
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:122 actions/apitimelinetag.php:141
-#: actions/apitimelineuser.php:166 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "確èªç¢¼éºå¤±"
@@ -227,8 +242,9 @@ msgstr "無法更新使用者"
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/replies.php:80
-#: actions/usergroups.php:98 lib/galleryaction.php:66 lib/profileaction.php:84
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
msgid "User has no profile."
msgstr ""
@@ -253,7 +269,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
@@ -369,68 +385,68 @@ msgstr "無法更新使用者"
msgid "Could not find target user."
msgstr "無法更新使用者"
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
#: actions/newgroup.php:126 actions/profilesettings.php:215
#: actions/register.php:205
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr "暱稱請用å°å¯«å­—æ¯æˆ–數字,勿加空格。"
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
#: actions/newgroup.php:130 actions/profilesettings.php:238
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
msgstr "此暱稱已有人使用。å†è©¦è©¦çœ‹åˆ¥çš„å§ã€‚"
-#: actions/apigroupcreate.php:180 actions/editgroup.php:189
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
#: actions/newgroup.php:133 actions/profilesettings.php:218
#: actions/register.php:210
msgid "Not a valid nickname."
msgstr ""
-#: actions/apigroupcreate.php:196 actions/editapplication.php:215
-#: actions/editgroup.php:195 actions/newapplication.php:203
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
#: actions/newgroup.php:139 actions/profilesettings.php:222
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr "個人首é ä½å€éŒ¯èª¤"
-#: actions/apigroupcreate.php:205 actions/editgroup.php:198
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
#: actions/newgroup.php:142 actions/profilesettings.php:225
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
msgstr "å…¨åéŽé•·ï¼ˆæœ€å¤š255字元)"
-#: actions/apigroupcreate.php:213 actions/editapplication.php:190
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
#: actions/newapplication.php:172
#, fuzzy, php-format
msgid "Description is too long (max %d chars)."
msgstr "自我介紹éŽé•·(å…±140個字元)"
-#: actions/apigroupcreate.php:224 actions/editgroup.php:204
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
#: actions/newgroup.php:148 actions/profilesettings.php:232
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
msgstr "地點éŽé•·ï¼ˆå…±255個字)"
-#: actions/apigroupcreate.php:243 actions/editgroup.php:215
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
msgstr ""
-#: actions/apigroupcreate.php:264 actions/editgroup.php:224
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
#: actions/newgroup.php:168
#, fuzzy, php-format
msgid "Invalid alias: \"%s\""
msgstr "個人首é é€£çµ%s無效"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
#, fuzzy, php-format
msgid "Alias \"%s\" already in use. Try another one."
msgstr "此暱稱已有人使用。å†è©¦è©¦çœ‹åˆ¥çš„å§ã€‚"
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -442,15 +458,15 @@ msgstr ""
msgid "Group not found!"
msgstr "ç›®å‰ç„¡è«‹æ±‚"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
msgid "You have been blocked from that group by the admin."
msgstr ""
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
#, fuzzy, php-format
msgid "Could not join user %1$s to group %2$s."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
@@ -460,7 +476,7 @@ msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
msgid "You are not a member of this group."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
#, fuzzy, php-format
msgid "Could not remove user %1$s from group %2$s."
msgstr "無法從 %s 建立OpenID"
@@ -492,7 +508,7 @@ msgstr "尺寸錯誤"
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupblock.php:66 actions/grouplogo.php:312
#: actions/groupunblock.php:66 actions/imsettings.php:206
#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
@@ -501,7 +517,7 @@ msgstr "尺寸錯誤"
#: actions/profilesettings.php:194 actions/recoverpassword.php:337
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
-#: actions/subscribe.php:46 actions/tagother.php:166
+#: actions/subscribe.php:86 actions/tagother.php:166
#: actions/unsubscribe.php:69 actions/userauthorization.php:52
#: lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
@@ -536,7 +552,7 @@ msgstr ""
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
-#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
#: actions/imsettings.php:220 actions/newapplication.php:121
#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
@@ -559,14 +575,14 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310 lib/action.php:441
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "關於"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94
+#: actions/showgroup.php:244 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
@@ -645,23 +661,11 @@ msgstr ""
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s的狀態是%2$s"
-#: actions/apitimelinefavorites.php:120
+#: actions/apitimelinefavorites.php:117
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "&s的微型部è½æ ¼"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -687,17 +691,17 @@ msgstr ""
msgid "Repeated to %s"
msgstr ""
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "&s的微型部è½æ ¼"
@@ -715,8 +719,7 @@ msgstr "無此文件"
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/joingroup.php:76 actions/leavegroup.php:76
-#: actions/showgroup.php:121
+#: actions/grouprss.php:91 actions/showgroup.php:121
msgid "No nickname."
msgstr "無暱稱"
@@ -728,7 +731,7 @@ msgstr "無尺寸"
msgid "Invalid size."
msgstr "尺寸錯誤"
-#: actions/avatarsettings.php:67 actions/showgroup.php:221
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "個人圖åƒ"
@@ -745,31 +748,31 @@ msgid "User without matching profile"
msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: actions/grouplogo.php:254
#, fuzzy
msgid "Avatar settings"
msgstr "線上å³æ™‚通設定"
#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
-#: actions/grouplogo.php:199 actions/grouplogo.php:259
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
msgid "Original"
msgstr ""
#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:210 actions/grouplogo.php:271
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:624
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
msgstr ""
-#: actions/avatarsettings.php:166 actions/grouplogo.php:233
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
msgid "Upload"
msgstr ""
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr ""
@@ -777,7 +780,7 @@ msgstr ""
msgid "Pick a square area of the image to be your avatar"
msgstr ""
-#: actions/avatarsettings.php:343 actions/grouplogo.php:377
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
msgid "Lost our file data."
msgstr ""
@@ -812,23 +815,23 @@ msgid ""
msgstr ""
#: actions/block.php:143 actions/deleteapplication.php:153
-#: actions/deletenotice.php:145 actions/deleteuser.php:147
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
#: actions/groupblock.php:178
msgid "No"
msgstr ""
-#: actions/block.php:143 actions/deleteuser.php:147
+#: actions/block.php:143 actions/deleteuser.php:150
#, fuzzy
msgid "Do not block this user"
msgstr "無此使用者"
#: actions/block.php:144 actions/deleteapplication.php:158
-#: actions/deletenotice.php:146 actions/deleteuser.php:148
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
#: actions/groupblock.php:179 lib/repeatform.php:132
msgid "Yes"
msgstr ""
-#: actions/block.php:144 actions/groupmembers.php:348 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "無此使用者"
@@ -837,41 +840,45 @@ msgstr "無此使用者"
msgid "Failed to save block information."
msgstr ""
-#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
-#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
-#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
-#: actions/grouplogo.php:99 actions/groupmembers.php:83
-#: actions/grouprss.php:98 actions/groupunblock.php:86
-#: actions/joingroup.php:83 actions/leavegroup.php:83 actions/makeadmin.php:86
-#: actions/showgroup.php:137 lib/command.php:212 lib/command.php:260
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
#, fuzzy
msgid "No such group."
msgstr "無此通知"
-#: actions/blockedfromgroup.php:90
+#: actions/blockedfromgroup.php:97
#, fuzzy, php-format
msgid "%s blocked profiles"
msgstr "無此通知"
-#: actions/blockedfromgroup.php:93
+#: actions/blockedfromgroup.php:100
#, fuzzy, php-format
msgid "%1$s blocked profiles, page %2$d"
msgstr "%s與好å‹"
-#: actions/blockedfromgroup.php:108
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
msgstr ""
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
#, fuzzy
msgid "Unblock user from group"
msgstr "無此使用者"
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
msgid "Unblock"
msgstr ""
-#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
#, fuzzy
msgid "Unblock this user"
msgstr "無此使用者"
@@ -930,7 +937,7 @@ msgid "Conversation"
msgstr "地點"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -952,7 +959,7 @@ msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1195
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -978,12 +985,13 @@ msgstr "無此通知"
msgid "Delete this application"
msgstr "請在140個字以內æ述你自己與你的興趣"
+#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:30
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:72 lib/profileformaction.php:63
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
#: lib/settingsaction.php:72
msgid "Not logged in."
msgstr ""
@@ -1011,7 +1019,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "無此通知"
-#: actions/deletenotice.php:146 lib/noticelist.php:624
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -1029,19 +1037,19 @@ msgstr "無此使用者"
msgid "Delete user"
msgstr ""
-#: actions/deleteuser.php:135
+#: actions/deleteuser.php:136
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
#, fuzzy
msgid "Delete this user"
msgstr "無此使用者"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -1150,6 +1158,18 @@ msgstr ""
msgid "Reset back to default"
msgstr ""
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr ""
+
#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1249,31 +1269,31 @@ msgstr ""
msgid "You must be logged in to create a group."
msgstr ""
-#: actions/editgroup.php:103 actions/editgroup.php:168
-#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
msgid "You must be an admin to edit the group."
msgstr ""
-#: actions/editgroup.php:154
+#: actions/editgroup.php:158
msgid "Use this form to edit the group."
msgstr ""
-#: actions/editgroup.php:201 actions/newgroup.php:145
+#: actions/editgroup.php:205 actions/newgroup.php:145
#, fuzzy, php-format
msgid "description is too long (max %d chars)."
msgstr "自我介紹éŽé•·(å…±140個字元)"
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
#, fuzzy
msgid "Could not update group."
msgstr "無法更新使用者"
-#: actions/editgroup.php:259 classes/User_group.php:390
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "無法存å–個人圖åƒè³‡æ–™"
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr ""
@@ -1391,7 +1411,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "此信箱無效"
@@ -1583,6 +1603,24 @@ msgstr "無此通知"
msgid "Cannot read file."
msgstr "無此通知"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "尺寸錯誤"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1612,7 +1650,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:316
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "無此使用者"
@@ -1648,94 +1686,100 @@ msgstr "查無此Jabber ID"
msgid "You must be logged in to edit a group."
msgstr ""
-#: actions/groupdesignsettings.php:141
+#: actions/groupdesignsettings.php:144
msgid "Group design"
msgstr ""
-#: actions/groupdesignsettings.php:152
+#: actions/groupdesignsettings.php:155
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "無法更新使用者"
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
-#: actions/grouplogo.php:139 actions/grouplogo.php:192
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
msgstr ""
-#: actions/grouplogo.php:150
+#: actions/grouplogo.php:153
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
msgstr ""
-#: actions/grouplogo.php:362
+#: actions/grouplogo.php:365
msgid "Pick a square area of the image to be the logo."
msgstr ""
-#: actions/grouplogo.php:396
+#: actions/grouplogo.php:399
#, fuzzy
msgid "Logo updated."
msgstr "更新個人圖åƒ"
-#: actions/grouplogo.php:398
+#: actions/grouplogo.php:401
#, fuzzy
msgid "Failed updating logo."
msgstr "無法上傳個人圖åƒ"
-#: actions/groupmembers.php:93 lib/groupnav.php:92
+#: actions/groupmembers.php:100 lib/groupnav.php:92
#, php-format
msgid "%s group members"
msgstr ""
-#: actions/groupmembers.php:96
+#: actions/groupmembers.php:103
#, php-format
msgid "%1$s group members, page %2$d"
msgstr ""
-#: actions/groupmembers.php:111
+#: actions/groupmembers.php:118
msgid "A list of the users in this group."
msgstr ""
-#: actions/groupmembers.php:175 lib/action.php:448 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:348 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:443
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:475
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
msgstr ""
-#: actions/grouprss.php:133
+#: actions/grouprss.php:138 actions/userrss.php:90
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "&s的微型部è½æ ¼"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -1974,16 +2018,18 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:178 lib/noticeform.php:236
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
msgid "Send"
msgstr ""
-#: actions/invite.php:226
+#: actions/invite.php:227
#, php-format
msgid "%1$s has invited you to join them on %2$s"
msgstr ""
-#: actions/invite.php:228
+#: actions/invite.php:229
#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
@@ -2018,7 +2064,12 @@ msgstr ""
msgid "You must be logged in to join a group."
msgstr ""
-#: actions/joingroup.php:131
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "無暱稱"
+
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -2027,11 +2078,11 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:90 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
msgstr ""
-#: actions/leavegroup.php:127
+#: actions/leavegroup.php:137
#, fuzzy, php-format
msgid "%1$s left group %2$s"
msgstr "%1$s的狀態是%2$s"
@@ -2048,8 +2099,7 @@ msgstr "使用者å稱或密碼錯誤"
msgid "Error setting user. You are probably not authorized."
msgstr ""
-#: actions/login.php:188 actions/login.php:241 lib/action.php:466
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "登入"
@@ -2292,8 +2342,8 @@ msgstr "連çµ"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1040
-#: lib/api.php:1068 lib/api.php:1178
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2439,7 +2489,8 @@ msgstr "無法存å–新密碼"
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:331
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2472,7 +2523,6 @@ msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
msgid "Site"
msgstr ""
@@ -2565,7 +2615,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2620,11 +2670,11 @@ msgstr "此信箱無效"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "&s的微型部è½æ ¼"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2647,7 +2697,7 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64個å°å¯«è‹±æ–‡å­—æ¯æˆ–數字,勿加標點符號或空格"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:247 actions/tagother.php:104
+#: actions/showgroup.php:255 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
msgstr "å…¨å"
@@ -2676,7 +2726,7 @@ msgid "Bio"
msgstr "自我介紹"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
+#: actions/showgroup.php:264 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
@@ -2701,7 +2751,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2727,7 +2777,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "自我介紹éŽé•·(å…±140個字元)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2740,25 +2790,26 @@ msgstr ""
msgid "Invalid tag: \"%s\""
msgstr "個人首é é€£çµ%s無效"
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr ""
-#: actions/profilesettings.php:359
+#: actions/profilesettings.php:363
#, fuzzy
msgid "Couldn't save location prefs."
msgstr "無法儲存個人資料"
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "無法儲存個人資料"
-#: actions/profilesettings.php:379
+#: actions/profilesettings.php:383
#, fuzzy
msgid "Couldn't save tags."
msgstr "無法儲存個人資料"
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr ""
@@ -2771,46 +2822,46 @@ msgstr ""
msgid "Could not retrieve public stream."
msgstr ""
-#: actions/public.php:129
+#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
msgstr ""
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:163
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:167
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "%s的公開內容"
-#: actions/public.php:187
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
-#: actions/public.php:190
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:194
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:241
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2819,7 +2870,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:246
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2989,8 +3040,7 @@ msgstr "確èªç¢¼ç™¼ç”ŸéŒ¯èª¤"
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:463
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -3029,7 +3079,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "é›»å­ä¿¡ç®±"
@@ -3114,7 +3164,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:365
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3153,7 +3203,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "無此使用者"
-#: actions/repeat.php:114 lib/noticelist.php:642
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "新增"
@@ -3163,47 +3213,47 @@ msgstr "新增"
msgid "Repeated!"
msgstr "新增"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
#, php-format
msgid "Replies to %s"
msgstr ""
-#: actions/replies.php:127
+#: actions/replies.php:128
#, fuzzy, php-format
msgid "Replies to %1$s, page %2$d"
msgstr "&s的微型部è½æ ¼"
-#: actions/replies.php:144
+#: actions/replies.php:145
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 1.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/replies.php:151
+#: actions/replies.php:152
#, fuzzy, php-format
msgid "Replies feed for %s (RSS 2.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/replies.php:158
+#: actions/replies.php:159
#, fuzzy, php-format
msgid "Replies feed for %s (Atom)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/replies.php:198
+#: actions/replies.php:199
#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-#: actions/replies.php:205
+#: actions/replies.php:206
#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
@@ -3215,6 +3265,15 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "&s的微型部è½æ ¼"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3229,8 +3288,9 @@ msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:336
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3254,8 +3314,8 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/useradminpanel.php:293
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
msgstr "線上å³æ™‚通設定"
@@ -3289,8 +3349,8 @@ msgstr "地點"
msgid "Description"
msgstr "所有訂閱"
-#: actions/showapplication.php:192 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3350,35 +3410,35 @@ msgstr "%s與好å‹"
msgid "Could not retrieve favorite notices."
msgstr ""
-#: actions/showfavorites.php:170
+#: actions/showfavorites.php:171
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/showfavorites.php:177
+#: actions/showfavorites.php:178
#, fuzzy, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/showfavorites.php:184
+#: actions/showfavorites.php:185
#, fuzzy, php-format
msgid "Feed for favorites of %s (Atom)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/showfavorites.php:205
+#: actions/showfavorites.php:206
msgid ""
"You haven't chosen any favorite notices yet. Click the fave button on "
"notices you like to bookmark them for later or shed a spotlight on them."
msgstr ""
-#: actions/showfavorites.php:207
+#: actions/showfavorites.php:208
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Post something interesting "
"they would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:211
+#: actions/showfavorites.php:212
#, php-format
msgid ""
"%s hasn't added any notices to his favorites yet. Why not [register an "
@@ -3386,7 +3446,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3400,70 +3460,70 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "所有訂閱"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "無此通知"
-#: actions/showgroup.php:263 actions/tagother.php:118
+#: actions/showgroup.php:271 actions/tagother.php:118
#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
msgstr ""
-#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/showgroup.php:282 actions/tagother.php:128
#: actions/userauthorization.php:187 lib/userprofile.php:194
msgid "Note"
msgstr ""
-#: actions/showgroup.php:284 lib/groupeditform.php:184
+#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:293
+#: actions/showgroup.php:301
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:328
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:334
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:340
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:345
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "無此通知"
-#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "何時加入會員的呢?"
-#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:392
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:432
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "新增"
-#: actions/showgroup.php:448
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3473,7 +3533,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:454
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3482,7 +3542,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3593,149 +3653,137 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "此信箱無效"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "查無此使用者所註冊的信箱"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "地點"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "新訊æ¯"
#: actions/smssettings.php:58
#, fuzzy
@@ -3832,21 +3880,90 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "確èªä¿¡ç®±"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "線上å³æ™‚通設定"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
-#: actions/subedit.php:83
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
#, fuzzy
msgid "Could not save subscription."
msgstr "註冊失敗"
-#: actions/subscribe.php:55
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
#, fuzzy
-msgid "Not a local user."
-msgstr "無此使用者"
+msgid "No such profile."
+msgstr "無此通知"
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
-#: actions/subscribe.php:69
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "此帳號已註冊"
@@ -3907,7 +4024,7 @@ msgstr ""
msgid "These are the people whose notices %s listens to."
msgstr ""
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3917,36 +4034,36 @@ msgid ""
"automatically subscribe to people you already follow there."
msgstr ""
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, fuzzy, php-format
msgid "%s is not listening to anyone."
msgstr "ç¾åœ¨%1$s在%2$sæˆç‚ºä½ çš„粉絲囉"
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
#, fuzzy
msgid "Jabber"
msgstr "查無此Jabber ID"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr ""
-#: actions/tag.php:68
+#: actions/tag.php:69
#, fuzzy, php-format
msgid "Notices tagged with %1$s, page %2$d"
msgstr "&s的微型部è½æ ¼"
-#: actions/tag.php:86
+#: actions/tag.php:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
msgstr ""
-#: actions/tag.php:92
+#: actions/tag.php:93
#, fuzzy, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
msgstr "發é€çµ¦%s好å‹çš„訂閱"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
msgstr ""
@@ -4000,7 +4117,7 @@ msgstr ""
msgid "No such tag."
msgstr "無此通知"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -4027,78 +4144,79 @@ msgstr "無確èªè«‹æ±‚"
msgid "Unsubscribed"
msgstr "此帳號已註冊"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: 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 ""
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
msgid "User"
msgstr ""
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
msgstr ""
-#: actions/useradminpanel.php:148
+#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
msgstr ""
-#: actions/useradminpanel.php:154
+#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
msgstr ""
-#: actions/useradminpanel.php:164
+#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
msgstr ""
-#: actions/useradminpanel.php:217 lib/accountsettingsaction.php:108
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr ""
-#: actions/useradminpanel.php:221
+#: actions/useradminpanel.php:222
msgid "Bio Limit"
msgstr ""
-#: actions/useradminpanel.php:222
+#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
msgstr ""
-#: actions/useradminpanel.php:230
+#: actions/useradminpanel.php:231
msgid "New users"
msgstr ""
-#: actions/useradminpanel.php:234
+#: actions/useradminpanel.php:235
msgid "New user welcome"
msgstr ""
-#: actions/useradminpanel.php:235
+#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
msgstr ""
-#: actions/useradminpanel.php:240
+#: actions/useradminpanel.php:241
#, fuzzy
msgid "Default subscription"
msgstr "所有訂閱"
-#: actions/useradminpanel.php:241
+#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
msgstr ""
-#: actions/useradminpanel.php:250
+#: actions/useradminpanel.php:251
#, fuzzy
msgid "Invitations"
msgstr "地點"
-#: actions/useradminpanel.php:255
+#: actions/useradminpanel.php:256
msgid "Invitations enabled"
msgstr ""
-#: actions/useradminpanel.php:257
+#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
@@ -4219,16 +4337,22 @@ msgstr "所有訂閱"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:92 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4272,7 +4396,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:747
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "地點"
@@ -4313,6 +4437,11 @@ msgstr "無法更新使用者"
msgid "Group leave failed."
msgstr "無此通知"
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "無法更新使用者"
+
#: classes/Login_token.php:76
#, fuzzy, php-format
msgid "Could not create login token for %s"
@@ -4330,70 +4459,106 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:157
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:214
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:218
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:223
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:235
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:294 classes/Notice.php:319
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:788
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:848
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "增加回覆時,資料庫發生錯誤: %s"
-
-#: classes/Notice.php:1235
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:385
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+#, fuzzy
+msgid "Not subscribed!"
+msgstr "此帳號已註冊"
+
+#: classes/Subscription.php:163
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "無法刪除帳號"
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "無法刪除帳號"
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr "無法刪除帳號"
+
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:380
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "無法存å–個人圖åƒè³‡æ–™"
-#: classes/User_group.php:409
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "註冊失敗"
+
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "註冊失敗"
+#: classes/User_group.php:521
+#, fuzzy
+msgid "Could not save local group info."
+msgstr "註冊失敗"
+
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr ""
@@ -4433,129 +4598,184 @@ msgstr "%1$s的狀態是%2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:439
-msgid "Home"
-msgstr "主é "
-
-#: lib/action.php:439
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:441
-msgid "Change your email, avatar, password, profile"
-msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "地點"
-#: lib/action.php:444
-msgid "Connect"
-msgstr "連çµ"
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr "更改密碼"
-#: lib/action.php:444
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/action.php:448
+#: lib/action.php:443
+#, fuzzy
+msgid "Connect"
+msgstr "連çµ"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr ""
+msgstr "確èªä¿¡ç®±"
-#: lib/action.php:452 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:453 lib/subgroupnav.php:106
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
#, php-format
+msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:458
-msgid "Logout"
-msgstr "登出"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "尺寸錯誤"
-#: lib/action.php:458
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:463
+#: lib/action.php:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "登出"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "新增帳號"
-#: lib/action.php:466
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "所有訂閱"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:469 lib/action.php:732
-msgid "Help"
-msgstr "求救"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "登入"
-#: lib/action.php:469
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "求救"
-#: lib/action.php:472 lib/searchaction.php:127
-msgid "Search"
-msgstr ""
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "求救"
-#: lib/action.php:472
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:493
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "新訊æ¯"
-#: lib/action.php:559
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:625
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新訊æ¯"
-#: lib/action.php:727
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:752
+msgid "Help"
+msgstr "求救"
+
+#: lib/action.php:754
msgid "About"
msgstr "關於"
-#: lib/action.php:736
+#: lib/action.php:756
msgid "FAQ"
msgstr "常見å•é¡Œ"
-#: lib/action.php:740
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:745
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:749
+#: lib/action.php:769
msgid "Contact"
msgstr "好å‹åå–®"
-#: lib/action.php:751
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:779
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4564,12 +4784,12 @@ msgstr ""
"**%%site.name%%**是由[%%site.broughtby%%](%%site.broughtbyurl%%)所æ供的微型"
"部è½æ ¼æœå‹™"
-#: lib/action.php:784
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%**是個微型部è½æ ¼"
-#: lib/action.php:786
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4577,101 +4797,155 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:801
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "新訊æ¯"
-#: lib/action.php:806
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:811
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:814
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1130
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1139
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1147
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "之å‰çš„內容»"
-#: lib/adminpanelaction.php:96
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
msgstr ""
-#: lib/adminpanelaction.php:107
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
msgstr ""
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "新訊æ¯"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/adminpanelaction.php:322
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+#, fuzzy
+msgctxt "MENU"
+msgid "Design"
+msgstr "地點"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/adminpanelaction.php:332
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/adminpanelaction.php:337
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/apiauth.php:95
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "新訊æ¯"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "確èªä¿¡ç®±"
+
+#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:273
+#: lib/apiauth.php:272
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4762,11 +5036,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:218 lib/authenticationplugin.php:223
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr ""
-#: lib/authenticationplugin.php:233
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr ""
@@ -4919,80 +5193,90 @@ msgstr "儲存使用者發生錯誤"
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554
+#: lib/command.php:554 lib/command.php:589
+#, fuzzy
+msgid "No such user"
+msgstr "無此使用者"
+
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:575
+#: lib/command.php:582 lib/command.php:685
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:582
+#: lib/command.php:595
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:600 lib/command.php:623
+#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
msgstr ""
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
msgstr ""
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:652
+#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:668
+#: lib/command.php:692
+#, fuzzy, php-format
+msgid "Unsubscribed %s"
+msgstr "此帳號已註冊"
+
+#: lib/command.php:709
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "此帳號已註冊"
-#: lib/command.php:670
+#: lib/command.php:711
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "此帳號已註冊"
-#: lib/command.php:690
+#: lib/command.php:731
#, fuzzy
msgid "No one is subscribed to you."
msgstr "無此訂閱"
-#: lib/command.php:692
+#: lib/command.php:733
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "無此訂閱"
-#: lib/command.php:712
+#: lib/command.php:753
#, fuzzy
msgid "You are not a member of any groups."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:714
+#: lib/command.php:755
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5006,6 +5290,7 @@ msgid ""
"d <nickname> <text> - direct message to user\n"
"get <nickname> - get last notice from user\n"
"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
"fav <nickname> - add user's last notice as a 'fave'\n"
"fav #<notice_id> - add notice with the given id as a 'fave'\n"
"repeat #<notice_id> - repeat a notice with a given id\n"
@@ -5033,20 +5318,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "無確èªç¢¼"
-#: lib/common.php:136
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:138
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:139
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5146,6 +5431,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+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 ""
@@ -5238,24 +5528,24 @@ msgstr ""
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
msgstr ""
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
#, fuzzy
msgid "Lost our file."
msgstr "無此通知"
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:217
+#: lib/imagefile.php:251
msgid "MB"
msgstr ""
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
msgstr ""
@@ -5469,7 +5759,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr ""
@@ -5560,6 +5850,11 @@ msgstr ""
msgid "Available characters"
msgstr "6個以上字元"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr ""
+
#: lib/noticeform.php:160
#, fuzzy
msgid "Send a notice"
@@ -5594,50 +5889,50 @@ msgid ""
"try again later"
msgstr ""
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
msgstr ""
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "S"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "E"
msgstr ""
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
msgstr ""
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
msgstr ""
-#: lib/noticelist.php:547
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "無內容"
-#: lib/noticelist.php:572
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "新增"
-#: lib/noticelist.php:598
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:599
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:641
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "更新個人圖åƒ"
@@ -5671,10 +5966,6 @@ msgstr "新增外部個人資料發生錯誤(Error inserting remote profile)"
msgid "Duplicate notice"
msgstr "新訊æ¯"
-#: lib/oauthstore.php:465 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "無法新增訂閱"
@@ -5716,7 +6007,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5724,24 +6015,24 @@ msgstr ""
msgid "All subscriptions"
msgstr "所有訂閱"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "所有訂閱"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "何時加入會員的呢?"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5784,7 +6075,12 @@ msgstr "無此通知"
msgid "Repeat this notice"
msgstr "無此通知"
-#: lib/router.php:665
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "無此使用者"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5805,6 +6101,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5858,36 +6158,15 @@ msgstr "此帳號已註冊"
msgid "Groups %s is a member of"
msgstr ""
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr ""
-
-#: lib/subs.php:63
-msgid "Could not subscribe."
+#: lib/subgroupnav.php:105
+msgid "Invite"
msgstr ""
-#: lib/subs.php:82
-msgid "Could not subscribe other to you."
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/subs.php:137
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "此帳號已註冊"
-
-#: lib/subs.php:142
-#, fuzzy
-msgid "Couldn't delete self-subscription."
-msgstr "無法刪除帳號"
-
-#: lib/subs.php:158
-msgid "Couldn't delete subscription."
-msgstr "無法刪除帳號"
-
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
@@ -5941,68 +6220,83 @@ msgstr "個人圖åƒ"
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
#, fuzzy
msgid "Edit profile settings"
msgstr "線上å³æ™‚通設定"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
msgstr ""
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
msgstr ""
-#: lib/util.php:870
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "無此通知"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:872
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:874
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:876
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:878
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:880
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:882
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:884
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:886
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:888
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/plugins/Blacklist/BlacklistPlugin.php b/plugins/Blacklist/BlacklistPlugin.php
index 84a2cb616..fb8f7306f 100644
--- a/plugins/Blacklist/BlacklistPlugin.php
+++ b/plugins/Blacklist/BlacklistPlugin.php
@@ -22,7 +22,7 @@
* @category Action
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
- * @copyright 2009 StatusNet Inc.
+ * @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/
*/
@@ -47,6 +47,55 @@ class BlacklistPlugin extends Plugin
public $nicknames = array();
public $urls = array();
+ public $canAdmin = true;
+
+ private $_nicknamePatterns = array();
+ private $_urlPatterns = array();
+
+ /**
+ * Initialize the plugin
+ *
+ * @return void
+ */
+
+ function initialize()
+ {
+ $confNicknames = $this->_configArray('blacklist', 'nicknames');
+
+ $this->_nicknamePatterns = array_merge($this->nicknames,
+ $confNicknames);
+
+ $confURLs = $this->_configArray('blacklist', 'urls');
+
+ $this->_urlPatterns = array_merge($this->urls,
+ $confURLs);
+ }
+
+ /**
+ * Retrieve an array from configuration
+ *
+ * Carefully checks a section.
+ *
+ * @param string $section Configuration section
+ * @param string $setting Configuration setting
+ *
+ * @return array configuration values
+ */
+
+ function _configArray($section, $setting)
+ {
+ $config = common_config($section, $setting);
+
+ if (empty($config)) {
+ return array();
+ } else if (is_array($config)) {
+ return $config;
+ } else if (is_string($config)) {
+ return explode("\r\n", $config);
+ } else {
+ throw new Exception("Unknown data type for config $section + $setting");
+ }
+ }
/**
* Hook registration to prevent blacklisted homepages or nicknames
@@ -173,7 +222,8 @@ class BlacklistPlugin extends Plugin
private function _checkUrl($url)
{
- foreach ($this->urls as $pattern) {
+ foreach ($this->_urlPatterns as $pattern) {
+ common_debug("Checking $url against $pattern");
if (preg_match("/$pattern/", $url)) {
return false;
}
@@ -194,7 +244,8 @@ class BlacklistPlugin extends Plugin
private function _checkNickname($nickname)
{
- foreach ($this->nicknames as $pattern) {
+ foreach ($this->_nicknamePatterns as $pattern) {
+ common_debug("Checking $nickname against $pattern");
if (preg_match("/$pattern/", $nickname)) {
return false;
}
@@ -203,14 +254,191 @@ class BlacklistPlugin extends Plugin
return true;
}
+ /**
+ * Add our actions to the URL router
+ *
+ * @param Net_URL_Mapper $m URL mapper for this hit
+ *
+ * @return boolean hook return
+ */
+
+ function onRouterInitialized($m)
+ {
+ $m->connect('admin/blacklist', array('action' => 'blacklistadminpanel'));
+ return true;
+ }
+
+ /**
+ * Auto-load our classes if called
+ *
+ * @param string $cls Class to load
+ *
+ * @return boolean hook return
+ */
+
+ function onAutoload($cls)
+ {
+ switch (strtolower($cls))
+ {
+ case 'blacklistadminpanelaction':
+ $base = strtolower(mb_substr($cls, 0, -6));
+ include_once INSTALLDIR.'/plugins/Blacklist/'.$base.'.php';
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /**
+ * Plugin version data
+ *
+ * @param array &$versions array of version blocks
+ *
+ * @return boolean hook value
+ */
+
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'Blacklist',
'version' => self::VERSION,
'author' => 'Evan Prodromou',
- 'homepage' => 'http://status.net/wiki/Plugin:Blacklist',
+ 'homepage' =>
+ 'http://status.net/wiki/Plugin:Blacklist',
'description' =>
- _m('Keep a blacklist of forbidden nickname and URL patterns.'));
+ _m('Keep a blacklist of forbidden nickname '.
+ 'and URL patterns.'));
+ return true;
+ }
+
+ /**
+ * Determines if our admin panel can be shown
+ *
+ * @param string $name name of the admin panel
+ * @param boolean &$isOK result
+ *
+ * @return boolean hook value
+ */
+
+ function onAdminPanelCheck($name, &$isOK)
+ {
+ if ($name == 'blacklist') {
+ $isOK = $this->canAdmin;
+ return false;
+ }
+
return true;
}
+
+ /**
+ * Add our tab to the admin panel
+ *
+ * @param Widget $nav Admin panel nav
+ *
+ * @return boolean hook value
+ */
+
+ function onEndAdminPanelNav($nav)
+ {
+ if (AdminPanelAction::canAdmin('blacklist')) {
+
+ $action_name = $nav->action->trimmed('action');
+
+ $nav->out->menuItem(common_local_url('blacklistadminpanel'),
+ _('Blacklist'),
+ _('Blacklist configuration'),
+ $action_name == 'blacklistadminpanel',
+ 'nav_blacklist_admin_panel');
+ }
+
+ return true;
+ }
+
+ function onEndDeleteUserForm($action, $user)
+ {
+ $cur = common_current_user();
+
+ if (empty($cur) || !$cur->hasRight(Right::CONFIGURESITE)) {
+ return;
+ }
+
+ $profile = $user->getProfile();
+
+ if (empty($profile)) {
+ return;
+ }
+
+ $action->elementStart('ul', 'form_data');
+ $action->elementStart('li');
+ $this->checkboxAndText($action,
+ 'blacklistnickname',
+ _('Add this nickname pattern to blacklist'),
+ 'blacklistnicknamepattern',
+ $this->patternizeNickname($user->nickname));
+ $action->elementEnd('li');
+
+ if (!empty($profile->homepage)) {
+ $action->elementStart('li');
+ $this->checkboxAndText($action,
+ 'blacklisthomepage',
+ _('Add this homepage pattern to blacklist'),
+ 'blacklisthomepagepattern',
+ $this->patternizeHomepage($profile->homepage));
+ $action->elementEnd('li');
+ }
+
+ $action->elementEnd('ul');
+ }
+
+ function onEndDeleteUser($action, $user)
+ {
+ common_debug("Action args: " . print_r($action->args, true));
+
+ if ($action->boolean('blacklisthomepage')) {
+ $pattern = $action->trimmed('blacklisthomepagepattern');
+ $confURLs = $this->_configArray('blacklist', 'urls');
+ $confURLs[] = $pattern;
+ Config::save('blacklist', 'urls', implode("\r\n", $confURLs));
+ }
+
+ if ($action->boolean('blacklistnickname')) {
+ $pattern = $action->trimmed('blacklistnicknamepattern');
+ $confNicknames = $this->_configArray('blacklist', 'nicknames');
+ $confNicknames[] = $pattern;
+ Config::save('blacklist', 'nicknames', implode("\r\n", $confNicknames));
+ }
+
+ return true;
+ }
+
+ function checkboxAndText($action, $checkID, $label, $textID, $value)
+ {
+ $action->element('input', array('name' => $checkID,
+ 'type' => 'checkbox',
+ 'class' => 'checkbox',
+ 'id' => $checkID));
+
+ $action->text(' ');
+
+ $action->element('label', array('class' => 'checkbox',
+ 'for' => $checkID),
+ $label);
+
+ $action->text(' ');
+
+ $action->element('input', array('name' => $textID,
+ 'type' => 'text',
+ 'id' => $textID,
+ 'value' => $value));
+ }
+
+ function patternizeNickname($nickname)
+ {
+ return $nickname;
+ }
+
+ function patternizeHomepage($homepage)
+ {
+ $hostname = parse_url($homepage, PHP_URL_HOST);
+ return $hostname;
+ }
}
diff --git a/plugins/Blacklist/blacklistadminpanel.php b/plugins/Blacklist/blacklistadminpanel.php
new file mode 100644
index 000000000..98d07080d
--- /dev/null
+++ b/plugins/Blacklist/blacklistadminpanel.php
@@ -0,0 +1,222 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Blacklist administration panel
+ *
+ * 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 Settings
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Administer blacklist
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class BlacklistadminpanelAction extends AdminPanelAction
+{
+ /**
+ * title of the admin panel
+ *
+ * @return string title
+ */
+
+ function title()
+ {
+ return _('Blacklist');
+ }
+
+ /**
+ * Panel instructions
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _('Blacklisted URLs and nicknames');
+ }
+
+ /**
+ * Show the actual form
+ *
+ * @return void
+ *
+ * @see BlacklistAdminPanelForm
+ */
+
+ function showForm()
+ {
+ $form = new BlacklistAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save the form settings
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $settings = array(
+ 'blacklist' => array('nicknames', 'urls'),
+ );
+
+ $values = array();
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting] = $this->trimmed("$section-$setting");
+ }
+ }
+
+ // This throws an exception on validation errors
+
+ $this->validate($values);
+
+ // assert(all values are valid);
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+ /**
+ * Validate the values
+ *
+ * @param array &$values 2d array of values to check
+ *
+ * @return boolean success flag
+ */
+
+ function validate(&$values)
+ {
+ return true;
+ }
+}
+
+/**
+ * Admin panel form for blacklist panel
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class BlacklistAdminPanelForm extends Form
+{
+ /**
+ * ID of the form
+ *
+ * @return string ID
+ */
+
+ function id()
+ {
+ return 'blacklistadminpanel';
+ }
+
+ /**
+ * Class of the form
+ *
+ * @return string class
+ */
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ /**
+ * Action we post to
+ *
+ * @return string action URL
+ */
+
+ function action()
+ {
+ return common_local_url('blacklistadminpanel');
+ }
+
+ /**
+ * Show the form controls
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->out->elementStart('li');
+ $this->out->textarea('blacklist-nicknames', _m('Nicknames'),
+ common_config('blacklist', 'nicknames'),
+ _('Patterns of nicknames to block, one per line'));
+ $this->out->elementEnd('li');
+
+ $this->out->elementStart('li');
+ $this->out->textarea('blacklist-urls', _m('URLs'),
+ common_config('blacklist', 'urls'),
+ _('Patterns of URLs to block, one per line'));
+ $this->out->elementEnd('li');
+
+ $this->out->elementEnd('ul');
+ }
+
+ /**
+ * Buttons for submitting
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('submit',
+ _('Save'),
+ 'submit',
+ null,
+ _('Save site settings'));
+ }
+}
diff --git a/plugins/BlogspamNetPlugin.php b/plugins/BlogspamNetPlugin.php
index 51236001a..d52e6006a 100644
--- a/plugins/BlogspamNetPlugin.php
+++ b/plugins/BlogspamNetPlugin.php
@@ -72,8 +72,10 @@ class BlogspamNetPlugin extends Plugin
common_debug("Blogspamnet args = " . print_r($args, TRUE));
$requestBody = xmlrpc_encode_request('testComment', array($args));
- $request = HTTPClient::start();
- $httpResponse = $request->post($this->baseUrl, array('Content-Type: text/xml'), $requestBody);
+ $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)) {
@@ -118,7 +120,7 @@ class BlogspamNetPlugin extends Plugin
$args['site'] = common_root_url();
$args['version'] = $this->userAgent();
- $args['options'] = "max-size=140,min-size=0,min-words=0,exclude=bayasian";
+ $args['options'] = "max-size=" . common_config('site','textlimit') . ",min-size=0,min-words=0,exclude=bayasian";
return $args;
}
diff --git a/plugins/CasAuthentication/CasAuthenticationPlugin.php b/plugins/CasAuthentication/CasAuthenticationPlugin.php
index 483b060ab..203e5fe42 100644
--- a/plugins/CasAuthentication/CasAuthenticationPlugin.php
+++ b/plugins/CasAuthentication/CasAuthenticationPlugin.php
@@ -137,6 +137,7 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
$casSettings['server']=$this->server;
$casSettings['port']=$this->port;
$casSettings['path']=$this->path;
+ $casSettings['takeOverLogin']=$this->takeOverLogin;
}
function onPluginVersion(&$versions)
diff --git a/plugins/CasAuthentication/caslogin.php b/plugins/CasAuthentication/caslogin.php
index 390a75d8b..a66774dc1 100644
--- a/plugins/CasAuthentication/caslogin.php
+++ b/plugins/CasAuthentication/caslogin.php
@@ -54,9 +54,18 @@ class CasloginAction extends Action
// We don't have to return to it again
common_set_returnto(null);
} else {
- $url = common_local_url('all',
- array('nickname' =>
- $user->nickname));
+ if(common_config('site', 'private') && $casSettings['takeOverLogin']) {
+ //SSO users expect to just go to the URL they entered
+ //if we don't have a returnto set, the user entered the
+ //main StatusNet url, so send them there.
+ $url = common_local_url('public');
+ } else {
+ //With normal logins (regular form-based username/password),
+ //the user would expect to go to their home after logging in.
+ $url = common_local_url('public',
+ array('nickname' =>
+ $user->nickname));
+ }
}
common_redirect($url, 303);
diff --git a/plugins/CasAuthentication/extlib/CAS.php b/plugins/CasAuthentication/extlib/CAS.php
index f5ea0b12a..e75437419 100644
--- a/plugins/CasAuthentication/extlib/CAS.php
+++ b/plugins/CasAuthentication/extlib/CAS.php
@@ -1,1471 +1,1615 @@
-<?php
-
-// commented in 0.4.22-RC2 for Sylvain Derosiaux
-// error_reporting(E_ALL ^ E_NOTICE);
-
-//
-// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
-//
-if (!$_SERVER['REQUEST_URI']) {
- $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
-}
-
-//
-// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
-//
-if (version_compare(PHP_VERSION,'5','>=')) {
- require_once(dirname(__FILE__).'/CAS/domxml-php4-php5.php');
-}
-
-/**
- * @file CAS/CAS.php
- * Interface class of the phpCAS library
- *
- * @ingroup public
- */
-
-// ########################################################################
-// CONSTANTS
-// ########################################################################
-
-// ------------------------------------------------------------------------
-// CAS VERSIONS
-// ------------------------------------------------------------------------
-
-/**
- * phpCAS version. accessible for the user by phpCAS::getVersion().
- */
-define('PHPCAS_VERSION','1.0.1');
-
-// ------------------------------------------------------------------------
-// CAS VERSIONS
-// ------------------------------------------------------------------------
- /**
- * @addtogroup public
- * @{
- */
-
-/**
- * CAS version 1.0
- */
-define("CAS_VERSION_1_0",'1.0');
-/*!
- * CAS version 2.0
- */
-define("CAS_VERSION_2_0",'2.0');
-
-/** @} */
- /**
- * @addtogroup publicPGTStorage
- * @{
- */
-// ------------------------------------------------------------------------
-// FILE PGT STORAGE
-// ------------------------------------------------------------------------
- /**
- * Default path used when storing PGT's to file
- */
-define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
-/**
- * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files
- */
-define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
-/**
- * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files
- */
-define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
-/**
- * Default format used when storing PGT's to file
- */
-define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
-// ------------------------------------------------------------------------
-// DATABASE PGT STORAGE
-// ------------------------------------------------------------------------
- /**
- * default database type when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
-/**
- * default host when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
-/**
- * default port when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
-/**
- * default database when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
-/**
- * default table when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
-
-/** @} */
-// ------------------------------------------------------------------------
-// SERVICE ACCESS ERRORS
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicServices
- * @{
- */
-
-/**
- * phpCAS::service() error code on success
- */
-define("PHPCAS_SERVICE_OK",0);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not respond.
- */
-define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the response of the CAS server was ill-formed.
- */
-define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not want to.
- */
-define("PHPCAS_SERVICE_PT_FAILURE",3);
-/**
- * phpCAS::service() error code when the service was not available.
- */
-define("PHPCAS_SERVICE_NOT AVAILABLE",4);
-
-/** @} */
-// ------------------------------------------------------------------------
-// LANGUAGES
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicLang
- * @{
- */
-
-define("PHPCAS_LANG_ENGLISH", 'english');
-define("PHPCAS_LANG_FRENCH", 'french');
-define("PHPCAS_LANG_GREEK", 'greek');
-define("PHPCAS_LANG_GERMAN", 'german');
-define("PHPCAS_LANG_JAPANESE", 'japanese');
-define("PHPCAS_LANG_SPANISH", 'spanish');
-define("PHPCAS_LANG_CATALAN", 'catalan');
-
-/** @} */
-
-/**
- * @addtogroup internalLang
- * @{
- */
-
-/**
- * phpCAS default language (when phpCAS::setLang() is not used)
- */
-define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
-
-/** @} */
-// ------------------------------------------------------------------------
-// DEBUG
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicDebug
- * @{
- */
-
-/**
- * The default directory for the debug file under Unix.
- */
-define('DEFAULT_DEBUG_DIR','/tmp/');
-
-/** @} */
-// ------------------------------------------------------------------------
-// MISC
-// ------------------------------------------------------------------------
- /**
- * @addtogroup internalMisc
- * @{
- */
-
-/**
- * This global variable is used by the interface class phpCAS.
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_CLIENT'] = null;
-
-/**
- * This global variable is used to store where the initializer is called from
- * (to print a comprehensive error in case of multiple calls).
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_INIT_CALL'] = array('done' => FALSE,
- 'file' => '?',
- 'line' => -1,
- 'method' => '?');
-
-/**
- * This global variable is used to store where the method checking
- * the authentication is called from (to print comprehensive errors)
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_AUTH_CHECK_CALL'] = array('done' => FALSE,
- 'file' => '?',
- 'line' => -1,
- 'method' => '?',
- 'result' => FALSE);
-
-/**
- * This global variable is used to store phpCAS debug mode.
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_DEBUG'] = array('filename' => FALSE,
- 'indent' => 0,
- 'unique_id' => '');
-
-/** @} */
-
-// ########################################################################
-// CLIENT CLASS
-// ########################################################################
-
-// include client class
-include_once(dirname(__FILE__).'/CAS/client.php');
-
-// ########################################################################
-// INTERFACE CLASS
-// ########################################################################
-
-/**
- * @class phpCAS
- * The phpCAS class is a simple container for the phpCAS library. It provides CAS
- * authentication for web applications written in PHP.
- *
- * @ingroup public
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * \internal All its methods access the same object ($PHPCAS_CLIENT, declared
- * at the end of CAS/client.php).
- */
-
-
-
-class phpCAS
-{
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * @addtogroup publicInit
- * @{
- */
-
- /**
- * phpCAS client initializer.
- * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
- * called, only once, and before all other methods (except phpCAS::getVersion()
- * and phpCAS::setDebug()).
- *
- * @param $server_version the version of the CAS server
- * @param $server_hostname the hostname of the CAS server
- * @param $server_port the port the CAS server is running on
- * @param $server_uri the URI the CAS server is responding on
- * @param $start_session Have phpCAS start PHP sessions (default true)
- *
- * @return a newly created CASClient object
- */
- function client($server_version,
- $server_hostname,
- $server_port,
- $server_uri,
- $start_session = true)
- {
- global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
-
- phpCAS::traceBegin();
- if ( is_object($PHPCAS_CLIENT) ) {
- phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
- }
- if ( gettype($server_version) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
- }
- if ( gettype($server_hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
- }
- if ( gettype($server_port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
- }
- if ( gettype($server_uri) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
- }
-
- // store where the initialzer is called from
- $dbg = phpCAS::backtrace();
- $PHPCAS_INIT_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__);
-
- // initialize the global object $PHPCAS_CLIENT
- $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
- phpCAS::traceEnd();
- }
-
- /**
- * phpCAS proxy initializer.
- * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
- * called, only once, and before all other methods (except phpCAS::getVersion()
- * and phpCAS::setDebug()).
- *
- * @param $server_version the version of the CAS server
- * @param $server_hostname the hostname of the CAS server
- * @param $server_port the port the CAS server is running on
- * @param $server_uri the URI the CAS server is responding on
- * @param $start_session Have phpCAS start PHP sessions (default true)
- *
- * @return a newly created CASClient object
- */
- function proxy($server_version,
- $server_hostname,
- $server_port,
- $server_uri,
- $start_session = true)
- {
- global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
-
- phpCAS::traceBegin();
- if ( is_object($PHPCAS_CLIENT) ) {
- phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
- }
- if ( gettype($server_version) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
- }
- if ( gettype($server_hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
- }
- if ( gettype($server_port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
- }
- if ( gettype($server_uri) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
- }
-
- // store where the initialzer is called from
- $dbg = phpCAS::backtrace();
- $PHPCAS_INIT_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__);
-
- // initialize the global object $PHPCAS_CLIENT
- $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
- phpCAS::traceEnd();
- }
-
- /** @} */
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * @addtogroup publicDebug
- * @{
- */
-
- /**
- * Set/unset debug mode
- *
- * @param $filename the name of the file used for logging, or FALSE to stop debugging.
- */
- function setDebug($filename='')
- {
- global $PHPCAS_DEBUG;
-
- if ( $filename != FALSE && gettype($filename) != 'string' ) {
- phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
- }
-
- if ( empty($filename) ) {
- if ( preg_match('/^Win.*/',getenv('OS')) ) {
- if ( isset($_ENV['TMP']) ) {
- $debugDir = $_ENV['TMP'].'/';
- } else if ( isset($_ENV['TEMP']) ) {
- $debugDir = $_ENV['TEMP'].'/';
- } else {
- $debugDir = '';
- }
- } else {
- $debugDir = DEFAULT_DEBUG_DIR;
- }
- $filename = $debugDir . 'phpCAS.log';
- }
-
- if ( empty($PHPCAS_DEBUG['unique_id']) ) {
- $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4);
- }
-
- $PHPCAS_DEBUG['filename'] = $filename;
-
- phpCAS::trace('START ******************');
- }
-
- /** @} */
- /**
- * @addtogroup internalDebug
- * @{
- */
-
- /**
- * This method is a wrapper for debug_backtrace() that is not available
- * in all PHP versions (>= 4.3.0 only)
- */
- function backtrace()
- {
- if ( function_exists('debug_backtrace') ) {
- return debug_backtrace();
- } else {
- // poor man's hack ... but it does work ...
- return array();
- }
- }
-
- /**
- * Logs a string in debug mode.
- *
- * @param $str the string to write
- *
- * @private
- */
- function log($str)
- {
- $indent_str = ".";
- global $PHPCAS_DEBUG;
-
- if ( $PHPCAS_DEBUG['filename'] ) {
- for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
- $indent_str .= '| ';
- }
- error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
- }
-
- }
-
- /**
- * This method is used by interface methods to print an error and where the function
- * was originally called from.
- *
- * @param $msg the message to print
- *
- * @private
- */
- function error($msg)
- {
- $dbg = phpCAS::backtrace();
- $function = '?';
- $file = '?';
- $line = '?';
- if ( is_array($dbg) ) {
- for ( $i=1; $i<sizeof($dbg); $i++) {
- if ( is_array($dbg[$i]) ) {
- if ( $dbg[$i]['class'] == __CLASS__ ) {
- $function = $dbg[$i]['function'];
- $file = $dbg[$i]['file'];
- $line = $dbg[$i]['line'];
- }
- }
- }
- }
- echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>".__CLASS__."::".$function.'(): '.htmlentities($msg)."</b></font> in <b>".$file."</b> on line <b>".$line."</b><br />\n";
- phpCAS::trace($msg);
- phpCAS::traceExit();
- exit();
- }
-
- /**
- * This method is used to log something in debug mode.
- */
- function trace($str)
- {
- $dbg = phpCAS::backtrace();
- phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
- }
-
- /**
- * This method is used to indicate the start of the execution of a function in debug mode.
- */
- function traceBegin()
- {
- global $PHPCAS_DEBUG;
-
- $dbg = phpCAS::backtrace();
- $str = '=> ';
- if ( !empty($dbg[2]['class']) ) {
- $str .= $dbg[2]['class'].'::';
- }
- $str .= $dbg[2]['function'].'(';
- if ( is_array($dbg[2]['args']) ) {
- foreach ($dbg[2]['args'] as $index => $arg) {
- if ( $index != 0 ) {
- $str .= ', ';
- }
- $str .= str_replace("\n","",var_export($arg,TRUE));
- }
- }
- $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
- phpCAS::log($str);
- $PHPCAS_DEBUG['indent'] ++;
- }
-
- /**
- * This method is used to indicate the end of the execution of a function in debug mode.
- *
- * @param $res the result of the function
- */
- function traceEnd($res='')
- {
- global $PHPCAS_DEBUG;
-
- $PHPCAS_DEBUG['indent'] --;
- $dbg = phpCAS::backtrace();
- $str = '';
- $str .= '<= '.str_replace("\n","",var_export($res,TRUE));
- phpCAS::log($str);
- }
-
- /**
- * This method is used to indicate the end of the execution of the program
- */
- function traceExit()
- {
- global $PHPCAS_DEBUG;
-
- phpCAS::log('exit()');
- while ( $PHPCAS_DEBUG['indent'] > 0 ) {
- phpCAS::log('-');
- $PHPCAS_DEBUG['indent'] --;
- }
- }
-
- /** @} */
- // ########################################################################
- // INTERNATIONALIZATION
- // ########################################################################
- /**
- * @addtogroup publicLang
- * @{
- */
-
- /**
- * This method is used to set the language used by phpCAS.
- * @note Can be called only once.
- *
- * @param $lang a string representing the language.
- *
- * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
- */
- function setLang($lang)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($lang) != 'string' ) {
- phpCAS::error('type mismatched for parameter $lang (should be `string\')');
- }
- $PHPCAS_CLIENT->setLang($lang);
- }
-
- /** @} */
- // ########################################################################
- // VERSION
- // ########################################################################
- /**
- * @addtogroup public
- * @{
- */
-
- /**
- * This method returns the phpCAS version.
- *
- * @return the phpCAS version.
- */
- function getVersion()
- {
- return PHPCAS_VERSION;
- }
-
- /** @} */
- // ########################################################################
- // HTML OUTPUT
- // ########################################################################
- /**
- * @addtogroup publicOutput
- * @{
- */
-
- /**
- * This method sets the HTML header used for all outputs.
- *
- * @param $header the HTML header.
- */
- function setHTMLHeader($header)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($header) != 'string' ) {
- phpCAS::error('type mismatched for parameter $header (should be `string\')');
- }
- $PHPCAS_CLIENT->setHTMLHeader($header);
- }
-
- /**
- * This method sets the HTML footer used for all outputs.
- *
- * @param $footer the HTML footer.
- */
- function setHTMLFooter($footer)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($footer) != 'string' ) {
- phpCAS::error('type mismatched for parameter $footer (should be `string\')');
- }
- $PHPCAS_CLIENT->setHTMLFooter($footer);
- }
-
- /** @} */
- // ########################################################################
- // PGT STORAGE
- // ########################################################################
- /**
- * @addtogroup publicPGTStorage
- * @{
- */
-
- /**
- * This method is used to tell phpCAS to store the response of the
- * CAS server to PGT requests onto the filesystem.
- *
- * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
- * @param $path the path where the PGT's should be stored
- */
- function setPGTStorageFile($format='',
- $path='')
- {
- global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
- }
- if ( gettype($format) != 'string' ) {
- phpCAS::error('type mismatched for parameter $format (should be `string\')');
- }
- if ( gettype($path) != 'string' ) {
- phpCAS::error('type mismatched for parameter $format (should be `string\')');
- }
- $PHPCAS_CLIENT->setPGTStorageFile($format,$path);
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to tell phpCAS to store the response of the
- * CAS server to PGT requests into a database.
- * @note The connection to the database is done only when needed.
- * As a consequence, bad parameters are detected only when
- * initializing PGT storage, except in debug mode.
- *
- * @param $user the user to access the data with
- * @param $password the user's password
- * @param $database_type the type of the database hosting the data
- * @param $hostname the server hosting the database
- * @param $port the port the server is listening on
- * @param $database the name of the database
- * @param $table the name of the table storing the data
- */
- function setPGTStorageDB($user,
- $password,
- $database_type='',
- $hostname='',
- $port=0,
- $database='',
- $table='')
- {
- global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
- }
- if ( gettype($user) != 'string' ) {
- phpCAS::error('type mismatched for parameter $user (should be `string\')');
- }
- if ( gettype($password) != 'string' ) {
- phpCAS::error('type mismatched for parameter $password (should be `string\')');
- }
- if ( gettype($database_type) != 'string' ) {
- phpCAS::error('type mismatched for parameter $database_type (should be `string\')');
- }
- if ( gettype($hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $hostname (should be `string\')');
- }
- if ( gettype($port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $port (should be `integer\')');
- }
- if ( gettype($database) != 'string' ) {
- phpCAS::error('type mismatched for parameter $database (should be `string\')');
- }
- if ( gettype($table) != 'string' ) {
- phpCAS::error('type mismatched for parameter $table (should be `string\')');
- }
- $PHPCAS_CLIENT->setPGTStorageDB($this,$user,$password,$hostname,$port,$database,$table);
- phpCAS::traceEnd();
- }
-
- /** @} */
- // ########################################################################
- // ACCESS TO EXTERNAL SERVICES
- // ########################################################################
- /**
- * @addtogroup publicServices
- * @{
- */
-
- /**
- * This method is used to access an HTTP[S] service.
- *
- * @param $url the service to access.
- * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
- * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
- * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
- * @param $output the output of the service (also used to give an error
- * message on failure).
- *
- * @return TRUE on success, FALSE otherwise (in this later case, $err_code
- * gives the reason why it failed and $output contains an error message).
- */
- function serviceWeb($url,&$err_code,&$output)
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
-
- $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
-
- phpCAS::traceEnd($res);
- return $res;
- }
-
- /**
- * This method is used to access an IMAP/POP3/NNTP service.
- *
- * @param $url a string giving the URL of the service, including the mailing box
- * for IMAP URLs, as accepted by imap_open().
- * @param $flags options given to imap_open().
- * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
- * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
- * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
- * @param $err_msg an error message on failure
- * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
- * on success, FALSE on error).
- *
- * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
- * gives the reason why it failed and $err_msg contains an error message).
- */
- function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
-
- if ( gettype($flags) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $flags (should be `integer\')');
- }
-
- $res = $PHPCAS_CLIENT->serviceMail($url,$flags,$err_code,$err_msg,$pt);
-
- phpCAS::traceEnd($res);
- return $res;
- }
-
- /** @} */
- // ########################################################################
- // AUTHENTICATION
- // ########################################################################
- /**
- * @addtogroup publicAuth
- * @{
- */
-
- /**
- * Set the times authentication will be cached before really accessing the CAS server in gateway mode:
- * - -1: check only once, and then never again (until you pree login)
- * - 0: always check
- * - n: check every "n" time
- *
- * @param $n an integer.
- */
- function setCacheTimesForAuthRecheck($n)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($n) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $header (should be `string\')');
- }
- $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
- }
-
- /**
- * This method is called to check if the user is authenticated (use the gateway feature).
- * @return TRUE when the user is authenticated; otherwise FALSE.
- */
- function checkAuthentication()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- $auth = $PHPCAS_CLIENT->checkAuthentication();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
- phpCAS::traceEnd($auth);
- return $auth;
- }
-
- /**
- * This method is called to force authentication if the user was not already
- * authenticated. If the user is not authenticated, halt by redirecting to
- * the CAS server.
- */
- function forceAuthentication()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- $auth = $PHPCAS_CLIENT->forceAuthentication();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
-
- if ( !$auth ) {
- phpCAS::trace('user is not authenticated, redirecting to the CAS server');
- $PHPCAS_CLIENT->forceAuthentication();
- } else {
- phpCAS::trace('no need to authenticate (user `'.phpCAS::getUser().'\' is already authenticated)');
- }
-
- phpCAS::traceEnd();
- return $auth;
- }
-
- /**
- * This method is called to renew the authentication.
- **/
- function renewAuthentication() {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before'.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__, 'result' => $auth );
-
- $PHPCAS_CLIENT->renewAuthentication();
- phpCAS::traceEnd();
- }
-
- /**
- * This method has been left from version 0.4.1 for compatibility reasons.
- */
- function authenticate()
- {
- phpCAS::error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
- }
-
- /**
- * This method is called to check if the user is authenticated (previously or by
- * tickets given in the URL).
- *
- * @return TRUE when the user is authenticated.
- */
- function isAuthenticated()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- // call the isAuthenticated method of the global $PHPCAS_CLIENT object
- $auth = $PHPCAS_CLIENT->isAuthenticated();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
- phpCAS::traceEnd($auth);
- return $auth;
- }
-
- /**
- * Checks whether authenticated based on $_SESSION. Useful to avoid
- * server calls.
- * @return true if authenticated, false otherwise.
- * @since 0.4.22 by Brendan Arnold
- */
- function isSessionAuthenticated ()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->isSessionAuthenticated());
- }
-
- /**
- * This method returns the CAS user's login name.
- * @warning should not be called only after phpCAS::forceAuthentication()
- * or phpCAS::checkAuthentication().
- *
- * @return the login name of the authenticated user
- */
- function getUser()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- return $PHPCAS_CLIENT->getUser();
- }
-
- /**
- * Handle logout requests.
- */
- function handleLogoutRequests($check_client=true, $allowed_clients=false)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
- }
-
- /**
- * This method returns the URL to be used to login.
- * or phpCAS::isAuthenticated().
- *
- * @return the login name of the authenticated user
- */
- function getServerLoginURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return $PHPCAS_CLIENT->getServerLoginURL();
- }
-
- /**
- * Set the login URL of the CAS server.
- * @param $url the login URL
- * @since 0.4.21 by Wyman Chan
- */
- function setServerLoginURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after
- '.__CLASS__.'::client()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be
- `string\')');
- }
- $PHPCAS_CLIENT->setServerLoginURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * This method returns the URL to be used to login.
- * or phpCAS::isAuthenticated().
- *
- * @return the login name of the authenticated user
- */
- function getServerLogoutURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return $PHPCAS_CLIENT->getServerLogoutURL();
- }
-
- /**
- * Set the logout URL of the CAS server.
- * @param $url the logout URL
- * @since 0.4.21 by Wyman Chan
- */
- function setServerLogoutURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after
- '.__CLASS__.'::client()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be
- `string\')');
- }
- $PHPCAS_CLIENT->setServerLogoutURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS.
- * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
- * @public
- */
- function logout($params = "") {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if (!is_object($PHPCAS_CLIENT)) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $parsedParams = array();
- if ($params != "") {
- if (is_string($params)) {
- phpCAS::error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
- }
- if (!is_array($params)) {
- phpCAS::error('type mismatched for parameter $params (should be `array\')');
- }
- foreach ($params as $key => $value) {
- if ($key != "service" && $key != "url") {
- phpCAS::error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
- }
- $parsedParams[$key] = $value;
- }
- }
- $PHPCAS_CLIENT->logout($parsedParams);
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $service a URL that will be transmitted to the CAS server
- */
- function logoutWithRedirectService($service) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($service)) {
- phpCAS::error('type mismatched for parameter $service (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("service" => $service));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $url a URL that will be transmitted to the CAS server
- */
- function logoutWithUrl($url) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($url)) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("url" => $url));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $service a URL that will be transmitted to the CAS server
- * @param $url a URL that will be transmitted to the CAS server
- */
- function logoutWithRedirectServiceAndUrl($service, $url) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($service)) {
- phpCAS::error('type mismatched for parameter $service (should be `string\')');
- }
- if (!is_string($url)) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("service" => $service, "url" => $url));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * Set the fixed URL that will be used by the CAS server to transmit the PGT.
- * When this method is not called, a phpCAS script uses its own URL for the callback.
- *
- * @param $url the URL
- */
- function setFixedCallbackURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->setCallbackURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * Set the fixed URL that will be set as the CAS service parameter. When this
- * method is not called, a phpCAS script uses its own URL.
- *
- * @param $url the URL
- */
- function setFixedServiceURL($url)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->setURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * Get the URL that is set as the CAS service parameter.
- */
- function getServiceURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->getURL());
- }
-
- /**
- * Retrieve a Proxy Ticket from the CAS server.
- */
- function retrievePT($target_service,&$err_code,&$err_msg)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($target_service) != 'string' ) {
- phpCAS::error('type mismatched for parameter $target_service(should be `string\')');
- }
- return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
- }
-
- /**
- * Set the certificate of the CAS server.
- *
- * @param $cert the PEM certificate
- */
- function setCasServerCert($cert)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if ( gettype($cert) != 'string' ) {
- phpCAS::error('type mismatched for parameter $cert (should be `string\')');
- }
- $PHPCAS_CLIENT->setCasServerCert($cert);
- phpCAS::traceEnd();
- }
-
- /**
- * Set the certificate of the CAS server CA.
- *
- * @param $cert the CA certificate
- */
- function setCasServerCACert($cert)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if ( gettype($cert) != 'string' ) {
- phpCAS::error('type mismatched for parameter $cert (should be `string\')');
- }
- $PHPCAS_CLIENT->setCasServerCACert($cert);
- phpCAS::traceEnd();
- }
-
- /**
- * Set no SSL validation for the CAS server.
- */
- function setNoCasServerValidation()
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $PHPCAS_CLIENT->setNoCasServerValidation();
- phpCAS::traceEnd();
- }
-
- /** @} */
-
- /**
- * Change CURL options.
- * CURL is used to connect through HTTPS to CAS server
- * @param $key the option key
- * @param $value the value to set
- */
- function setExtraCurlOption($key, $value)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $PHPCAS_CLIENT->setExtraCurlOption($key, $value);
- phpCAS::traceEnd();
- }
-
-}
-
-// ########################################################################
-// DOCUMENTATION
-// ########################################################################
-
-// ########################################################################
-// MAIN PAGE
-
-/**
- * @mainpage
- *
- * The following pages only show the source documentation.
- *
- */
-
-// ########################################################################
-// MODULES DEFINITION
-
-/** @defgroup public User interface */
-
-/** @defgroup publicInit Initialization
- * @ingroup public */
-
-/** @defgroup publicAuth Authentication
- * @ingroup public */
-
-/** @defgroup publicServices Access to external services
- * @ingroup public */
-
-/** @defgroup publicConfig Configuration
- * @ingroup public */
-
-/** @defgroup publicLang Internationalization
- * @ingroup publicConfig */
-
-/** @defgroup publicOutput HTML output
- * @ingroup publicConfig */
-
-/** @defgroup publicPGTStorage PGT storage
- * @ingroup publicConfig */
-
-/** @defgroup publicDebug Debugging
- * @ingroup public */
-
-
-/** @defgroup internal Implementation */
-
-/** @defgroup internalAuthentication Authentication
- * @ingroup internal */
-
-/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
- * @ingroup internal */
-
-/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
- * @ingroup internal */
-
-/** @defgroup internalPGTStorage PGT storage
- * @ingroup internalProxy */
-
-/** @defgroup internalPGTStorageDB PGT storage in a database
- * @ingroup internalPGTStorage */
-
-/** @defgroup internalPGTStorageFile PGT storage on the filesystem
- * @ingroup internalPGTStorage */
-
-/** @defgroup internalCallback Callback from the CAS server
- * @ingroup internalProxy */
-
-/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
- * @ingroup internal */
-
-/** @defgroup internalConfig Configuration
- * @ingroup internal */
-
-/** @defgroup internalOutput HTML output
- * @ingroup internalConfig */
-
-/** @defgroup internalLang Internationalization
- * @ingroup internalConfig
- *
- * To add a new language:
- * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
- * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
- * - 3. Make the translations
- */
-
-/** @defgroup internalDebug Debugging
- * @ingroup internal */
-
-/** @defgroup internalMisc Miscellaneous
- * @ingroup internal */
-
-// ########################################################################
-// EXAMPLES
-
-/**
- * @example example_simple.php
- */
- /**
- * @example example_proxy.php
- */
- /**
- * @example example_proxy2.php
- */
- /**
- * @example example_lang.php
- */
- /**
- * @example example_html.php
- */
- /**
- * @example example_file.php
- */
- /**
- * @example example_db.php
- */
- /**
- * @example example_service.php
- */
- /**
- * @example example_session_proxy.php
- */
- /**
- * @example example_session_service.php
- */
- /**
- * @example example_gateway.php
- */
-
-
-
-?>
+<?php
+
+// commented in 0.4.22-RC2 for Sylvain Derosiaux
+// error_reporting(E_ALL ^ E_NOTICE);
+
+//
+// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
+//
+if (!$_SERVER['REQUEST_URI']) {
+ $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
+}
+
+//
+// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
+//
+if (version_compare(PHP_VERSION,'5','>=')) {
+ require_once(dirname(__FILE__).'/CAS/domxml-php4-to-php5.php');
+}
+
+/**
+ * @file CAS/CAS.php
+ * Interface class of the phpCAS library
+ *
+ * @ingroup public
+ */
+
+// ########################################################################
+// CONSTANTS
+// ########################################################################
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+
+/**
+ * phpCAS version. accessible for the user by phpCAS::getVersion().
+ */
+define('PHPCAS_VERSION','1.1.0RC6');
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+/**
+ * CAS version 1.0
+ */
+define("CAS_VERSION_1_0",'1.0');
+/*!
+ * CAS version 2.0
+ */
+define("CAS_VERSION_2_0",'2.0');
+
+// ------------------------------------------------------------------------
+// SAML defines
+// ------------------------------------------------------------------------
+
+/**
+ * SAML protocol
+ */
+define("SAML_VERSION_1_1", 'S1');
+
+/**
+ * XML header for SAML POST
+ */
+define("SAML_XML_HEADER", '<?xml version="1.0" encoding="UTF-8"?>');
+
+/**
+ * SOAP envelope for SAML POST
+ */
+define ("SAML_SOAP_ENV", '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>');
+
+/**
+ * SOAP body for SAML POST
+ */
+define ("SAML_SOAP_BODY", '<SOAP-ENV:Body>');
+
+/**
+ * SAMLP request
+ */
+define ("SAMLP_REQUEST", '<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" MajorVersion="1" MinorVersion="1" RequestID="_192.168.16.51.1024506224022" IssueInstant="2002-06-19T17:03:44.022Z">');
+define ("SAMLP_REQUEST_CLOSE", '</samlp:Request>');
+
+/**
+ * SAMLP artifact tag (for the ticket)
+ */
+define ("SAML_ASSERTION_ARTIFACT", '<samlp:AssertionArtifact>');
+
+/**
+ * SAMLP close
+ */
+define ("SAML_ASSERTION_ARTIFACT_CLOSE", '</samlp:AssertionArtifact>');
+
+/**
+ * SOAP body close
+ */
+define ("SAML_SOAP_BODY_CLOSE", '</SOAP-ENV:Body>');
+
+/**
+ * SOAP envelope close
+ */
+define ("SAML_SOAP_ENV_CLOSE", '</SOAP-ENV:Envelope>');
+
+/**
+ * SAML Attributes
+ */
+define("SAML_ATTRIBUTES", 'SAMLATTRIBS');
+
+
+
+/** @} */
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+// ------------------------------------------------------------------------
+// FILE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * Default path used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
+/**
+ * Default format used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
+// ------------------------------------------------------------------------
+// DATABASE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * default database type when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
+/**
+ * default host when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
+/**
+ * default port when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
+/**
+ * default database when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
+/**
+ * default table when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
+
+/** @} */
+// ------------------------------------------------------------------------
+// SERVICE ACCESS ERRORS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+/**
+ * phpCAS::service() error code on success
+ */
+define("PHPCAS_SERVICE_OK",0);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not respond.
+ */
+define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the response of the CAS server was ill-formed.
+ */
+define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not want to.
+ */
+define("PHPCAS_SERVICE_PT_FAILURE",3);
+/**
+ * phpCAS::service() error code when the service was not available.
+ */
+define("PHPCAS_SERVICE_NOT AVAILABLE",4);
+
+/** @} */
+// ------------------------------------------------------------------------
+// LANGUAGES
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+define("PHPCAS_LANG_ENGLISH", 'english');
+define("PHPCAS_LANG_FRENCH", 'french');
+define("PHPCAS_LANG_GREEK", 'greek');
+define("PHPCAS_LANG_GERMAN", 'german');
+define("PHPCAS_LANG_JAPANESE", 'japanese');
+define("PHPCAS_LANG_SPANISH", 'spanish');
+define("PHPCAS_LANG_CATALAN", 'catalan');
+
+/** @} */
+
+/**
+ * @addtogroup internalLang
+ * @{
+ */
+
+/**
+ * phpCAS default language (when phpCAS::setLang() is not used)
+ */
+define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
+
+/** @} */
+// ------------------------------------------------------------------------
+// DEBUG
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+/**
+ * The default directory for the debug file under Unix.
+ */
+define('DEFAULT_DEBUG_DIR','/tmp/');
+
+/** @} */
+// ------------------------------------------------------------------------
+// MISC
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup internalMisc
+ * @{
+ */
+
+/**
+ * This global variable is used by the interface class phpCAS.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_CLIENT'] = null;
+
+/**
+ * This global variable is used to store where the initializer is called from
+ * (to print a comprehensive error in case of multiple calls).
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_INIT_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?');
+
+/**
+ * This global variable is used to store where the method checking
+ * the authentication is called from (to print comprehensive errors)
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_AUTH_CHECK_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?',
+ 'result' => FALSE);
+
+/**
+ * This global variable is used to store phpCAS debug mode.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_DEBUG'] = array('filename' => FALSE,
+ 'indent' => 0,
+ 'unique_id' => '');
+
+/** @} */
+
+// ########################################################################
+// CLIENT CLASS
+// ########################################################################
+
+// include client class
+include_once(dirname(__FILE__).'/CAS/client.php');
+
+// ########################################################################
+// INTERFACE CLASS
+// ########################################################################
+
+/**
+ * @class phpCAS
+ * The phpCAS class is a simple container for the phpCAS library. It provides CAS
+ * authentication for web applications written in PHP.
+ *
+ * @ingroup public
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * \internal All its methods access the same object ($PHPCAS_CLIENT, declared
+ * at the end of CAS/client.php).
+ */
+
+
+
+class phpCAS
+{
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * @addtogroup publicInit
+ * @{
+ */
+
+ /**
+ * phpCAS client initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function client($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initializer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * phpCAS proxy initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function proxy($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initialzer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+ /**
+ * Set/unset debug mode
+ *
+ * @param $filename the name of the file used for logging, or FALSE to stop debugging.
+ */
+ function setDebug($filename='')
+ {
+ global $PHPCAS_DEBUG;
+
+ if ( $filename != FALSE && gettype($filename) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
+ }
+
+ if ( empty($filename) ) {
+ if ( preg_match('/^Win.*/',getenv('OS')) ) {
+ if ( isset($_ENV['TMP']) ) {
+ $debugDir = $_ENV['TMP'].'/';
+ } else if ( isset($_ENV['TEMP']) ) {
+ $debugDir = $_ENV['TEMP'].'/';
+ } else {
+ $debugDir = '';
+ }
+ } else {
+ $debugDir = DEFAULT_DEBUG_DIR;
+ }
+ $filename = $debugDir . 'phpCAS.log';
+ }
+
+ if ( empty($PHPCAS_DEBUG['unique_id']) ) {
+ $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4);
+ }
+
+ $PHPCAS_DEBUG['filename'] = $filename;
+
+ phpCAS::trace('START ******************');
+ }
+
+ /** @} */
+ /**
+ * @addtogroup internalDebug
+ * @{
+ */
+
+ /**
+ * This method is a wrapper for debug_backtrace() that is not available
+ * in all PHP versions (>= 4.3.0 only)
+ */
+ function backtrace()
+ {
+ if ( function_exists('debug_backtrace') ) {
+ return debug_backtrace();
+ } else {
+ // poor man's hack ... but it does work ...
+ return array();
+ }
+ }
+
+ /**
+ * Logs a string in debug mode.
+ *
+ * @param $str the string to write
+ *
+ * @private
+ */
+ function log($str)
+ {
+ $indent_str = ".";
+ global $PHPCAS_DEBUG;
+
+ if ( $PHPCAS_DEBUG['filename'] ) {
+ for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
+ $indent_str .= '| ';
+ }
+ error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
+ }
+
+ }
+
+ /**
+ * This method is used by interface methods to print an error and where the function
+ * was originally called from.
+ *
+ * @param $msg the message to print
+ *
+ * @private
+ */
+ function error($msg)
+ {
+ $dbg = phpCAS::backtrace();
+ $function = '?';
+ $file = '?';
+ $line = '?';
+ if ( is_array($dbg) ) {
+ for ( $i=1; $i<sizeof($dbg); $i++) {
+ if ( is_array($dbg[$i]) ) {
+ if ( $dbg[$i]['class'] == __CLASS__ ) {
+ $function = $dbg[$i]['function'];
+ $file = $dbg[$i]['file'];
+ $line = $dbg[$i]['line'];
+ }
+ }
+ }
+ }
+ echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>".__CLASS__."::".$function.'(): '.htmlentities($msg)."</b></font> in <b>".$file."</b> on line <b>".$line."</b><br />\n";
+ phpCAS::trace($msg);
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /**
+ * This method is used to log something in debug mode.
+ */
+ function trace($str)
+ {
+ $dbg = phpCAS::backtrace();
+ phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
+ }
+
+ /**
+ * This method is used to indicate the start of the execution of a function in debug mode.
+ */
+ function traceBegin()
+ {
+ global $PHPCAS_DEBUG;
+
+ $dbg = phpCAS::backtrace();
+ $str = '=> ';
+ if ( !empty($dbg[2]['class']) ) {
+ $str .= $dbg[2]['class'].'::';
+ }
+ $str .= $dbg[2]['function'].'(';
+ if ( is_array($dbg[2]['args']) ) {
+ foreach ($dbg[2]['args'] as $index => $arg) {
+ if ( $index != 0 ) {
+ $str .= ', ';
+ }
+ $str .= str_replace("\n","",var_export($arg,TRUE));
+ }
+ }
+ $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
+ phpCAS::log($str);
+ $PHPCAS_DEBUG['indent'] ++;
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of a function in debug mode.
+ *
+ * @param $res the result of the function
+ */
+ function traceEnd($res='')
+ {
+ global $PHPCAS_DEBUG;
+
+ $PHPCAS_DEBUG['indent'] --;
+ $dbg = phpCAS::backtrace();
+ $str = '';
+ $str .= '<= '.str_replace("\n","",var_export($res,TRUE));
+ phpCAS::log($str);
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of the program
+ */
+ function traceExit()
+ {
+ global $PHPCAS_DEBUG;
+
+ phpCAS::log('exit()');
+ while ( $PHPCAS_DEBUG['indent'] > 0 ) {
+ phpCAS::log('-');
+ $PHPCAS_DEBUG['indent'] --;
+ }
+ }
+
+ /** @} */
+ // ########################################################################
+ // INTERNATIONALIZATION
+ // ########################################################################
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+ /**
+ * This method is used to set the language used by phpCAS.
+ * @note Can be called only once.
+ *
+ * @param $lang a string representing the language.
+ *
+ * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
+ */
+ function setLang($lang)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($lang) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $lang (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setLang($lang);
+ }
+
+ /** @} */
+ // ########################################################################
+ // VERSION
+ // ########################################################################
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+ /**
+ * This method returns the phpCAS version.
+ *
+ * @return the phpCAS version.
+ */
+ function getVersion()
+ {
+ return PHPCAS_VERSION;
+ }
+
+ /** @} */
+ // ########################################################################
+ // HTML OUTPUT
+ // ########################################################################
+ /**
+ * @addtogroup publicOutput
+ * @{
+ */
+
+ /**
+ * This method sets the HTML header used for all outputs.
+ *
+ * @param $header the HTML header.
+ */
+ function setHTMLHeader($header)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($header) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLHeader($header);
+ }
+
+ /**
+ * This method sets the HTML footer used for all outputs.
+ *
+ * @param $footer the HTML footer.
+ */
+ function setHTMLFooter($footer)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($footer) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $footer (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLFooter($footer);
+ }
+
+ /** @} */
+ // ########################################################################
+ // PGT STORAGE
+ // ########################################################################
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests onto the filesystem.
+ *
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
+ * @param $path the path where the PGT's should be stored
+ */
+ function setPGTStorageFile($format='',
+ $path='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($format) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ if ( gettype($path) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageFile($format,$path);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests into a database.
+ * @note The connection to the database is done only when needed.
+ * As a consequence, bad parameters are detected only when
+ * initializing PGT storage, except in debug mode.
+ *
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ */
+ function setPGTStorageDB($user,
+ $password,
+ $database_type='',
+ $hostname='',
+ $port=0,
+ $database='',
+ $table='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($user) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $user (should be `string\')');
+ }
+ if ( gettype($password) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $password (should be `string\')');
+ }
+ if ( gettype($database_type) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database_type (should be `string\')');
+ }
+ if ( gettype($hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $hostname (should be `string\')');
+ }
+ if ( gettype($port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $port (should be `integer\')');
+ }
+ if ( gettype($database) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database (should be `string\')');
+ }
+ if ( gettype($table) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $table (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageDB($user,$password,$database_type,$hostname,$port,$database,$table);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // ACCESS TO EXTERNAL SERVICES
+ // ########################################################################
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+ /**
+ * This method is used to access an HTTP[S] service.
+ *
+ * @param $url the service to access.
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $output the output of the service (also used to give an error
+ * message on failure).
+ *
+ * @return TRUE on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $output contains an error message).
+ */
+ function serviceWeb($url,&$err_code,&$output)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is used to access an IMAP/POP3/NNTP service.
+ *
+ * @param $url a string giving the URL of the service, including the mailing box
+ * for IMAP URLs, as accepted by imap_open().
+ * @param $service a string giving for CAS retrieve Proxy ticket
+ * @param $flags options given to imap_open().
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $err_msg an error message on failure
+ * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
+ * on success, FALSE on error).
+ *
+ * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $err_msg contains an error message).
+ */
+ function serviceMail($url,$service,$flags,&$err_code,&$err_msg,&$pt)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ if ( gettype($flags) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $flags (should be `integer\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceMail($url,$service,$flags,$err_code,$err_msg,$pt);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /** @} */
+ // ########################################################################
+ // AUTHENTICATION
+ // ########################################################################
+ /**
+ * @addtogroup publicAuth
+ * @{
+ */
+
+ /**
+ * Set the times authentication will be cached before really accessing the CAS server in gateway mode:
+ * - -1: check only once, and then never again (until you pree login)
+ * - 0: always check
+ * - n: check every "n" time
+ *
+ * @param $n an integer.
+ */
+ function setCacheTimesForAuthRecheck($n)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($n) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (use the gateway feature).
+ * @return TRUE when the user is authenticated; otherwise FALSE.
+ */
+ function checkAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->checkAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * This method is called to force authentication if the user was not already
+ * authenticated. If the user is not authenticated, halt by redirecting to
+ * the CAS server.
+ */
+ function forceAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->forceAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+
+ if ( !$auth ) {
+ phpCAS::trace('user is not authenticated, redirecting to the CAS server');
+ $PHPCAS_CLIENT->forceAuthentication();
+ } else {
+ phpCAS::trace('no need to authenticate (user `'.phpCAS::getUser().'\' is already authenticated)');
+ }
+
+ phpCAS::traceEnd();
+ return $auth;
+ }
+
+ /**
+ * This method is called to renew the authentication.
+ **/
+ function renewAuthentication() {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before'.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__, 'result' => $auth );
+
+ $PHPCAS_CLIENT->renewAuthentication();
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method has been left from version 0.4.1 for compatibility reasons.
+ */
+ function authenticate()
+ {
+ phpCAS::error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (previously or by
+ * tickets given in the URL).
+ *
+ * @return TRUE when the user is authenticated.
+ */
+ function isAuthenticated()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // call the isAuthenticated method of the global $PHPCAS_CLIENT object
+ $auth = $PHPCAS_CLIENT->isAuthenticated();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * Checks whether authenticated based on $_SESSION. Useful to avoid
+ * server calls.
+ * @return true if authenticated, false otherwise.
+ * @since 0.4.22 by Brendan Arnold
+ */
+ function isSessionAuthenticated ()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->isSessionAuthenticated());
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should not be called only after phpCAS::forceAuthentication()
+ * or phpCAS::checkAuthentication().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getUser()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ return $PHPCAS_CLIENT->getUser();
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should not be called only after phpCAS::forceAuthentication()
+ * or phpCAS::checkAuthentication().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getAttributes()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ return $PHPCAS_CLIENT->getAttributes();
+ }
+ /**
+ * Handle logout requests.
+ */
+ function handleLogoutRequests($check_client=true, $allowed_clients=false)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLoginURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLoginURL();
+ }
+
+ /**
+ * Set the login URL of the CAS server.
+ * @param $url the login URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLoginURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLoginURL($url);
+ phpCAS::traceEnd();
+ }
+
+
+ /**
+ * Set the serviceValidate URL of the CAS server.
+ * @param $url the serviceValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerServiceValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerServiceValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+
+ /**
+ * Set the proxyValidate URL of the CAS server.
+ * @param $url the proxyValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerProxyValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerProxyValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the samlValidate URL of the CAS server.
+ * @param $url the samlValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerSamlValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerSamlValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLogoutURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLogoutURL();
+ }
+
+ /**
+ * Set the logout URL of the CAS server.
+ * @param $url the logout URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLogoutURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLogoutURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS.
+ * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
+ * @public
+ */
+ function logout($params = "") {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if (!is_object($PHPCAS_CLIENT)) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $parsedParams = array();
+ if ($params != "") {
+ if (is_string($params)) {
+ phpCAS::error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
+ }
+ if (!is_array($params)) {
+ phpCAS::error('type mismatched for parameter $params (should be `array\')');
+ }
+ foreach ($params as $key => $value) {
+ if ($key != "service" && $key != "url") {
+ phpCAS::error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
+ }
+ $parsedParams[$key] = $value;
+ }
+ }
+ $PHPCAS_CLIENT->logout($parsedParams);
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectService($service) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithUrl($url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectServiceAndUrl($service, $url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service, "url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be used by the CAS server to transmit the PGT.
+ * When this method is not called, a phpCAS script uses its own URL for the callback.
+ *
+ * @param $url the URL
+ */
+ function setFixedCallbackURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCallbackURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be set as the CAS service parameter. When this
+ * method is not called, a phpCAS script uses its own URL.
+ *
+ * @param $url the URL
+ */
+ function setFixedServiceURL($url)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Get the URL that is set as the CAS service parameter.
+ */
+ function getServiceURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->getURL());
+ }
+
+ /**
+ * Retrieve a Proxy Ticket from the CAS server.
+ */
+ function retrievePT($target_service,&$err_code,&$err_msg)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($target_service) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $target_service(should be `string\')');
+ }
+ return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
+ }
+
+ /**
+ * Set the certificate of the CAS server.
+ *
+ * @param $cert the PEM certificate
+ */
+ function setCasServerCert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the certificate of the CAS server CA.
+ *
+ * @param $cert the CA certificate
+ */
+ function setCasServerCACert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCACert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set no SSL validation for the CAS server.
+ */
+ function setNoCasServerValidation()
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setNoCasServerValidation();
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+
+ /**
+ * Change CURL options.
+ * CURL is used to connect through HTTPS to CAS server
+ * @param $key the option key
+ * @param $value the value to set
+ */
+ function setExtraCurlOption($key, $value)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setExtraCurlOption($key, $value);
+ phpCAS::traceEnd();
+ }
+
+}
+
+// ########################################################################
+// DOCUMENTATION
+// ########################################################################
+
+// ########################################################################
+// MAIN PAGE
+
+/**
+ * @mainpage
+ *
+ * The following pages only show the source documentation.
+ *
+ */
+
+// ########################################################################
+// MODULES DEFINITION
+
+/** @defgroup public User interface */
+
+/** @defgroup publicInit Initialization
+ * @ingroup public */
+
+/** @defgroup publicAuth Authentication
+ * @ingroup public */
+
+/** @defgroup publicServices Access to external services
+ * @ingroup public */
+
+/** @defgroup publicConfig Configuration
+ * @ingroup public */
+
+/** @defgroup publicLang Internationalization
+ * @ingroup publicConfig */
+
+/** @defgroup publicOutput HTML output
+ * @ingroup publicConfig */
+
+/** @defgroup publicPGTStorage PGT storage
+ * @ingroup publicConfig */
+
+/** @defgroup publicDebug Debugging
+ * @ingroup public */
+
+
+/** @defgroup internal Implementation */
+
+/** @defgroup internalAuthentication Authentication
+ * @ingroup internal */
+
+/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalPGTStorage PGT storage
+ * @ingroup internalProxy */
+
+/** @defgroup internalPGTStorageDB PGT storage in a database
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalPGTStorageFile PGT storage on the filesystem
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalCallback Callback from the CAS server
+ * @ingroup internalProxy */
+
+/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalConfig Configuration
+ * @ingroup internal */
+
+/** @defgroup internalOutput HTML output
+ * @ingroup internalConfig */
+
+/** @defgroup internalLang Internationalization
+ * @ingroup internalConfig
+ *
+ * To add a new language:
+ * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
+ * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
+ * - 3. Make the translations
+ */
+
+/** @defgroup internalDebug Debugging
+ * @ingroup internal */
+
+/** @defgroup internalMisc Miscellaneous
+ * @ingroup internal */
+
+// ########################################################################
+// EXAMPLES
+
+/**
+ * @example example_simple.php
+ */
+ /**
+ * @example example_proxy.php
+ */
+ /**
+ * @example example_proxy2.php
+ */
+ /**
+ * @example example_lang.php
+ */
+ /**
+ * @example example_html.php
+ */
+ /**
+ * @example example_file.php
+ */
+ /**
+ * @example example_db.php
+ */
+ /**
+ * @example example_service.php
+ */
+ /**
+ * @example example_session_proxy.php
+ */
+ /**
+ * @example example_session_service.php
+ */
+ /**
+ * @example example_gateway.php
+ */
+
+
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
index 00797b9c5..5a589e4b2 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
@@ -1,190 +1,190 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-db.php
- * Basic class for PGT database storage
- */
-
-/**
- * @class PGTStorageDB
- * The PGTStorageDB class is a class for PGT database storage. An instance of
- * this class is returned by CASClient::SetPGTStorageDB().
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorageDB
- */
-
-class PGTStorageDB extends PGTStorage
-{
- /**
- * @addtogroup internalPGTStorageDB
- * @{
- */
-
- /**
- * a string representing a PEAR DB URL to connect to the database. Written by
- * PGTStorageDB::PGTStorageDB(), read by getURL().
- *
- * @hideinitializer
- * @private
- */
- var $_url='';
-
- /**
- * This method returns the PEAR DB URL to use to connect to the database.
- *
- * @return a PEAR DB URL
- *
- * @private
- */
- function getURL()
- {
- return $this->_url;
- }
-
- /**
- * The handle of the connection to the database where PGT's are stored. Written by
- * PGTStorageDB::init(), read by getLink().
- *
- * @hideinitializer
- * @private
- */
- var $_link = null;
-
- /**
- * This method returns the handle of the connection to the database where PGT's are
- * stored.
- *
- * @return a handle of connection.
- *
- * @private
- */
- function getLink()
- {
- return $this->_link;
- }
-
- /**
- * The name of the table where PGT's are stored. Written by
- * PGTStorageDB::PGTStorageDB(), read by getTable().
- *
- * @hideinitializer
- * @private
- */
- var $_table = '';
-
- /**
- * This method returns the name of the table where PGT's are stored.
- *
- * @return the name of a table.
- *
- * @private
- */
- function getTable()
- {
- return $this->_table;
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageType()
- {
- return "database";
- }
-
- /**
- * This method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @public
- */
- function getStorageInfo()
- {
- return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
- }
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The class constructor, called by CASClient::SetPGTStorageDB().
- *
- * @param $cas_parent the CASClient instance that creates the object.
- * @param $user the user to access the data with
- * @param $password the user's password
- * @param $database_type the type of the database hosting the data
- * @param $hostname the server hosting the database
- * @param $port the port the server is listening on
- * @param $database the name of the database
- * @param $table the name of the table storing the data
- *
- * @public
- */
- function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
- {
- phpCAS::traceBegin();
-
- // call the ancestor's constructor
- $this->PGTStorage($cas_parent);
-
- if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
- if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
- if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
- if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
- if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
-
- // build and store the PEAR DB URL
- $this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
-
- // XXX should use setURL and setTable
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * This method is used to initialize the storage. Halts on error.
- *
- * @public
- */
- function init()
- {
- phpCAS::traceBegin();
- // if the storage has already been initialized, return immediatly
- if ( $this->isInitialized() )
- return;
- // call the ancestor's method (mark as initialized)
- parent::init();
-
- //include phpDB library (the test was introduced in release 0.4.8 for
- //the integration into Tikiwiki).
- if (!class_exists('DB')) {
- include_once('DB.php');
- }
-
- // try to connect to the database
- $this->_link = DB::connect($this->getURL());
- if ( DB::isError($this->_link) ) {
- phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
- }
- var_dump($this->_link);
- phpCAS::traceBEnd();
- }
-
- /** @} */
-}
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-db.php
+ * Basic class for PGT database storage
+ */
+
+/**
+ * @class PGTStorageDB
+ * The PGTStorageDB class is a class for PGT database storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageDB().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageDB
+ */
+
+class PGTStorageDB extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageDB
+ * @{
+ */
+
+ /**
+ * a string representing a PEAR DB URL to connect to the database. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_url='';
+
+ /**
+ * This method returns the PEAR DB URL to use to connect to the database.
+ *
+ * @return a PEAR DB URL
+ *
+ * @private
+ */
+ function getURL()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * The handle of the connection to the database where PGT's are stored. Written by
+ * PGTStorageDB::init(), read by getLink().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_link = null;
+
+ /**
+ * This method returns the handle of the connection to the database where PGT's are
+ * stored.
+ *
+ * @return a handle of connection.
+ *
+ * @private
+ */
+ function getLink()
+ {
+ return $this->_link;
+ }
+
+ /**
+ * The name of the table where PGT's are stored. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getTable().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_table = '';
+
+ /**
+ * This method returns the name of the table where PGT's are stored.
+ *
+ * @return the name of a table.
+ *
+ * @private
+ */
+ function getTable()
+ {
+ return $this->_table;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "database";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageDB().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ *
+ * @public
+ */
+ function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
+ {
+ phpCAS::traceBegin();
+
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
+ if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
+ if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
+ if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
+ if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
+
+ // build and store the PEAR DB URL
+ $this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
+
+ // XXX should use setURL and setTable
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+
+ //include phpDB library (the test was introduced in release 0.4.8 for
+ //the integration into Tikiwiki).
+ if (!class_exists('DB')) {
+ include_once('DB.php');
+ }
+
+ // try to connect to the database
+ $this->_link = DB::connect($this->getURL());
+ if ( DB::isError($this->_link) ) {
+ phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
+ }
+ var_dump($this->_link);
+ phpCAS::traceBEnd();
+ }
+
+ /** @} */
+}
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
index d48a60d67..bc07485b8 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
@@ -1,249 +1,249 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-file.php
- * Basic class for PGT file storage
- */
-
-/**
- * @class PGTStorageFile
- * The PGTStorageFile class is a class for PGT file storage. An instance of
- * this class is returned by CASClient::SetPGTStorageFile().
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorageFile
- */
-
-class PGTStorageFile extends PGTStorage
-{
- /**
- * @addtogroup internalPGTStorageFile
- * @{
- */
-
- /**
- * a string telling where PGT's should be stored on the filesystem. Written by
- * PGTStorageFile::PGTStorageFile(), read by getPath().
- *
- * @private
- */
- var $_path;
-
- /**
- * This method returns the name of the directory where PGT's should be stored
- * on the filesystem.
- *
- * @return the name of a directory (with leading and trailing '/')
- *
- * @private
- */
- function getPath()
- {
- return $this->_path;
- }
-
- /**
- * a string telling the format to use to store PGT's (plain or xml). Written by
- * PGTStorageFile::PGTStorageFile(), read by getFormat().
- *
- * @private
- */
- var $_format;
-
- /**
- * This method returns the format to use when storing PGT's on the filesystem.
- *
- * @return a string corresponding to the format used (plain or xml).
- *
- * @private
- */
- function getFormat()
- {
- return $this->_format;
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageType()
- {
- return "file";
- }
-
- /**
- * This method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageInfo()
- {
- return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
- }
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The class constructor, called by CASClient::SetPGTStorageFile().
- *
- * @param $cas_parent the CASClient instance that creates the object.
- * @param $format the format used to store the PGT's (`plain' and `xml' allowed).
- * @param $path the path where the PGT's should be stored
- *
- * @public
- */
- function PGTStorageFile($cas_parent,$format,$path)
- {
- phpCAS::traceBegin();
- // call the ancestor's constructor
- $this->PGTStorage($cas_parent);
-
- if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
- if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
-
- // check that the path is an absolute path
- if (getenv("OS")=="Windows_NT"){
-
- if (!preg_match('`^[a-zA-Z]:`', $path)) {
- phpCAS::error('an absolute path is needed for PGT storage to file');
- }
-
- }
- else
- {
-
- if ( $path[0] != '/' ) {
- phpCAS::error('an absolute path is needed for PGT storage to file');
- }
-
- // store the path (with a leading and trailing '/')
- $path = preg_replace('|[/]*$|','/',$path);
- $path = preg_replace('|^[/]*|','/',$path);
- }
-
- $this->_path = $path;
- // check the format and store it
- switch ($format) {
- case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
- case CAS_PGT_STORAGE_FILE_FORMAT_XML:
- $this->_format = $format;
- break;
- default:
- phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
- }
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * This method is used to initialize the storage. Halts on error.
- *
- * @public
- */
- function init()
- {
- phpCAS::traceBegin();
- // if the storage has already been initialized, return immediatly
- if ( $this->isInitialized() )
- return;
- // call the ancestor's method (mark as initialized)
- parent::init();
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // PGT I/O
- // ########################################################################
-
- /**
- * This method returns the filename corresponding to a PGT Iou.
- *
- * @param $pgt_iou the PGT iou.
- *
- * @return a filename
- * @private
- */
- function getPGTIouFilename($pgt_iou)
- {
- phpCAS::traceBegin();
- $filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
- phpCAS::traceEnd($filename);
- return $filename;
- }
-
- /**
- * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
- * warning on error.
- *
- * @param $pgt the PGT
- * @param $pgt_iou the PGT iou
- *
- * @public
- */
- function write($pgt,$pgt_iou)
- {
- phpCAS::traceBegin();
- $fname = $this->getPGTIouFilename($pgt_iou);
- if ( $f=fopen($fname,"w") ) {
- if ( fputs($f,$pgt) === FALSE ) {
- phpCAS::error('could not write PGT to `'.$fname.'\'');
- }
- fclose($f);
- } else {
- phpCAS::error('could not open `'.$fname.'\'');
- }
- phpCAS::traceEnd();
- }
-
- /**
- * This method reads a PGT corresponding to a PGT Iou and deletes the
- * corresponding file.
- *
- * @param $pgt_iou the PGT iou
- *
- * @return the corresponding PGT, or FALSE on error
- *
- * @public
- */
- function read($pgt_iou)
- {
- phpCAS::traceBegin();
- $pgt = FALSE;
- $fname = $this->getPGTIouFilename($pgt_iou);
- if ( !($f=fopen($fname,"r")) ) {
- phpCAS::trace('could not open `'.$fname.'\'');
- } else {
- if ( ($pgt=fgets($f)) === FALSE ) {
- phpCAS::trace('could not read PGT from `'.$fname.'\'');
- }
- fclose($f);
- }
-
- // delete the PGT file
- @unlink($fname);
-
- phpCAS::traceEnd($pgt);
- return $pgt;
- }
-
- /** @} */
-
-}
-
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-file.php
+ * Basic class for PGT file storage
+ */
+
+/**
+ * @class PGTStorageFile
+ * The PGTStorageFile class is a class for PGT file storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageFile().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageFile
+ */
+
+class PGTStorageFile extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageFile
+ * @{
+ */
+
+ /**
+ * a string telling where PGT's should be stored on the filesystem. Written by
+ * PGTStorageFile::PGTStorageFile(), read by getPath().
+ *
+ * @private
+ */
+ var $_path;
+
+ /**
+ * This method returns the name of the directory where PGT's should be stored
+ * on the filesystem.
+ *
+ * @return the name of a directory (with leading and trailing '/')
+ *
+ * @private
+ */
+ function getPath()
+ {
+ return $this->_path;
+ }
+
+ /**
+ * a string telling the format to use to store PGT's (plain or xml). Written by
+ * PGTStorageFile::PGTStorageFile(), read by getFormat().
+ *
+ * @private
+ */
+ var $_format;
+
+ /**
+ * This method returns the format to use when storing PGT's on the filesystem.
+ *
+ * @return a string corresponding to the format used (plain or xml).
+ *
+ * @private
+ */
+ function getFormat()
+ {
+ return $this->_format;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "file";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageFile().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed).
+ * @param $path the path where the PGT's should be stored
+ *
+ * @public
+ */
+ function PGTStorageFile($cas_parent,$format,$path)
+ {
+ phpCAS::traceBegin();
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
+ if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
+
+ // check that the path is an absolute path
+ if (getenv("OS")=="Windows_NT"){
+
+ if (!preg_match('`^[a-zA-Z]:`', $path)) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ }
+ else
+ {
+
+ if ( $path[0] != '/' ) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ // store the path (with a leading and trailing '/')
+ $path = preg_replace('|[/]*$|','/',$path);
+ $path = preg_replace('|^[/]*|','/',$path);
+ }
+
+ $this->_path = $path;
+ // check the format and store it
+ switch ($format) {
+ case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
+ case CAS_PGT_STORAGE_FILE_FORMAT_XML:
+ $this->_format = $format;
+ break;
+ default:
+ phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This method returns the filename corresponding to a PGT Iou.
+ *
+ * @param $pgt_iou the PGT iou.
+ *
+ * @return a filename
+ * @private
+ */
+ function getPGTIouFilename($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
+ phpCAS::traceEnd($filename);
+ return $filename;
+ }
+
+ /**
+ * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
+ * warning on error.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @public
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( $f=fopen($fname,"w") ) {
+ if ( fputs($f,$pgt) === FALSE ) {
+ phpCAS::error('could not write PGT to `'.$fname.'\'');
+ }
+ fclose($f);
+ } else {
+ phpCAS::error('could not open `'.$fname.'\'');
+ }
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method reads a PGT corresponding to a PGT Iou and deletes the
+ * corresponding file.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @return the corresponding PGT, or FALSE on error
+ *
+ * @public
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $pgt = FALSE;
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( !($f=fopen($fname,"r")) ) {
+ phpCAS::trace('could not open `'.$fname.'\'');
+ } else {
+ if ( ($pgt=fgets($f)) === FALSE ) {
+ phpCAS::trace('could not read PGT from `'.$fname.'\'');
+ }
+ fclose($f);
+ }
+
+ // delete the PGT file
+ @unlink($fname);
+
+ phpCAS::traceEnd($pgt);
+ return $pgt;
+ }
+
+ /** @} */
+
+}
+
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
index 8fd3c9e12..cd9b49967 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
@@ -1,188 +1,188 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-main.php
- * Basic class for PGT storage
- */
-
-/**
- * @class PGTStorage
- * The PGTStorage class is a generic class for PGT storage. This class should
- * not be instanciated itself but inherited by specific PGT storage classes.
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorage
- */
-
-class PGTStorage
-{
- /**
- * @addtogroup internalPGTStorage
- * @{
- */
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The constructor of the class, should be called only by inherited classes.
- *
- * @param $cas_parent the CASclient instance that creates the current object.
- *
- * @protected
- */
- function PGTStorage($cas_parent)
- {
- phpCAS::traceBegin();
- if ( !$cas_parent->isProxy() ) {
- phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
- }
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This virtual method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @public
- */
- function getStorageType()
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /**
- * This virtual method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @public
- */
- function getStorageInfo()
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- // ########################################################################
- // ERROR HANDLING
- // ########################################################################
-
- /**
- * string used to store an error message. Written by PGTStorage::setErrorMessage(),
- * read by PGTStorage::getErrorMessage().
- *
- * @hideinitializer
- * @private
- * @deprecated not used.
- */
- var $_error_message=FALSE;
-
- /**
- * This method sets en error message, which can be read later by
- * PGTStorage::getErrorMessage().
- *
- * @param $error_message an error message
- *
- * @protected
- * @deprecated not used.
- */
- function setErrorMessage($error_message)
- {
- $this->_error_message = $error_message;
- }
-
- /**
- * This method returns an error message set by PGTStorage::setErrorMessage().
- *
- * @return an error message when set by PGTStorage::setErrorMessage(), FALSE
- * otherwise.
- *
- * @public
- * @deprecated not used.
- */
- function getErrorMessage()
- {
- return $this->_error_message;
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * a boolean telling if the storage has already been initialized. Written by
- * PGTStorage::init(), read by PGTStorage::isInitialized().
- *
- * @hideinitializer
- * @private
- */
- var $_initialized = FALSE;
-
- /**
- * This method tells if the storage has already been intialized.
- *
- * @return a boolean
- *
- * @protected
- */
- function isInitialized()
- {
- return $this->_initialized;
- }
-
- /**
- * This virtual method initializes the object.
- *
- * @protected
- */
- function init()
- {
- $this->_initialized = TRUE;
- }
-
- // ########################################################################
- // PGT I/O
- // ########################################################################
-
- /**
- * This virtual method stores a PGT and its corresponding PGT Iuo.
- * @note Should never be called.
- *
- * @param $pgt the PGT
- * @param $pgt_iou the PGT iou
- *
- * @protected
- */
- function write($pgt,$pgt_iou)
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /**
- * This virtual method reads a PGT corresponding to a PGT Iou and deletes
- * the corresponding storage entry.
- * @note Should never be called.
- *
- * @param $pgt_iou the PGT iou
- *
- * @protected
- */
- function read($pgt_iou)
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /** @} */
-
-}
-
-// include specific PGT storage classes
-include_once(dirname(__FILE__).'/pgt-file.php');
-include_once(dirname(__FILE__).'/pgt-db.php');
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-main.php
+ * Basic class for PGT storage
+ */
+
+/**
+ * @class PGTStorage
+ * The PGTStorage class is a generic class for PGT storage. This class should
+ * not be instanciated itself but inherited by specific PGT storage classes.
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorage
+ */
+
+class PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorage
+ * @{
+ */
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The constructor of the class, should be called only by inherited classes.
+ *
+ * @param $cas_parent the CASclient instance that creates the current object.
+ *
+ * @protected
+ */
+ function PGTStorage($cas_parent)
+ {
+ phpCAS::traceBegin();
+ if ( !$cas_parent->isProxy() ) {
+ phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This virtual method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageType()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ // ########################################################################
+ // ERROR HANDLING
+ // ########################################################################
+
+ /**
+ * string used to store an error message. Written by PGTStorage::setErrorMessage(),
+ * read by PGTStorage::getErrorMessage().
+ *
+ * @hideinitializer
+ * @private
+ * @deprecated not used.
+ */
+ var $_error_message=FALSE;
+
+ /**
+ * This method sets en error message, which can be read later by
+ * PGTStorage::getErrorMessage().
+ *
+ * @param $error_message an error message
+ *
+ * @protected
+ * @deprecated not used.
+ */
+ function setErrorMessage($error_message)
+ {
+ $this->_error_message = $error_message;
+ }
+
+ /**
+ * This method returns an error message set by PGTStorage::setErrorMessage().
+ *
+ * @return an error message when set by PGTStorage::setErrorMessage(), FALSE
+ * otherwise.
+ *
+ * @public
+ * @deprecated not used.
+ */
+ function getErrorMessage()
+ {
+ return $this->_error_message;
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * a boolean telling if the storage has already been initialized. Written by
+ * PGTStorage::init(), read by PGTStorage::isInitialized().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_initialized = FALSE;
+
+ /**
+ * This method tells if the storage has already been intialized.
+ *
+ * @return a boolean
+ *
+ * @protected
+ */
+ function isInitialized()
+ {
+ return $this->_initialized;
+ }
+
+ /**
+ * This virtual method initializes the object.
+ *
+ * @protected
+ */
+ function init()
+ {
+ $this->_initialized = TRUE;
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This virtual method stores a PGT and its corresponding PGT Iuo.
+ * @note Should never be called.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method reads a PGT corresponding to a PGT Iou and deletes
+ * the corresponding storage entry.
+ * @note Should never be called.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /** @} */
+
+}
+
+// include specific PGT storage classes
+include_once(dirname(__FILE__).'/pgt-file.php');
+include_once(dirname(__FILE__).'/pgt-db.php');
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/client.php b/plugins/CasAuthentication/extlib/CAS/client.php
index bbde55a28..ad5a23f83 100644
--- a/plugins/CasAuthentication/extlib/CAS/client.php
+++ b/plugins/CasAuthentication/extlib/CAS/client.php
@@ -351,6 +351,43 @@ class CASClient
{
return $this->_server['login_url'] = $url;
}
+
+
+ /**
+ * This method sets the serviceValidate URL of the CAS server.
+ * @param $url the serviceValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerServiceValidateURL($url)
+ {
+ return $this->_server['service_validate_url'] = $url;
+ }
+
+
+ /**
+ * This method sets the proxyValidate URL of the CAS server.
+ * @param $url the proxyValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerProxyValidateURL($url)
+ {
+ return $this->_server['proxy_validate_url'] = $url;
+ }
+
+
+ /**
+ * This method sets the samlValidate URL of the CAS server.
+ * @param $url the samlValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerSamlValidateURL($url)
+ {
+ return $this->_server['saml_validate_url'] = $url;
+ }
+
/**
* This method is used to retrieve the service validating URL of the CAS server.
@@ -373,7 +410,25 @@ class CASClient
// return $this->_server['service_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
return $this->_server['service_validate_url'].'?service='.urlencode($this->getURL());
}
-
+ /**
+ * This method is used to retrieve the SAML validating URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerSamlValidateURL()
+ {
+ phpCAS::traceBegin();
+ // the URL is build only when needed
+ if ( empty($this->_server['saml_validate_url']) ) {
+ switch ($this->getServerVersion()) {
+ case SAML_VERSION_1_1:
+ $this->_server['saml_validate_url'] = $this->getServerBaseURL().'samlValidate';
+ break;
+ }
+ }
+ phpCAS::traceEnd($this->_server['saml_validate_url'].'?TARGET='.urlencode($this->getURL()));
+ return $this->_server['saml_validate_url'].'?TARGET='.urlencode($this->getURL());
+ }
/**
* This method is used to retrieve the proxy validating URL of the CAS server.
* @return a URL.
@@ -497,31 +552,51 @@ class CASClient
phpCAS::traceBegin();
- if (!$this->isLogoutRequest() && !empty($_GET['ticket']) && $start_session) {
- // copy old session vars and destroy the current session
- if (!isset($_SESSION)) {
- session_start();
- }
- $old_session = $_SESSION;
- session_destroy();
- // set up a new session, of name based on the ticket
- $session_id = preg_replace('/[^\w]/','',$_GET['ticket']);
- phpCAS::LOG("Session ID: " . $session_id);
- session_id($session_id);
- if (!isset($_SESSION)) {
- session_start();
- }
- // restore old session vars
- $_SESSION = $old_session;
- // Redirect to location without ticket.
- header('Location: '.$this->getURL());
- }
-
- //activate session mechanism if desired
- if (!$this->isLogoutRequest() && $start_session) {
- session_start();
+ // the redirect header() call and DOM parsing code from domxml-php4-php5.php won't work in PHP4 compatibility mode
+ if (version_compare(PHP_VERSION,'5','>=') && ini_get('zend.ze1_compatibility_mode')) {
+ phpCAS::error('phpCAS cannot support zend.ze1_compatibility_mode. Sorry.');
+ }
+ // skip Session Handling for logout requests and if don't want it'
+ if ($start_session && !$this->isLogoutRequest()) {
+ phpCAS::trace("Starting session handling");
+ // Check for Tickets from the CAS server
+ if (empty($_GET['ticket'])){
+ phpCAS::trace("No ticket found");
+ // only create a session if necessary
+ if (!isset($_SESSION)) {
+ phpCAS::trace("No session found, creating new session");
+ session_start();
+ }
+ }else{
+ phpCAS::trace("Ticket found");
+ // We have to copy any old data before renaming the session
+ if (isset($_SESSION)) {
+ phpCAS::trace("Old active session found, saving old data and destroying session");
+ $old_session = $_SESSION;
+ session_destroy();
+ }else{
+ session_start();
+ phpCAS::trace("Starting possible old session to copy variables");
+ $old_session = $_SESSION;
+ session_destroy();
+ }
+ // set up a new session, of name based on the ticket
+ $session_id = preg_replace('/[^\w]/','',$_GET['ticket']);
+ phpCAS::LOG("Session ID: " . $session_id);
+ session_id($session_id);
+ session_start();
+ // restore old session vars
+ if(isset($old_session)){
+ phpCAS::trace("Restoring old session vars");
+ $_SESSION = $old_session;
+ }
+ }
+ }else{
+ phpCAS::trace("Skipping session creation");
}
+
+ // are we in proxy mode ?
$this->_proxy = $proxy;
//check version
@@ -533,6 +608,8 @@ class CASClient
break;
case CAS_VERSION_2_0:
break;
+ case SAML_VERSION_1_1:
+ break;
default:
phpCAS::error('this version of CAS (`'
.$server_version
@@ -541,29 +618,29 @@ class CASClient
}
$this->_server['version'] = $server_version;
- //check hostname
+ // check hostname
if ( empty($server_hostname)
|| !preg_match('/[\.\d\-abcdefghijklmnopqrstuvwxyz]*/',$server_hostname) ) {
phpCAS::error('bad CAS server hostname (`'.$server_hostname.'\')');
}
$this->_server['hostname'] = $server_hostname;
- //check port
+ // check port
if ( $server_port == 0
|| !is_int($server_port) ) {
phpCAS::error('bad CAS server port (`'.$server_hostname.'\')');
}
$this->_server['port'] = $server_port;
- //check URI
+ // check URI
if ( !preg_match('/[\.\d\-_abcdefghijklmnopqrstuvwxyz\/]*/',$server_uri) ) {
phpCAS::error('bad CAS server URI (`'.$server_uri.'\')');
}
- //add leading and trailing `/' and remove doubles
+ // add leading and trailing `/' and remove doubles
$server_uri = preg_replace('/\/\//','/','/'.$server_uri.'/');
$this->_server['uri'] = $server_uri;
- //set to callback mode if PgtIou and PgtId CGI GET parameters are provided
+ // set to callback mode if PgtIou and PgtId CGI GET parameters are provided
if ( $this->isProxy() ) {
$this->setCallbackMode(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId']));
}
@@ -590,8 +667,12 @@ class CASClient
}
break;
case CAS_VERSION_2_0: // check for a Service or Proxy Ticket
- if( preg_match('/^[SP]T-/',$ticket) ) {
- phpCAS::trace('ST or PT \''.$ticket.'\' found');
+ if (preg_match('/^ST-/', $ticket)) {
+ phpCAS::trace('ST \'' . $ticket . '\' found');
+ $this->setST($ticket);
+ unset ($_GET['ticket']);
+ } else if (preg_match('/^PT-/', $ticket)) {
+ phpCAS::trace('PT \'' . $ticket . '\' found');
$this->setPT($ticket);
unset($_GET['ticket']);
} else if ( !empty($ticket) ) {
@@ -599,6 +680,16 @@ class CASClient
phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
}
break;
+ case SAML_VERSION_1_1: // SAML just does Service Tickets
+ if( preg_match('/^[SP]T-/',$ticket) ) {
+ phpCAS::trace('SA \''.$ticket.'\' found');
+ $this->setSA($ticket);
+ unset($_GET['ticket']);
+ } else if ( !empty($ticket) ) {
+ //ill-formed ticket, halt
+ phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
+ }
+ break;
}
}
phpCAS::traceEnd();
@@ -652,6 +743,45 @@ class CASClient
}
return $this->_user;
}
+
+
+
+ /***********************************************************************************************************************
+ * Atrributes section
+ *
+ * @author Matthias Crauwels <matthias.crauwels@ugent.be>, Ghent University, Belgium
+ *
+ ***********************************************************************************************************************/
+ /**
+ * The Authenticated users attributes. Written by CASClient::setAttributes(), read by CASClient::getAttributes().
+ * @attention client applications should use phpCAS::getAttributes().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_attributes = array();
+
+ function setAttributes($attributes)
+ { $this->_attributes = $attributes; }
+
+ function getAttributes() {
+ if ( empty($this->_user) ) { // if no user is set, there shouldn't be any attributes also...
+ phpCAS::error('this method should be used only after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ return $this->_attributes;
+ }
+
+ function hasAttributes()
+ { return !empty($this->_attributes); }
+
+ function hasAttribute($key)
+ { return (is_array($this->_attributes) && array_key_exists($key, $this->_attributes)); }
+
+ function getAttribute($key) {
+ if($this->hasAttribute($key)) {
+ return $this->_attributes[$key];
+ }
+ }
/**
* This method is called to renew the authentication of the user
@@ -778,55 +908,72 @@ class CASClient
* This method is called to check if the user is authenticated (previously or by
* tickets given in the URL).
*
- * @return TRUE when the user is authenticated.
+ * @return TRUE when the user is authenticated. Also may redirect to the same URL without the ticket.
*
* @public
*/
function isAuthenticated()
{
- phpCAS::traceBegin();
- $res = FALSE;
- $validate_url = '';
-
- if ( $this->wasPreviouslyAuthenticated() ) {
- // the user has already (previously during the session) been
- // authenticated, nothing to be done.
- phpCAS::trace('user was already authenticated, no need to look for tickets');
- $res = TRUE;
- }
- elseif ( $this->hasST() ) {
- // if a Service Ticket was given, validate it
- phpCAS::trace('ST `'.$this->getST().'\' is present');
- $this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
- phpCAS::trace('ST `'.$this->getST().'\' was validated');
- if ( $this->isProxy() ) {
- $this->validatePGT($validate_url,$text_response,$tree_response); // idem
- phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
- $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ phpCAS::traceBegin();
+ $res = FALSE;
+ $validate_url = '';
+
+ if ( $this->wasPreviouslyAuthenticated() ) {
+ // the user has already (previously during the session) been
+ // authenticated, nothing to be done.
+ phpCAS::trace('user was already authenticated, no need to look for tickets');
+ $res = TRUE;
}
- $_SESSION['phpCAS']['user'] = $this->getUser();
- $res = TRUE;
- }
- elseif ( $this->hasPT() ) {
- // if a Proxy Ticket was given, validate it
- phpCAS::trace('PT `'.$this->getPT().'\' is present');
- $this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
- phpCAS::trace('PT `'.$this->getPT().'\' was validated');
- if ( $this->isProxy() ) {
- $this->validatePGT($validate_url,$text_response,$tree_response); // idem
- phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
- $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ else {
+ if ( $this->hasST() ) {
+ // if a Service Ticket was given, validate it
+ phpCAS::trace('ST `'.$this->getST().'\' is present');
+ $this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
+ phpCAS::trace('ST `'.$this->getST().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ elseif ( $this->hasPT() ) {
+ // if a Proxy Ticket was given, validate it
+ phpCAS::trace('PT `'.$this->getPT().'\' is present');
+ $this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
+ phpCAS::trace('PT `'.$this->getPT().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ elseif ( $this->hasSA() ) {
+ // if we have a SAML ticket, validate it.
+ phpCAS::trace('SA `'.$this->getSA().'\' is present');
+ $this->validateSA($validate_url,$text_response,$tree_response); // if it fails, it halts
+ phpCAS::trace('SA `'.$this->getSA().'\' was validated');
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $_SESSION['phpCAS']['attributes'] = $this->getAttributes();
+ $res = TRUE;
+ }
+ else {
+ // no ticket given, not authenticated
+ phpCAS::trace('no ticket found');
+ }
+ if ($res) {
+ // if called with a ticket parameter, we need to redirect to the app without the ticket so that CAS-ification is transparent to the browser (for later POSTS)
+ // most of the checks and errors should have been made now, so we're safe for redirect without masking error messages.
+ header('Location: '.$this->getURL());
+ phpCAS::log( "Prepare redirect to : ".$this->getURL() );
+ }
}
- $_SESSION['phpCAS']['user'] = $this->getUser();
- $res = TRUE;
- }
- else {
- // no ticket given, not authenticated
- phpCAS::trace('no ticket found');
- }
-
- phpCAS::traceEnd($res);
- return $res;
+
+ phpCAS::traceEnd($res);
+ return $res;
}
/**
@@ -889,6 +1036,9 @@ class CASClient
if ( $this->isSessionAuthenticated() ) {
// authentication already done
$this->setUser($_SESSION['phpCAS']['user']);
+ if(isset($_SESSION['phpCAS']['attributes'])){
+ $this->setAttributes($_SESSION['phpCAS']['attributes']);
+ }
phpCAS::trace('user = `'.$_SESSION['phpCAS']['user'].'\'');
$auth = TRUE;
} else {
@@ -917,6 +1067,7 @@ class CASClient
printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
$this->printHTMLFooter();
+
phpCAS::traceExit();
exit();
}
@@ -962,11 +1113,15 @@ class CASClient
$cas_url = $cas_url . $paramSeparator . "service=" . urlencode($params['service']);
}
header('Location: '.$cas_url);
+ phpCAS::log( "Prepare redirect to : ".$cas_url );
+
session_unset();
session_destroy();
+
$this->printHTMLHeader($this->getString(CAS_STR_LOGOUT));
printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
$this->printHTMLFooter();
+
phpCAS::traceExit();
exit();
}
@@ -1009,10 +1164,10 @@ class CASClient
}
$client_ip = $_SERVER['REMOTE_ADDR'];
$client = gethostbyaddr($client_ip);
- phpCAS::log("Client: ".$client);
+ phpCAS::log("Client: ".$client."/".$client_ip);
$allowed = false;
foreach ($allowed_clients as $allowed_client) {
- if ($client == $allowed_client) {
+ if (($client == $allowed_client) or ($client_ip == $allowed_client)) {
phpCAS::log("Allowed client '".$allowed_client."' matches, logout request is allowed");
$allowed = true;
break;
@@ -1284,6 +1439,151 @@ class CASClient
phpCAS::traceEnd(TRUE);
return TRUE;
}
+
+ // ########################################################################
+ // SAML VALIDATION
+ // ########################################################################
+ /**
+ * @addtogroup internalBasic
+ * @{
+ */
+
+ /**
+ * This method is used to validate a SAML TICKET; halt on failure, and sets $validate_url,
+ * $text_reponse and $tree_response on success. These parameters are used later
+ * by CASClient::validatePGT() for CAS proxies.
+ *
+ * @param $validate_url the URL of the request to the CAS server.
+ * @param $text_response the response of the CAS server, as is (XML text).
+ * @param $tree_response the response of the CAS server, as a DOM XML tree.
+ *
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function validateSA($validate_url,&$text_response,&$tree_response)
+ {
+ phpCAS::traceBegin();
+
+ // build the URL to validate the ticket
+ $validate_url = $this->getServerSamlValidateURL();
+
+ // open and read the URL
+ if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
+ phpCAS::trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
+ $this->authError('SA not validated', $validate_url, TRUE/*$no_response*/);
+ }
+
+ phpCAS::trace('server version: '.$this->getServerVersion());
+
+ // analyze the result depending on the version
+ switch ($this->getServerVersion()) {
+ case SAML_VERSION_1_1:
+
+ // read the response of the CAS server into a DOM object
+ if ( !($dom = domxml_open_mem($text_response))) {
+ phpCAS::trace('domxml_open_mem() failed');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // read the root node of the XML tree
+ if ( !($tree_response = $dom->document_element()) ) {
+ phpCAS::trace('document_element() failed');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // insure that tag name is 'Envelope'
+ if ( $tree_response->node_name() != 'Envelope' ) {
+ phpCAS::trace('bad XML root node (should be `Envelope\' instead of `'.$tree_response->node_name().'\'');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // check for the NameIdentifier tag in the SAML response
+ if ( sizeof($success_elements = $tree_response->get_elements_by_tagname("NameIdentifier")) != 0) {
+ phpCAS::trace('NameIdentifier found');
+ $user = trim($success_elements[0]->get_content());
+ phpCAS::trace('user = `'.$user.'`');
+ $this->setUser($user);
+ $this->setSessionAttributes($text_response);
+ } else {
+ phpCAS::trace('no <NameIdentifier> tag found in SAML payload');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ break;
+ }
+
+ // at this step, ST has been validated and $this->_user has been set,
+ phpCAS::traceEnd(TRUE);
+ return TRUE;
+ }
+
+ /**
+ * This method will parse the DOM and pull out the attributes from the SAML
+ * payload and put them into an array, then put the array into the session.
+ *
+ * @param $text_response the SAML payload.
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function setSessionAttributes($text_response)
+ {
+ phpCAS::traceBegin();
+
+ $result = FALSE;
+
+ if (isset($_SESSION[SAML_ATTRIBUTES])) {
+ phpCAS::trace("session attrs already set."); //testbml - do we care?
+ }
+
+ $attr_array = array();
+
+ if (($dom = domxml_open_mem($text_response))) {
+ $xPath = $dom->xpath_new_context();
+ $xPath->xpath_register_ns('samlp', 'urn:oasis:names:tc:SAML:1.0:protocol');
+ $xPath->xpath_register_ns('saml', 'urn:oasis:names:tc:SAML:1.0:assertion');
+ $nodelist = $xPath->xpath_eval("//saml:Attribute");
+ $attrs = $nodelist->nodeset;
+ phpCAS::trace($text_response);
+ foreach($attrs as $attr){
+ $xres = $xPath->xpath_eval("saml:AttributeValue", $attr);
+ $name = $attr->get_attribute("AttributeName");
+ $value_array = array();
+ foreach($xres->nodeset as $node){
+ $value_array[] = $node->get_content();
+
+ }
+ phpCAS::trace("* " . $name . "=" . $value_array);
+ $attr_array[$name] = $value_array;
+ }
+ $_SESSION[SAML_ATTRIBUTES] = $attr_array;
+ // UGent addition...
+ foreach($attr_array as $attr_key => $attr_value) {
+ if(count($attr_value) > 1) {
+ $this->_attributes[$attr_key] = $attr_value;
+ }
+ else {
+ $this->_attributes[$attr_key] = $attr_value[0];
+ }
+ }
+ $result = TRUE;
+ }
+ phpCAS::traceEnd($result);
+ return $result;
+ }
/** @} */
@@ -1495,6 +1795,7 @@ class CASClient
$this->storePGT($pgt,$pgt_iou);
$this->printHTMLFooter();
phpCAS::traceExit();
+ exit();
}
/** @} */
@@ -1585,7 +1886,7 @@ class CASClient
}
// create the storage object
- $this->_pgt_storage = &new PGTStorageFile($this,$format,$path);
+ $this->_pgt_storage = new PGTStorageFile($this,$format,$path);
}
/**
@@ -1622,7 +1923,7 @@ class CASClient
trigger_error('PGT storage into database is an experimental feature, use at your own risk',E_USER_WARNING);
// create the storage object
- $this->_pgt_storage = & new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
+ $this->_pgt_storage = new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
}
// ########################################################################
@@ -1643,7 +1944,8 @@ class CASClient
*/
function validatePGT(&$validate_url,$text_response,$tree_response)
{
- phpCAS::traceBegin();
+ // here cannot use phpCAS::traceBegin(); alongside domxml-php4-to-php5.php
+ phpCAS::log('start validatePGT()');
if ( sizeof($arr = $tree_response->get_elements_by_tagname("proxyGrantingTicket")) == 0) {
phpCAS::trace('<proxyGrantingTicket> not found');
// authentication succeded, but no PGT Iou was transmitted
@@ -1666,7 +1968,8 @@ class CASClient
}
$this->setPGT($pgt);
}
- phpCAS::traceEnd(TRUE);
+ // here, cannot use phpCAS::traceEnd(TRUE); alongside domxml-php4-to-php5.php
+ phpCAS::log('end validatePGT()');
return TRUE;
}
@@ -1819,7 +2122,15 @@ class CASClient
if ($this->_cas_server_cert == '' && $this->_cas_server_ca_cert == '' && !$this->_no_cas_server_validation) {
phpCAS::error('one of the methods phpCAS::setCasServerCert(), phpCAS::setCasServerCACert() or phpCAS::setNoCasServerValidation() must be called.');
}
- if ($this->_cas_server_cert != '' ) {
+ if ($this->_cas_server_cert != '' && $this->_cas_server_ca_cert != '') {
+ // This branch added by IDMS. Seems phpCAS implementor got a bit confused about the curl options CURLOPT_SSLCERT and CURLOPT_CAINFO
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
+ curl_setopt($ch, CURLOPT_SSLCERT, $this->_cas_server_cert);
+ curl_setopt($ch, CURLOPT_CAINFO, $this->_cas_server_ca_cert);
+ curl_setopt($ch, CURLOPT_VERBOSE, '1');
+ phpCAS::trace('CURL: Set all required opts for mutual authentication ------');
+ } else if ($this->_cas_server_cert != '' ) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $this->_cas_server_cert);
} else if ($this->_cas_server_ca_cert != '') {
@@ -1839,11 +2150,28 @@ class CASClient
if ( is_array($cookies) ) {
curl_setopt($ch,CURLOPT_COOKIE,implode(';',$cookies));
}
+ // add extra stuff if SAML
+ if ($this->hasSA()) {
+ $more_headers = array ("soapaction: http://www.oasis-open.org/committees/security",
+ "cache-control: no-cache",
+ "pragma: no-cache",
+ "accept: text/xml",
+ "connection: keep-alive",
+ "content-type: text/xml");
+
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $more_headers);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ $data = $this->buildSAMLPayload();
+ //phpCAS::trace('SAML Payload: '.print_r($data, TRUE));
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+ }
// perform the query
$buf = curl_exec ($ch);
+ //phpCAS::trace('CURL: Call completed. Response body is: \''.$buf.'\'');
if ( $buf === FALSE ) {
phpCAS::trace('curl_exec() failed');
$err_msg = 'CURL error #'.curl_errno($ch).': '.curl_error($ch);
+ //phpCAS::trace('curl error: '.$err_msg);
// close the CURL session
curl_close ($ch);
$res = FALSE;
@@ -1858,7 +2186,28 @@ class CASClient
phpCAS::traceEnd($res);
return $res;
}
-
+
+ /**
+ * This method is used to build the SAML POST body sent to /samlValidate URL.
+ *
+ * @return the SOAP-encased SAMLP artifact (the ticket).
+ *
+ * @private
+ */
+ function buildSAMLPayload()
+ {
+ phpCAS::traceBegin();
+
+ //get the ticket
+ $sa = $this->getSA();
+ //phpCAS::trace("SA: ".$sa);
+
+ $body=SAML_SOAP_ENV.SAML_SOAP_BODY.SAMLP_REQUEST.SAML_ASSERTION_ARTIFACT.$sa.SAML_ASSERTION_ARTIFACT_CLOSE.SAMLP_REQUEST_CLOSE.SAML_SOAP_BODY_CLOSE.SAML_SOAP_ENV_CLOSE;
+
+ phpCAS::traceEnd($body);
+ return ($body);
+ }
+
/**
* This method is the callback used by readURL method to request HTTP headers.
*/
@@ -1951,6 +2300,7 @@ class CASClient
*
* @param $url a string giving the URL of the service, including the mailing box
* for IMAP URLs, as accepted by imap_open().
+ * @param $service a string giving for CAS retrieve Proxy ticket
* @param $flags options given to imap_open().
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
@@ -1964,11 +2314,11 @@ class CASClient
*
* @public
*/
- function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
+ function serviceMail($url,$service,$flags,&$err_code,&$err_msg,&$pt)
{
phpCAS::traceBegin();
// at first retrieve a PT
- $pt = $this->retrievePT($target_service,$err_code,$output);
+ $pt = $this->retrievePT($service,$err_code,$output);
$stream = FALSE;
@@ -2049,7 +2399,30 @@ class CASClient
*/
function hasPT()
{ return !empty($this->_pt); }
-
+ /**
+ * This method returns the SAML Ticket provided in the URL of the request.
+ * @return The SAML ticket.
+ * @private
+ */
+ function getSA()
+ { return 'ST'.substr($this->_sa, 2); }
+
+ /**
+ * This method stores the SAML Ticket.
+ * @param $sa The SAML Ticket.
+ * @private
+ */
+ function setSA($sa)
+ { $this->_sa = $sa; }
+
+ /**
+ * This method tells if a SAML Ticket was stored.
+ * @return TRUE if a SAML Ticket has been stored.
+ * @private
+ */
+ function hasSA()
+ { return !empty($this->_sa); }
+
/** @} */
// ########################################################################
// PT VALIDATION
@@ -2213,8 +2586,13 @@ class CASClient
}
}
- $final_uri .= strtok($_SERVER['REQUEST_URI'],"?");
- $cgi_params = '?'.strtok("?");
+ $php_is_for_sissies = split("\?", $_SERVER['REQUEST_URI'], 2);
+ $final_uri .= $php_is_for_sissies[0];
+ if(sizeof($php_is_for_sissies) > 1){
+ $cgi_params = '?' . $php_is_for_sissies[1];
+ } else {
+ $cgi_params = '?';
+ }
// remove the ticket if present in the CGI parameters
$cgi_params = preg_replace('/&ticket=[^&]*/','',$cgi_params);
$cgi_params = preg_replace('/\?ticket=[^&;]*/','?',$cgi_params);
@@ -2294,4 +2672,4 @@ class CASClient
/** @} */
}
-?> \ No newline at end of file
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php b/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
deleted file mode 100644
index a0dfb99c7..000000000
--- a/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/**
- * @file domxml-php4-php5.php
- * Require PHP5, uses built-in DOM extension.
- * To be used in PHP4 scripts using DOMXML extension.
- * Allows PHP4/DOMXML scripts to run on PHP5/DOM.
- * (Requires PHP5/XSL extension for domxml_xslt functions)
- *
- * Typical use:
- * <pre>
- * {
- * if (version_compare(PHP_VERSION,'5','>='))
- * require_once('domxml-php4-to-php5.php');
- * }
- * </pre>
- *
- * Version 1.5.5, 2005-01-18, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
- *
- * ------------------------------------------------------------------<br>
- * Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
- *
- * Copyright 2004, Licence: Creative Commons "Attribution-ShareAlike 2.0 France" BY-SA (FR),
- * http://creativecommons.org/licenses/by-sa/2.0/fr/
- * http://alexandre.alapetite.net/divers/apropos/#by-sa
- * - Attribution. You must give the original author credit
- * - Share Alike. If you alter, transform, or build upon this work,
- * you may distribute the resulting work only under a license identical to this one
- * - The French law is authoritative
- * - Any of these conditions can be waived if you get permission from Alexandre Alapetite
- * - Please send to Alexandre Alapetite the modifications you make,
- * in order to improve this file for the benefit of everybody
- *
- * If you want to distribute this code, please do it as a link to:
- * http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
- */
-
-function domxml_new_doc($version) {return new php4DOMDocument('');}
-function domxml_open_file($filename) {return new php4DOMDocument($filename);}
-function domxml_open_mem($str)
-{
- $dom=new php4DOMDocument('');
- $dom->myDOMNode->loadXML($str);
- return $dom;
-}
-function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->query($eval_str,$contextnode);}
-function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
-
-class php4DOMAttr extends php4DOMNode
-{
- function php4DOMAttr($aDOMAttr) {$this->myDOMNode=$aDOMAttr;}
- function Name() {return $this->myDOMNode->name;}
- function Specified() {return $this->myDOMNode->specified;}
- function Value() {return $this->myDOMNode->value;}
-}
-
-class php4DOMDocument extends php4DOMNode
-{
- function php4DOMDocument($filename='')
- {
- $this->myDOMNode=new DOMDocument();
- if ($filename!='') $this->myDOMNode->load($filename);
- }
- function create_attribute($name,$value)
- {
- $myAttr=$this->myDOMNode->createAttribute($name);
- $myAttr->value=$value;
- return new php4DOMAttr($myAttr,$this);
- }
- function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
- function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
- function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
- function create_text_node($content) {return new php4DOMNode($this->myDOMNode->createTextNode($content),$this);}
- function document_element() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
- function dump_file($filename,$compressionmode=false,$format=false) {return $this->myDOMNode->save($filename);}
- function dump_mem($format=false,$encoding=false) {return $this->myDOMNode->saveXML();}
- function get_element_by_id($id) {return new php4DOMElement($this->myDOMNode->getElementById($id),$this);}
- function get_elements_by_tagname($name)
- {
- $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this);
- $i++;
- }
- return $nodeSet;
- }
- function html_dump_mem() {return $this->myDOMNode->saveHTML();}
- function root() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
-}
-
-class php4DOMElement extends php4DOMNode
-{
- function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
- function get_elements_by_tagname($name)
- {
- $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
- function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
- function set_attribute($name,$value) {return $this->myDOMNode->setAttribute($name,$value);}
- function tagname() {return $this->myDOMNode->tagName;}
-}
-
-class php4DOMNode
-{
- var $myDOMNode;
- var $myOwnerDocument;
- function php4DOMNode($aDomNode,$aOwnerDocument)
- {
- $this->myDOMNode=$aDomNode;
- $this->myOwnerDocument=$aOwnerDocument;
- }
- function __get($name)
- {
- if ($name=='type') return $this->myDOMNode->nodeType;
- elseif ($name=='tagname') return $this->myDOMNode->tagName;
- elseif ($name=='content') return $this->myDOMNode->textContent;
- else
- {
- $myErrors=debug_backtrace();
- trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
- return false;
- }
- }
- function append_child($newnode) {return new php4DOMElement($this->myDOMNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
- function append_sibling($newnode) {return new php4DOMElement($this->myDOMNode->parentNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
- function attributes()
- {
- $myDOMNodeList=$this->myDOMNode->attributes;
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function child_nodes()
- {
- $myDOMNodeList=$this->myDOMNode->childNodes;
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function children() {return $this->child_nodes();}
- function clone_node($deep=false) {return new php4DOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
- function first_child() {return new php4DOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
- function get_content() {return $this->myDOMNode->textContent;}
- function has_attributes() {return $this->myDOMNode->hasAttributes();}
- function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
- function insert_before($newnode,$refnode) {return new php4DOMElement($this->myDOMNode->insertBefore($newnode->myDOMNode,$refnode->myDOMNode),$this->myOwnerDocument);}
- function is_blank_node()
- {
- $myDOMNodeList=$this->myDOMNode->childNodes;
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- if (($node->nodeType==XML_ELEMENT_NODE)||
- (($node->nodeType==XML_TEXT_NODE)&&!ereg('^([[:cntrl:]]|[[:space:]])*$',$node->nodeValue)))
- return false;
- $i++;
- }
- return true;
- }
- function last_child() {return new php4DOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
- function new_child($name,$content)
- {
- $mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
- $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($content));
- $this->myDOMNode->appendChild($mySubNode);
- return new php4DOMElement($mySubNode,$this->myOwnerDocument);
- }
- function next_sibling() {return new php4DOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
- function node_name() {return $this->myDOMNode->localName;}
- function node_type() {return $this->myDOMNode->nodeType;}
- function node_value() {return $this->myDOMNode->nodeValue;}
- function owner_document() {return $this->myOwnerDocument;}
- function parent_node() {return new php4DOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
- function prefix() {return $this->myDOMNode->prefix;}
- function previous_sibling() {return new php4DOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
- function remove_child($oldchild) {return new php4DOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
- function replace_child($oldnode,$newnode) {return new php4DOMElement($this->myDOMNode->replaceChild($oldnode->myDOMNode,$newnode->myDOMNode),$this->myOwnerDocument);}
- function set_content($text)
- {
- if (($this->myDOMNode->hasChildNodes())&&($this->myDOMNode->firstChild->nodeType==XML_TEXT_NODE))
- $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
- return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($text));
- }
-}
-
-class php4DOMNodelist
-{
- var $myDOMNodelist;
- var $nodeset;
- function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
- {
- $this->myDOMNodelist=$aDOMNodelist;
- $this->nodeset=array();
- $i=0;
- if (isset($this->myDOMNodelist))
- while ($node=$this->myDOMNodelist->item($i))
- {
- $this->nodeset[]=new php4DOMElement($node,$aOwnerDocument);
- $i++;
- }
- }
-}
-
-class php4DOMXPath
-{
- var $myDOMXPath;
- var $myOwnerDocument;
- function php4DOMXPath($dom_document)
- {
- $this->myOwnerDocument=$dom_document;
- $this->myDOMXPath=new DOMXPath($dom_document->myDOMNode);
- }
- function query($eval_str,$contextnode)
- {
- if (isset($contextnode)) return new php4DOMNodelist($this->myDOMXPath->query($eval_str,$contextnode->myDOMNode),$this->myOwnerDocument);
- else return new php4DOMNodelist($this->myDOMXPath->query($eval_str),$this->myOwnerDocument);
- }
- function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
-}
-
-if (extension_loaded('xsl'))
-{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
- function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
- function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
- function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
- class php4DomXsltStylesheet
- {
- var $myxsltProcessor;
- function php4DomXsltStylesheet($dom_document)
- {
- $this->myxsltProcessor=new xsltProcessor();
- $this->myxsltProcessor->importStyleSheet($dom_document);
- }
- function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
- {
- foreach ($xslt_parameters as $param=>$value)
- $this->myxsltProcessor->setParameter('',$param,$value);
- $myphp4DOMDocument=new php4DOMDocument();
- $myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
- return $myphp4DOMDocument;
- }
- function result_dump_file($dom_document,$filename)
- {
- $html=$dom_document->myDOMNode->saveHTML();
- file_put_contents($filename,$html);
- return $html;
- }
- function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
- }
-}
-?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php b/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php
new file mode 100644
index 000000000..1dc4e4b97
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php
@@ -0,0 +1,499 @@
+<?php
+/*
+ Requires PHP5, uses built-in DOM extension.
+ To be used in PHP4 scripts using DOMXML extension: allows PHP4/DOMXML scripts to run on PHP5/DOM.
+ (Optional: requires PHP5/XSL extension for domxml_xslt functions, PHP>=5.1 for XPath evaluation functions, and PHP>=5.1/libxml for DOMXML error reports)
+
+ Typical use:
+ {
+ if (PHP_VERSION>='5')
+ require_once('domxml-php4-to-php5.php');
+ }
+
+ Version 1.21, 2008-12-05, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+
+ ------------------------------------------------------------------
+ Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
+
+ Copyright 2004-2008, GNU Lesser General Public License,
+ http://www.gnu.org/licenses/lgpl.html
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/lgpl.html>
+
+ == Rights and obligations ==
+ - Attribution: You must give the original author credit.
+ - Share Alike: If you alter or transform this library,
+ you may distribute the resulting library only under the same license GNU/LGPL.
+ - In case of jurisdiction dispute, the French law is authoritative.
+ - Any of these conditions can be waived if you get permission from Alexandre Alapetite.
+ - Not required, but please send to Alexandre Alapetite the modifications you make,
+ in order to improve this file for the benefit of everybody.
+
+ If you want to distribute this code, please do it as a link to:
+ http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+*/
+
+define('DOMXML_LOAD_PARSING',0);
+define('DOMXML_LOAD_VALIDATING',1);
+define('DOMXML_LOAD_RECOVERING',2);
+define('DOMXML_LOAD_SUBSTITUTE_ENTITIES',4);
+//define('DOMXML_LOAD_COMPLETE_ATTRS',8);
+define('DOMXML_LOAD_DONT_KEEP_BLANKS',16);
+
+function domxml_new_doc($version) {return new php4DOMDocument();}
+function domxml_new_xmldoc($version) {return new php4DOMDocument();}
+function domxml_open_file($filename,$mode=DOMXML_LOAD_PARSING,&$error=null)
+{
+ $dom=new php4DOMDocument($mode);
+ $errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
+ if ($errorMode) libxml_use_internal_errors(true);
+ if (!$dom->myDOMNode->load($filename)) $dom=null;
+ if ($errorMode)
+ {
+ $error=array_map('_error_report',libxml_get_errors());
+ libxml_clear_errors();
+ }
+ return $dom;
+}
+function domxml_open_mem($str,$mode=DOMXML_LOAD_PARSING,&$error=null)
+{
+ $dom=new php4DOMDocument($mode);
+ $errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
+ if ($errorMode) libxml_use_internal_errors(true);
+ if (!$dom->myDOMNode->loadXML($str)) $dom=null;
+ if ($errorMode)
+ {
+ $error=array_map('_error_report',libxml_get_errors());
+ libxml_clear_errors();
+ }
+ return $dom;
+}
+function html_doc($html_doc,$from_file=false)
+{
+ $dom=new php4DOMDocument();
+ if ($from_file) $result=$dom->myDOMNode->loadHTMLFile($html_doc);
+ else $result=$dom->myDOMNode->loadHTML($html_doc);
+ return $result ? $dom : null;
+}
+function html_doc_file($filename) {return html_doc($filename,true);}
+function xmldoc($str) {return domxml_open_mem($str);}
+function xmldocfile($filename) {return domxml_open_file($filename);}
+function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->xpath_eval($eval_str,$contextnode);}
+function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
+function xpath_register_ns($xpath_context,$prefix,$namespaceURI) {return $xpath_context->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
+function _entityDecode($text) {return html_entity_decode(strtr($text,array('&apos;'=>'\'')),ENT_QUOTES,'UTF-8');}
+function _error_report($error) {return array('errormessage'=>$error->message,'nodename'=>'','line'=>$error->line,'col'=>$error->column)+($error->file==''?array():array('directory'=>dirname($error->file),'file'=>basename($error->file)));}
+
+class php4DOMAttr extends php4DOMNode
+{
+ function __get($name)
+ {
+ if ($name==='name') return $this->myDOMNode->name;
+ else return parent::__get($name);
+ }
+ function name() {return $this->myDOMNode->name;}
+ function set_content($text) {}
+ //function set_value($content) {return $this->myDOMNode->value=htmlspecialchars($content,ENT_QUOTES);}
+ function specified() {return $this->myDOMNode->specified;}
+ function value() {return $this->myDOMNode->value;}
+}
+
+class php4DOMDocument extends php4DOMNode
+{
+ function php4DOMDocument($mode=DOMXML_LOAD_PARSING)
+ {
+ $this->myDOMNode=new DOMDocument();
+ $this->myOwnerDocument=$this;
+ if ($mode & DOMXML_LOAD_VALIDATING) $this->myDOMNode->validateOnParse=true;
+ if ($mode & DOMXML_LOAD_RECOVERING) $this->myDOMNode->recover=true;
+ if ($mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES) $this->myDOMNode->substituteEntities=true;
+ if ($mode & DOMXML_LOAD_DONT_KEEP_BLANKS) $this->myDOMNode->preserveWhiteSpace=false;
+ }
+ function add_root($name)
+ {
+ if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
+ return new php4DOMElement($this->myDOMNode->appendChild($this->myDOMNode->createElement($name)),$this->myOwnerDocument);
+ }
+ function create_attribute($name,$value)
+ {
+ $myAttr=$this->myDOMNode->createAttribute($name);
+ $myAttr->value=htmlspecialchars($value,ENT_QUOTES);
+ return new php4DOMAttr($myAttr,$this);
+ }
+ function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
+ function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
+ function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
+ function create_element_ns($uri,$name,$prefix=null)
+ {
+ if ($prefix==null) $prefix=$this->myDOMNode->lookupPrefix($uri);
+ if (($prefix==null)&&(($this->myDOMNode->documentElement==null)||(!$this->myDOMNode->documentElement->isDefaultNamespace($uri)))) $prefix='a'.sprintf('%u',crc32($uri));
+ return new php4DOMElement($this->myDOMNode->createElementNS($uri,$prefix==null ? $name : $prefix.':'.$name),$this);
+ }
+ function create_entity_reference($content) {return new php4DOMNode($this->myDOMNode->createEntityReference($content),$this);} //By Walter Ebert 2007-01-22
+ function create_processing_instruction($target,$data=''){return new php4DomProcessingInstruction($this->myDOMNode->createProcessingInstruction($target,$data),$this);}
+ function create_text_node($content) {return new php4DOMText($this->myDOMNode->createTextNode($content),$this);}
+ function document_element() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
+ function dump_file($filename,$compressionmode=false,$format=false)
+ {
+ $format0=$this->myDOMNode->formatOutput;
+ $this->myDOMNode->formatOutput=$format;
+ $res=$this->myDOMNode->save($filename);
+ $this->myDOMNode->formatOutput=$format0;
+ return $res;
+ }
+ function dump_mem($format=false,$encoding=false)
+ {
+ $format0=$this->myDOMNode->formatOutput;
+ $this->myDOMNode->formatOutput=$format;
+ $encoding0=$this->myDOMNode->encoding;
+ if ($encoding) $this->myDOMNode->encoding=$encoding;
+ $dump=$this->myDOMNode->saveXML();
+ $this->myDOMNode->formatOutput=$format0;
+ if ($encoding) $this->myDOMNode->encoding= $encoding0=='' ? 'UTF-8' : $encoding0; //UTF-8 is XML default encoding
+ return $dump;
+ }
+ function free()
+ {
+ if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
+ $this->myDOMNode=null;
+ $this->myOwnerDocument=null;
+ }
+ function get_element_by_id($id) {return parent::_newDOMElement($this->myDOMNode->getElementById($id),$this);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this);
+ return $nodeSet;
+ }
+ function html_dump_mem() {return $this->myDOMNode->saveHTML();}
+ function root() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
+ function xinclude() {return $this->myDOMNode->xinclude();}
+ function xpath_new_context() {return new php4DOMXPath($this);}
+}
+
+class php4DOMElement extends php4DOMNode
+{
+ function add_namespace($uri,$prefix)
+ {
+ if ($this->myDOMNode->hasAttributeNS('http://www.w3.org/2000/xmlns/',$prefix)) return false;
+ else
+ {
+ $this->myDOMNode->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$prefix,$uri); //By Daniel Walker 2006-09-08
+ return true;
+ }
+ }
+ function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
+ function get_attribute_node($name) {return parent::_newDOMElement($this->myDOMNode->getAttributeNode($name),$this->myOwnerDocument);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
+ function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
+ function set_attribute($name,$value)
+ {
+ //return $this->myDOMNode->setAttribute($name,$value); //Does not return a DomAttr
+ $myAttr=$this->myDOMNode->ownerDocument->createAttribute($name);
+ $myAttr->value=htmlspecialchars($value,ENT_QUOTES); //Entity problem reported by AL-DesignWorks 2007-09-07
+ $this->myDOMNode->setAttributeNode($myAttr);
+ return new php4DOMAttr($myAttr,$this->myOwnerDocument);
+ }
+ /*function set_attribute_node($attr)
+ {
+ $this->myDOMNode->setAttributeNode($this->_importNode($attr));
+ return $attr;
+ }*/
+ function set_name($name)
+ {
+ if ($this->myDOMNode->prefix=='') $newNode=$this->myDOMNode->ownerDocument->createElement($name);
+ else $newNode=$this->myDOMNode->ownerDocument->createElementNS($this->myDOMNode->namespaceURI,$this->myDOMNode->prefix.':'.$name);
+ $myDOMNodeList=$this->myDOMNode->attributes;
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++))
+ if ($node->namespaceURI=='') $newNode->setAttribute($node->name,$node->value);
+ else $newNode->setAttributeNS($node->namespaceURI,$node->nodeName,$node->value);
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item(0)) $newNode->appendChild($node);
+ $this->myDOMNode->parentNode->replaceChild($newNode,$this->myDOMNode);
+ $this->myDOMNode=$newNode;
+ return true;
+ }
+ function tagname() {return $this->tagname;}
+}
+
+class php4DOMNode
+{
+ public $myDOMNode;
+ public $myOwnerDocument;
+ function php4DOMNode($aDomNode,$aOwnerDocument)
+ {
+ $this->myDOMNode=$aDomNode;
+ $this->myOwnerDocument=$aOwnerDocument;
+ }
+ function __get($name)
+ {
+ switch ($name)
+ {
+ case 'type': return $this->myDOMNode->nodeType;
+ case 'tagname': return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->tagName; //Avoid namespace prefix for DOMElement
+ case 'content': return $this->myDOMNode->textContent;
+ case 'value': return $this->myDOMNode->value;
+ default:
+ $myErrors=debug_backtrace();
+ trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
+ return false;
+ }
+ }
+ function add_child($newnode) {return append_child($newnode);}
+ function add_namespace($uri,$prefix) {return false;}
+ function append_child($newnode) {return self::_newDOMElement($this->myDOMNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
+ function append_sibling($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
+ function attributes()
+ {
+ $myDOMNodeList=$this->myDOMNode->attributes;
+ if (!(isset($myDOMNodeList)&&$this->myDOMNode->hasAttributes())) return null;
+ $nodeSet=array();
+ $i=0;
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function child_nodes()
+ {
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=self::_newDOMElement($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function children() {return $this->child_nodes();}
+ function clone_node($deep=false) {return self::_newDOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
+ //dump_node($node) should only be called on php4DOMDocument
+ function dump_node($node=null) {return $node==null ? $this->myOwnerDocument->myDOMNode->saveXML($this->myDOMNode) : $this->myOwnerDocument->myDOMNode->saveXML($node->myDOMNode);}
+ function first_child() {return self::_newDOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
+ function get_content() {return $this->myDOMNode->textContent;}
+ function has_attributes() {return $this->myDOMNode->hasAttributes();}
+ function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
+ function insert_before($newnode,$refnode) {return self::_newDOMElement($this->myDOMNode->insertBefore($this->_importNode($newnode),$refnode==null?null:$refnode->myDOMNode),$this->myOwnerDocument);}
+ function is_blank_node() {return ($this->myDOMNode->nodeType===XML_TEXT_NODE)&&preg_match('%^\s*$%',$this->myDOMNode->nodeValue);}
+ function last_child() {return self::_newDOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
+ function new_child($name,$content)
+ {
+ $mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
+ $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($content)));
+ $this->myDOMNode->appendChild($mySubNode);
+ return new php4DOMElement($mySubNode,$this->myOwnerDocument);
+ }
+ function next_sibling() {return self::_newDOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
+ function node_name() {return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->nodeName;} //Avoid namespace prefix for DOMElement
+ function node_type() {return $this->myDOMNode->nodeType;}
+ function node_value() {return $this->myDOMNode->nodeValue;}
+ function owner_document() {return $this->myOwnerDocument;}
+ function parent_node() {return self::_newDOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
+ function prefix() {return $this->myDOMNode->prefix;}
+ function previous_sibling() {return self::_newDOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
+ function remove_child($oldchild) {return self::_newDOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
+ function replace_child($newnode,$oldnode) {return self::_newDOMElement($this->myDOMNode->replaceChild($this->_importNode($newnode),$oldnode->myDOMNode),$this->myOwnerDocument);}
+ function replace_node($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->replaceChild($this->_importNode($newnode),$this->myDOMNode),$this->myOwnerDocument);}
+ function set_content($text) {return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($text)));} //Entity problem reported by AL-DesignWorks 2007-09-07
+ //function set_name($name) {return $this->myOwnerDocument->renameNode($this->myDOMNode,$this->myDOMNode->namespaceURI,$name);}
+ function set_namespace($uri,$prefix=null)
+ {//Contributions by Daniel Walker 2006-09-08
+ $nsprefix=$this->myDOMNode->lookupPrefix($uri);
+ if ($nsprefix==null)
+ {
+ $nsprefix= $prefix==null ? $nsprefix='a'.sprintf('%u',crc32($uri)) : $prefix;
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
+ {
+ if (($prefix!=null)&&$this->myDOMNode->ownerElement->hasAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)&&
+ ($this->myDOMNode->ownerElement->getAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)!=$uri))
+ {//Remove namespace
+ $parent=$this->myDOMNode->ownerElement;
+ $parent->removeAttributeNode($this->myDOMNode);
+ $parent->setAttribute($this->myDOMNode->localName,$this->myDOMNode->nodeValue);
+ $this->myDOMNode=$parent->getAttributeNode($this->myDOMNode->localName);
+ return;
+ }
+ $this->myDOMNode->ownerElement->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$nsprefix,$uri);
+ }
+ }
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
+ {
+ $parent=$this->myDOMNode->ownerElement;
+ $parent->removeAttributeNode($this->myDOMNode);
+ $parent->setAttributeNS($uri,$nsprefix.':'.$this->myDOMNode->localName,$this->myDOMNode->nodeValue);
+ $this->myDOMNode=$parent->getAttributeNodeNS($uri,$this->myDOMNode->localName);
+ }
+ elseif ($this->myDOMNode->nodeType===XML_ELEMENT_NODE)
+ {
+ $NewNode=$this->myDOMNode->ownerDocument->createElementNS($uri,$nsprefix.':'.$this->myDOMNode->localName);
+ foreach ($this->myDOMNode->attributes as $n) $NewNode->appendChild($n->cloneNode(true));
+ foreach ($this->myDOMNode->childNodes as $n) $NewNode->appendChild($n->cloneNode(true));
+ $xpath=new DOMXPath($this->myDOMNode->ownerDocument);
+ $myDOMNodeList=$xpath->query('namespace::*[name()!="xml"]',$this->myDOMNode); //Add old namespaces
+ foreach ($myDOMNodeList as $n) $NewNode->setAttributeNS('http://www.w3.org/2000/xmlns/',$n->nodeName,$n->nodeValue);
+ $this->myDOMNode->parentNode->replaceChild($NewNode,$this->myDOMNode);
+ $this->myDOMNode=$NewNode;
+ }
+ }
+ function unlink_node()
+ {
+ if ($this->myDOMNode->parentNode!=null)
+ {
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE) $this->myDOMNode->parentNode->removeAttributeNode($this->myDOMNode);
+ else $this->myDOMNode->parentNode->removeChild($this->myDOMNode);
+ }
+ }
+ protected function _importNode($newnode) {return $this->myOwnerDocument===$newnode->myOwnerDocument ? $newnode->myDOMNode : $this->myOwnerDocument->myDOMNode->importNode($newnode->myDOMNode,true);} //To import DOMNode from another DOMDocument
+ static function _newDOMElement($aDOMNode,$aOwnerDocument)
+ {//Check the PHP5 DOMNode before creating a new associated PHP4 DOMNode wrapper
+ if ($aDOMNode==null) return null;
+ switch ($aDOMNode->nodeType)
+ {
+ case XML_ELEMENT_NODE: return new php4DOMElement($aDOMNode,$aOwnerDocument);
+ case XML_TEXT_NODE: return new php4DOMText($aDOMNode,$aOwnerDocument);
+ case XML_ATTRIBUTE_NODE: return new php4DOMAttr($aDOMNode,$aOwnerDocument);
+ case XML_PI_NODE: return new php4DomProcessingInstruction($aDOMNode,$aOwnerDocument);
+ default: return new php4DOMNode($aDOMNode,$aOwnerDocument);
+ }
+ }
+}
+
+class php4DomProcessingInstruction extends php4DOMNode
+{
+ function data() {return $this->myDOMNode->data;}
+ function target() {return $this->myDOMNode->target;}
+}
+
+class php4DOMText extends php4DOMNode
+{
+ function __get($name)
+ {
+ if ($name==='tagname') return '#text';
+ else return parent::__get($name);
+ }
+ function tagname() {return '#text';}
+ function set_content($text) {$this->myDOMNode->nodeValue=$text; return true;}
+}
+
+if (!defined('XPATH_NODESET'))
+{
+ define('XPATH_UNDEFINED',0);
+ define('XPATH_NODESET',1);
+ define('XPATH_BOOLEAN',2);
+ define('XPATH_NUMBER',3);
+ define('XPATH_STRING',4);
+ /*define('XPATH_POINT',5);
+ define('XPATH_RANGE',6);
+ define('XPATH_LOCATIONSET',7);
+ define('XPATH_USERS',8);
+ define('XPATH_XSLT_TREE',9);*/
+}
+
+class php4DOMNodelist
+{
+ private $myDOMNodelist;
+ public $nodeset;
+ public $type=XPATH_UNDEFINED;
+ public $value;
+ function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
+ {
+ if (!isset($aDOMNodelist)) return;
+ elseif (is_object($aDOMNodelist)||is_array($aDOMNodelist))
+ {
+ if ($aDOMNodelist->length>0)
+ {
+ $this->myDOMNodelist=$aDOMNodelist;
+ $this->nodeset=array();
+ $this->type=XPATH_NODESET;
+ $i=0;
+ while ($node=$this->myDOMNodelist->item($i++)) $this->nodeset[]=php4DOMNode::_newDOMElement($node,$aOwnerDocument);
+ }
+ }
+ elseif (is_int($aDOMNodelist)||is_float($aDOMNodelist))
+ {
+ $this->type=XPATH_NUMBER;
+ $this->value=$aDOMNodelist;
+ }
+ elseif (is_bool($aDOMNodelist))
+ {
+ $this->type=XPATH_BOOLEAN;
+ $this->value=$aDOMNodelist;
+ }
+ elseif (is_string($aDOMNodelist))
+ {
+ $this->type=XPATH_STRING;
+ $this->value=$aDOMNodelist;
+ }
+ }
+}
+
+class php4DOMXPath
+{
+ public $myDOMXPath;
+ private $myOwnerDocument;
+ function php4DOMXPath($dom_document)
+ {
+ //TODO: If $dom_document is a DomElement, make that default $contextnode and modify XPath. Ex: '/test'
+ $this->myOwnerDocument=$dom_document->myOwnerDocument;
+ $this->myDOMXPath=new DOMXPath($this->myOwnerDocument->myDOMNode);
+ }
+ function xpath_eval($eval_str,$contextnode=null)
+ {
+ if (method_exists($this->myDOMXPath,'evaluate')) $xp=isset($contextnode) ? $this->myDOMXPath->evaluate($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->evaluate($eval_str);
+ else $xp=isset($contextnode) ? $this->myDOMXPath->query($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->query($eval_str);
+ $xp=new php4DOMNodelist($xp,$this->myOwnerDocument);
+ return ($xp->type===XPATH_UNDEFINED) ? false : $xp;
+ }
+ function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
+}
+
+if (extension_loaded('xsl'))
+{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
+ function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
+ function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
+ function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
+ class php4DomXsltStylesheet
+ {
+ private $myxsltProcessor;
+ function php4DomXsltStylesheet($dom_document)
+ {
+ $this->myxsltProcessor=new xsltProcessor();
+ $this->myxsltProcessor->importStyleSheet($dom_document);
+ }
+ function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
+ {
+ foreach ($xslt_parameters as $param=>$value) $this->myxsltProcessor->setParameter('',$param,$value);
+ $myphp4DOMDocument=new php4DOMDocument();
+ $myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
+ return $myphp4DOMDocument;
+ }
+ function result_dump_file($dom_document,$filename)
+ {
+ $html=$dom_document->myDOMNode->saveHTML();
+ file_put_contents($filename,$html);
+ return $html;
+ }
+ function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
+ }
+}
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/catalan.php b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
index 0b139c7ca..3d67473d9 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/spanish.php
- * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'usant servidor',
- CAS_STR_AUTHENTICATION_WANTED
- => 'Autentificació CAS necessària!',
- CAS_STR_LOGOUT
- => 'Sortida de CAS necessària!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'Autentificació CAS fallida!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
-);
-
-?>
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usant servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Autentificació CAS necessària!',
+ CAS_STR_LOGOUT
+ => 'Sortida de CAS necessària!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Autentificació CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/english.php b/plugins/CasAuthentication/extlib/CAS/languages/english.php
index d38d42c1f..c14345031 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/english.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/english.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/english.php
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'using server',
- CAS_STR_AUTHENTICATION_WANTED
- => 'CAS Authentication wanted!',
- CAS_STR_LOGOUT
- => 'CAS logout wanted!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'CAS Authentication failed!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'using server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentication wanted!',
+ CAS_STR_LOGOUT
+ => 'CAS logout wanted!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Authentication failed!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/french.php b/plugins/CasAuthentication/extlib/CAS/languages/french.php
index 32d141685..b077ec02e 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/french.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/french.php
@@ -1,28 +1,28 @@
-<?php
-
-/**
- * @file languages/english.php
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'utilisant le serveur',
- CAS_STR_AUTHENTICATION_WANTED
- => 'Authentication CAS nécessaire&nbsp;!',
- CAS_STR_LOGOUT
- => 'Déconnexion demandée&nbsp;!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Vous auriez du etre redirigé(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'Authentification CAS infructueuse&nbsp;!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>Vous n\'avez pas été authentifié(e).</p><p>Vous pouvez soumettre votre requete à nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problème persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
-
-);
-
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'utilisant le serveur',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Authentication CAS n�cessaire&nbsp;!',
+ CAS_STR_LOGOUT
+ => 'D�connexion demand�e&nbsp;!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Vous auriez du etre redirig�(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Authentification CAS infructueuse&nbsp;!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Vous n\'avez pas �t� authentifi�(e).</p><p>Vous pouvez soumettre votre requete � nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le probl�me persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
+
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/german.php b/plugins/CasAuthentication/extlib/CAS/languages/german.php
index 55c3238fd..29daeb35d 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/german.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/german.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/german.php
- * @author Henrik Genssen <hg at mediafactory.de>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'via Server',
- CAS_STR_AUTHENTICATION_WANTED
- => 'CAS Authentifizierung erforderlich!',
- CAS_STR_LOGOUT
- => 'CAS Abmeldung!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'CAS Anmeldung fehlgeschlagen!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/german.php
+ * @author Henrik Genssen <hg at mediafactory.de>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'via Server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentifizierung erforderlich!',
+ CAS_STR_LOGOUT
+ => 'CAS Abmeldung!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Anmeldung fehlgeschlagen!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/greek.php b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
index d41bf783b..fdff77e4e 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/greek.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/greek.php
- * @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => '÷ñçóéìïðïéåßôáé ï åîõðçñåôçôÞò',
- CAS_STR_AUTHENTICATION_WANTED
- => 'Áðáéôåßôáé ç ôáõôïðïßçóç CAS!',
- CAS_STR_LOGOUT
- => 'Áðáéôåßôáé ç áðïóýíäåóç áðü CAS!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Èá Ýðñåðå íá åß÷áôå áíáêáôåõèõíèåß óôïí åîõðçñåôçôÞ CAS. ÊÜíôå êëßê <a href="%s">åäþ</a> ãéá íá óõíå÷ßóåôå.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'Ç ôáõôïðïßçóç CAS áðÝôõ÷å!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>Äåí ôáõôïðïéçèÞêáôå.</p><p>Ìðïñåßôå íá îáíáðñïóðáèÞóåôå, êÜíïíôáò êëßê <a href="%s">åäþ</a>.</p><p>Åáí ôï ðñüâëçìá åðéìåßíåé, åëÜôå óå åðáöÞ ìå ôïí <a href="mailto:%s">äéá÷åéñéóôÞ</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'Ç õðçñåóßá `<b>%s</b>\' äåí åßíáé äéáèÝóéìç (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/greek.php
+ * @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => '��������������� � ������������',
+ CAS_STR_AUTHENTICATION_WANTED
+ => '���������� � ����������� CAS!',
+ CAS_STR_LOGOUT
+ => '���������� � ���������� ��� CAS!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => '�� ������ �� ������ �������������� ���� ����������� CAS. ����� ���� <a href="%s">���</a> ��� �� ����������.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => '� ����������� CAS �������!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>��� ���������������.</p><p>�������� �� ����������������, �������� ���� <a href="%s">���</a>.</p><p>��� �� �������� ���������, ����� �� ����� �� ��� <a href="mailto:%s">�����������</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => '� �������� `<b>%s</b>\' ��� ����� ��������� (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/japanese.php b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
index 333bb17b6..76ebe77bc 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
@@ -11,17 +11,17 @@ $this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
- => 'CAS¤Ë¤è¤ëǧ¾Ú¤ò¹Ô¤¤¤Þ¤¹',
+ => 'CAS�ˤ��ǧ�ڤ�Ԥ��ޤ�',
CAS_STR_LOGOUT
- => 'CAS¤«¤é¥í¥°¥¢¥¦¥È¤·¤Þ¤¹!',
+ => 'CAS����?�����Ȥ��ޤ�!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'CAS¥µ¡¼¥Ð¤Ë¹Ô¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¼«Æ°Åª¤ËžÁ÷¤µ¤ì¤Ê¤¤¾ì¹ç¤Ï <a href="%s">¤³¤Á¤é</a> ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ³¹Ô¤·¤Þ¤¹¡£',
+ => 'CAS�����Ф˹Ԥ�ɬ�פ�����ޤ�����ưŪ��ž������ʤ����� <a href="%s">������</a> �򥯥�å�����³�Ԥ��ޤ���',
CAS_STR_AUTHENTICATION_FAILED
- => 'CAS¤Ë¤è¤ëǧ¾Ú¤Ë¼ºÇÔ¤·¤Þ¤·¤¿',
+ => 'CAS�ˤ��ǧ�ڤ˼��Ԥ��ޤ���',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>ǧ¾Ú¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿.</p><p>¤â¤¦°ìÅ٥ꥯ¥¨¥¹¥È¤òÁ÷¿®¤¹¤ë¾ì¹ç¤Ï<a href="%s">¤³¤Á¤é</a>¤ò¥¯¥ê¥Ã¥¯.</p><p>ÌäÂ꤬²ò·è¤·¤Ê¤¤¾ì¹ç¤Ï <a href="mailto:%s">¤³¤Î¥µ¥¤¥È¤Î´ÉÍý¼Ô</a>¤ËÌ䤤¹ç¤ï¤»¤Æ¤¯¤À¤µ¤¤.</p>',
+ => '<p>ǧ�ڤǤ��ޤ���Ǥ���.</p><p>�⤦���٥ꥯ�����Ȥ������������<a href="%s">������</a>�򥯥�å�.</p><p>���꤬��褷�ʤ����� <a href="mailto:%s">���Υ����Ȥδ����</a>���䤤��碌�Ƥ�������.</p>',
CAS_STR_SERVICE_UNAVAILABLE
- => '¥µ¡¼¥Ó¥¹ `<b>%s</b>\' ¤ÏÍøÍѤǤ­¤Þ¤»¤ó (<b>%s</b>).'
+ => '�����ӥ� `<b>%s</b>\' �����ѤǤ��ޤ��� (<b>%s</b>).'
);
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/languages.php b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
index 001cfe445..2c6f8bb3b 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/languages.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
@@ -1,24 +1,24 @@
-<?php
-
-/**
- * @file languages/languages.php
- * Internationalization constants
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-//@{
-/**
- * a phpCAS string index
- */
-define("CAS_STR_USING_SERVER", 1);
-define("CAS_STR_AUTHENTICATION_WANTED", 2);
-define("CAS_STR_LOGOUT", 3);
-define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
-define("CAS_STR_AUTHENTICATION_FAILED", 5);
-define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
-define("CAS_STR_SERVICE_UNAVAILABLE", 7);
-//@}
-
+<?php
+
+/**
+ * @file languages/languages.php
+ * Internationalization constants
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+//@{
+/**
+ * a phpCAS string index
+ */
+define("CAS_STR_USING_SERVER", 1);
+define("CAS_STR_AUTHENTICATION_WANTED", 2);
+define("CAS_STR_LOGOUT", 3);
+define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
+define("CAS_STR_AUTHENTICATION_FAILED", 5);
+define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
+define("CAS_STR_SERVICE_UNAVAILABLE", 7);
+//@}
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/spanish.php b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
index 04067ca03..3a8ffc253 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/spanish.php
- * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'usando servidor',
- CAS_STR_AUTHENTICATION_WANTED
- => '¡Autentificación CAS necesaria!',
- CAS_STR_LOGOUT
- => '¡Salida CAS necesaria!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
- CAS_STR_AUTHENTICATION_FAILED
- => '¡Autentificación CAS fallida!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
-);
-
-?>
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usando servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => '¡Autentificación CAS necesaria!',
+ CAS_STR_LOGOUT
+ => '¡Salida CAS necesaria!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => '¡Autentificación CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php
index 78c9054e1..5dba73a5d 100644
--- a/plugins/Facebook/FacebookPlugin.php
+++ b/plugins/Facebook/FacebookPlugin.php
@@ -22,7 +22,7 @@
* @category Plugin
* @package StatusNet
* @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009-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/
*/
@@ -32,12 +32,12 @@ if (!defined('STATUSNET')) {
}
define("FACEBOOK_CONNECT_SERVICE", 3);
-define('FACEBOOKPLUGIN_VERSION', '0.9');
require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
/**
- * Facebook plugin to add a StatusNet Facebook application
+ * Facebook plugin to add a StatusNet Facebook canvas application
+ * and allow registration and authentication via Facebook Connect
*
* @category Plugin
* @package StatusNet
@@ -49,6 +49,55 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
class FacebookPlugin extends Plugin
{
+ const VERSION = STATUSNET_VERSION;
+
+ /**
+ * Initializer for the plugin.
+ */
+
+ function initialize()
+ {
+ // 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)) {
+ Config::save('facebook', 'apikey', $this->apikey);
+ }
+ }
+
+ if (isset($this->secret)) {
+ $secret = common_config('facebook', 'secret');
+ if (empty($secret)) {
+ Config::save(
+ 'facebook',
+ 'secret',
+ $this->secret
+ );
+ }
+ }
+ }
+
+ /**
+ * Check to see if there is an API key and secret defined
+ * for Facebook integration.
+ *
+ * @return boolean result
+ */
+
+ static function hasKeys()
+ {
+ $apiKey = common_config('facebook', 'apikey');
+ $apiSecret = common_config('facebook', 'secret');
+
+ if (!empty($apiKey) && !empty($apiSecret)) {
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Add Facebook app actions to the router table
*
@@ -61,22 +110,26 @@ class FacebookPlugin extends Plugin
function onStartInitializeRouter($m)
{
+ $m->connect('admin/facebook', array('action' => 'facebookadminpanel'));
- // Facebook App stuff
+ if (self::hasKeys()) {
- $m->connect('facebook/app', array('action' => 'facebookhome'));
- $m->connect('facebook/app/index.php', array('action' => 'facebookhome'));
- $m->connect('facebook/app/settings.php',
- array('action' => 'facebooksettings'));
- $m->connect('facebook/app/invite.php', array('action' => 'facebookinvite'));
- $m->connect('facebook/app/remove', array('action' => 'facebookremove'));
+ // Facebook App stuff
- // Facebook Connect stuff
+ $m->connect('facebook/app', array('action' => 'facebookhome'));
+ $m->connect('facebook/app/index.php', array('action' => 'facebookhome'));
+ $m->connect('facebook/app/settings.php',
+ array('action' => 'facebooksettings'));
+ $m->connect('facebook/app/invite.php', array('action' => 'facebookinvite'));
+ $m->connect('facebook/app/remove', array('action' => 'facebookremove'));
- $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
- $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
- $m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
- $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
+ // Facebook Connect stuff
+
+ $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
+ $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
+ $m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
+ $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
+ }
return true;
}
@@ -98,6 +151,7 @@ class FacebookPlugin extends Plugin
case 'FacebookinviteAction':
case 'FacebookremoveAction':
case 'FacebooksettingsAction':
+ case 'FacebookadminpanelAction':
include_once INSTALLDIR . '/plugins/Facebook/' .
strtolower(mb_substr($cls, 0, -6)) . '.php';
return false;
@@ -123,6 +177,32 @@ class FacebookPlugin extends Plugin
}
/**
+ * Add a Facebook tab to the admin panels
+ *
+ * @param Widget $nav Admin panel nav
+ *
+ * @return boolean hook value
+ */
+
+ function onEndAdminPanelNav($nav)
+ {
+ if (AdminPanelAction::canAdmin('facebook')) {
+
+ $action_name = $nav->action->trimmed('action');
+
+ $nav->out->menuItem(
+ common_local_url('facebookadminpanel'),
+ _m('Facebook'),
+ _m('Facebook integration configuration'),
+ $action_name == 'facebookadminpanel',
+ 'nav_facebook_admin_panel'
+ );
+ }
+
+ return true;
+ }
+
+ /**
* Override normal HTML output to force the content type to
* text/html and add in xmlns:fb
*
@@ -280,6 +360,9 @@ class FacebookPlugin extends Plugin
function reqFbScripts($action)
{
+ if (!self::hasKeys()) {
+ return false;
+ }
// If you're logged in w/FB Connect, you always need the FB stuff
@@ -352,44 +435,35 @@ class FacebookPlugin extends Plugin
function onStartPrimaryNav($action)
{
- $user = common_current_user();
+ if (self::hasKeys()) {
+ $user = common_current_user();
+ if (!empty($user)) {
- $connect = 'FBConnectSettings';
- if (common_config('xmpp', 'enabled')) {
- $connect = 'imsettings';
- } else if (common_config('sms', 'enabled')) {
- $connect = 'smssettings';
- } else if (common_config('twitter', 'enabled')) {
- $connect = 'twittersettings';
- }
-
- if (!empty($user)) {
-
- $fbuid = $this->loggedIn();
-
- if (!empty($fbuid)) {
+ $fbuid = $this->loggedIn();
- /* Default FB silhouette pic for FB users who haven't
- uploaded a profile pic yet. */
+ if (!empty($fbuid)) {
- $silhouetteUrl =
- 'http://static.ak.fbcdn.net/pics/q_silhouette.gif';
+ /* Default FB silhouette pic for FB users who haven't
+ uploaded a profile pic yet. */
- $url = $this->getProfilePicURL($fbuid);
+ $silhouetteUrl =
+ 'http://static.ak.fbcdn.net/pics/q_silhouette.gif';
- $action->elementStart('li', array('id' => 'nav_fb'));
+ $url = $this->getProfilePicURL($fbuid);
- $action->element('img', array('id' => 'fbc_profile-pic',
- 'src' => (!empty($url)) ? $url : $silhouetteUrl,
- 'alt' => 'Facebook Connect User',
- 'width' => '16'), '');
+ $action->elementStart('li', array('id' => 'nav_fb'));
- $iconurl = common_path('plugins/Facebook/fbfavicon.ico');
- $action->element('img', array('id' => 'fb_favicon',
- 'src' => $iconurl));
+ $action->element('img', array('id' => 'fbc_profile-pic',
+ 'src' => (!empty($url)) ? $url : $silhouetteUrl,
+ 'alt' => 'Facebook Connect User',
+ 'width' => '16'), '');
- $action->elementEnd('li');
+ $iconurl = common_path('plugins/Facebook/fbfavicon.ico');
+ $action->element('img', array('id' => 'fb_favicon',
+ 'src' => $iconurl));
+ $action->elementEnd('li');
+ }
}
}
@@ -406,14 +480,15 @@ class FacebookPlugin extends Plugin
function onEndLoginGroupNav(&$action)
{
+ if (self::hasKeys()) {
- $action_name = $action->trimmed('action');
-
- $action->menuItem(common_local_url('FBConnectLogin'),
- _m('Facebook'),
- _m('Login or register using Facebook'),
- 'FBConnectLogin' === $action_name);
+ $action_name = $action->trimmed('action');
+ $action->menuItem(common_local_url('FBConnectLogin'),
+ _m('Facebook'),
+ _m('Login or register using Facebook'),
+ 'FBConnectLogin' === $action_name);
+ }
return true;
}
@@ -427,13 +502,15 @@ class FacebookPlugin extends Plugin
function onEndConnectSettingsNav(&$action)
{
- $action_name = $action->trimmed('action');
+ if (self::hasKeys()) {
- $action->menuItem(common_local_url('FBConnectSettings'),
- _m('Facebook'),
- _m('Facebook Connect Settings'),
- $action_name === 'FBConnectSettings');
+ $action_name = $action->trimmed('action');
+ $action->menuItem(common_local_url('FBConnectSettings'),
+ _m('Facebook'),
+ _m('Facebook Connect Settings'),
+ $action_name === 'FBConnectSettings');
+ }
return true;
}
@@ -447,20 +524,22 @@ class FacebookPlugin extends Plugin
function onStartLogout($action)
{
- $action->logout();
- $fbuid = $this->loggedIn();
+ if (self::hasKeys()) {
- if (!empty($fbuid)) {
- try {
- $facebook = getFacebook();
- $facebook->expire_session();
- } catch (Exception $e) {
- common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
- 'Could\'t logout of Facebook: ' .
- $e->getMessage());
+ $action->logout();
+ $fbuid = $this->loggedIn();
+
+ if (!empty($fbuid)) {
+ try {
+ $facebook = getFacebook();
+ $facebook->expire_session();
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
+ 'Could\'t logout of Facebook: ' .
+ $e->getMessage());
+ }
}
}
-
return true;
}
@@ -506,7 +585,9 @@ class FacebookPlugin extends Plugin
function onStartEnqueueNotice($notice, &$transports)
{
- array_push($transports, 'facebook');
+ if (self::hasKeys()) {
+ array_push($transports, 'facebook');
+ }
return true;
}
@@ -519,21 +600,26 @@ class FacebookPlugin extends Plugin
*/
function onEndInitializeQueueManager($manager)
{
- $manager->connect('facebook', 'FacebookQueueHandler');
+ if (self::hasKeys()) {
+ $manager->connect('facebook', 'FacebookQueueHandler');
+ }
return true;
}
function onPluginVersion(&$versions)
{
- $versions[] = array('name' => 'Facebook',
- 'version' => FACEBOOKPLUGIN_VERSION,
- 'author' => 'Zach Copley',
- 'homepage' => 'http://status.net/wiki/Plugin:Facebook',
- 'rawdescription' =>
- _m('The Facebook plugin allows you to integrate ' .
- 'your StatusNet instance with ' .
- '<a href="http://facebook.com/">Facebook</a> ' .
- 'and Facebook Connect.'));
+ $versions[] = array(
+ 'name' => 'Facebook',
+ 'version' => self::VERSION,
+ 'author' => 'Zach Copley',
+ 'homepage' => 'http://status.net/wiki/Plugin:Facebook',
+ 'rawdescription' => _m(
+ 'The Facebook plugin allows you to integrate ' .
+ 'your StatusNet instance with ' .
+ '<a href="http://facebook.com/">Facebook</a> ' .
+ 'and Facebook Connect.'
+ )
+ );
return true;
}
diff --git a/plugins/Facebook/README b/plugins/Facebook/README
index bf2f4a180..14c1d3241 100644
--- a/plugins/Facebook/README
+++ b/plugins/Facebook/README
@@ -1,6 +1,9 @@
-This plugin allows you to use Facebook Connect with StatusNet, provides a
-Facebook application for your users, and allows them to update their
-Facebook statuses from StatusNet.
+Facebook Plugin
+===============
+
+This plugin allows you to use Facebook Connect with StatusNet, provides
+a Facebook canvas application for your users, and allows them to update
+their Facebook statuses from StatusNet.
Facebook Connect
----------------
@@ -15,12 +18,12 @@ Facebook credentials. With Facebook Connect, your users can:
Built-in Facebook Application
-----------------------------
-The plugin also installs a StatusNet Facebook application that allows your
-users to automatically update their Facebook statuses with their latest
-notices, invite their friends to use the app (and thus your site), view
-their notice timelines, and post notices -- all from within Facebook. The
-application is built into the StatusNet Facebook plugin and runs on your
-host.
+The plugin also installs a StatusNet Facebook canvas application that
+allows your users to automatically update their Facebook status with
+their latest notices, invite their friends to use the app (and thus your
+site), view their notice timelines and post notices -- all from within
+Facebook. The application is built into the StatusNet Facebook plugin
+and runs on your host.
Quick setup instructions*
-------------------------
@@ -29,13 +32,9 @@ Install the Facebook Developer application on Facebook:
http://www.facebook.com/developers/
-Use it to create a new application and generate an API key and secret. Add a
-Facebook app section of your config.php and copy in the key and secret,
-e.g.:
-
- // Config section for the built-in Facebook application
- $config['facebook']['apikey'] = 'APIKEY';
- $config['facebook']['secret'] = 'SECRET';
+Use it to create a new application and generate an API key and secret.
+You will need the key and secret so cut-n-paste them into your text
+editor or write them down.
In Facebook's application editor, specify the following URLs for your app:
@@ -67,11 +66,36 @@ can be left with default values.
http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site
http://wiki.developers.facebook.com/index.php/Creating_your_first_application
-Finally you must activate the plugin by adding the following line to your
-config.php:
+Finally you must activate the plugin by adding it in your config.php
+(this is where you'll need the API key and secret generated earlier):
+
+ addPlugin(
+ 'Facebook',
+ array(
+ 'apikey' => 'YOUR_APIKEY',
+ 'secret' => 'YOUR_SECRET'
+ )
+ );
+
+Administration Panel
+--------------------
+
+As of StatusNet 0.9.0 you can alternatively specify the key and secret
+via a Facebook administration panel from within StatusNet, in which case
+you can just add:
addPlugin('Facebook');
+to activate the plugin.
+
+NOTE: To enable the administration panel you'll need to add it to the
+list of active administration panels, e.g.:
+
+ $config['admin']['panels'][] = 'facebook';
+
+and of course you'll need a user with the administrative role to access
+it and input the API key and secret (see: scripts/userrole.php).
+
Testing It Out
--------------
@@ -81,11 +105,11 @@ disconnect* to their Facebook accounts from it.
To try out the plugin, fire up your browser and connect to:
- http://SITE/PATH_TO_STATUSNET/main/facebooklogin
+ http://example.net/mublog/main/facebooklogin
or, if you do not have fancy URLs turned on:
- http://SITE/PATH_TO_STATUSNET/index.php/main/facebooklogin
+ http://example.net/mublog/index.php/main/facebooklogin
You should see a page with a blue button that says: "Connect with Facebook"
and you should be able to login or register.
@@ -101,7 +125,7 @@ the app, you are given the option to update their Facebook status via
StatusNet.
* Note: Before a user can disconnect from Facebook, she must set a normal
- StatusNet password. Otherwise, she might not be able to login in to her
+ StatusNet password. Otherwise, she might not be able to login in to her
account in the future. This is usually only required for users who have
used Facebook Connect to register their StatusNet account, and therefore
haven't already set a local password.
@@ -109,16 +133,20 @@ StatusNet.
Offline Queue Handling
----------------------
-For larger sites needing better performance it's possible to enable queuing
-and have users' notices posted to Facebook via a separate "offline"
-FacebookQueueHandler (facebookqueuhandler.php in the Facebook plugin
-directory), which will be started by the plugin along with their other
-daemons when you run scripts/startdaemons.sh. See the StatusNet README for
-more about queuing and daemons.
+For larger sites needing better performance it's possible to enable
+queuing and have users' notices posted to Facebook via a separate
+"offline" process -- FacebookQueueHandler (facebookqueuhandler.php in
+the Facebook plugin directory). It will run automatically if you have
+enabled StatusNet's offline queueing subsystem. See the "Queues and
+daemons" section in the StatusNet README for more about queuing.
+
TODO
----
+- Make Facebook Connect work for authentication for multi-site setups
+ (e.g.: *.status.net)
+- Posting to Facebook user streams using only Facebook Connect
- Invite Facebook friends to use your StatusNet installation via Facebook
Connect
- Auto-subscribe Facebook friends already using StatusNet
@@ -126,4 +154,4 @@ TODO
- Allow users to update their Facebook statuses once they have authenticated
with Facebook Connect (no need for them to use the Facebook app if they
don't want to).
-- Re-design the whole thing to support multiple instances of StatusNet
+- Import a user's Facebook updates into StatusNet
diff --git a/plugins/Facebook/facebookadminpanel.php b/plugins/Facebook/facebookadminpanel.php
new file mode 100644
index 000000000..ae1c7302f
--- /dev/null
+++ b/plugins/Facebook/facebookadminpanel.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Facebook integration administration panel
+ *
+ * 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 Settings
+ * @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);
+}
+
+/**
+ * Administer global Facebook integration settings
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class FacebookadminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return _m('Facebook');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _m('Facebook integration settings');
+ }
+
+ /**
+ * Show the Facebook admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new FacebookAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $settings = array(
+ 'facebook' => array('apikey', 'secret'),
+ );
+
+ $values = array();
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting]
+ = $this->trimmed($setting);
+ }
+ }
+
+ // This throws an exception on validation errors
+
+ $this->validate($values);
+
+ // assert(all values are valid);
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+ function validate(&$values)
+ {
+ // Validate consumer key and secret (can't be too long)
+
+ if (mb_strlen($values['facebook']['apikey']) > 255) {
+ $this->clientError(
+ _m("Invalid Facebook API key. Max length is 255 characters.")
+ );
+ }
+
+ if (mb_strlen($values['facebook']['secret']) > 255) {
+ $this->clientError(
+ _m("Invalid Facebook API secret. Max length is 255 characters.")
+ );
+ }
+ }
+}
+
+class FacebookAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'facebookadminpanel';
+ }
+
+ /**
+ * class of the form
+ *
+ * @return string class of the form
+ */
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ /**
+ * Action of the form
+ *
+ * @return string URL of the action
+ */
+
+ function action()
+ {
+ return common_local_url('facebookadminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart(
+ 'fieldset',
+ array('id' => 'settings_facebook-application')
+ );
+ $this->out->element('legend', null, _m('Facebook application settings'));
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->li();
+ $this->input(
+ 'apikey',
+ _m('API key'),
+ _m('API key provided by Facebook'),
+ 'facebook'
+ );
+ $this->unli();
+
+ $this->li();
+ $this->input(
+ 'secret',
+ _m('Secret'),
+ _m('API secret provided by Facebook'),
+ 'facebook'
+ );
+ $this->unli();
+
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('submit', _('Save'), 'submit', null, _('Save Facebook settings'));
+ }
+}
diff --git a/plugins/Facebook/locale/Facebook.po b/plugins/Facebook/locale/Facebook.po
index 5b313c8c5..4bc00248c 100644
--- a/plugins/Facebook/locale/Facebook.po
+++ b/plugins/Facebook/locale/Facebook.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,63 +59,31 @@ msgstr ""
msgid "Lost or forgotten password?"
msgstr ""
-#: facebookaction.php:386 facebookhome.php:248
+#: facebookaction.php:330 facebookhome.php:248
msgid "Pagination"
msgstr ""
-#: facebookaction.php:395 facebookhome.php:257
+#: facebookaction.php:339 facebookhome.php:257
msgid "After"
msgstr ""
-#: facebookaction.php:403 facebookhome.php:265
+#: facebookaction.php:347 facebookhome.php:265
msgid "Before"
msgstr ""
-#: facebookaction.php:421
+#: facebookaction.php:365
msgid "No notice content!"
msgstr ""
-#: facebookaction.php:427
+#: facebookaction.php:371
#, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
-#: facebookaction.php:523
+#: facebookaction.php:430
msgid "Notices"
msgstr ""
-#: facebookutil.php:280
-#, php-format
-msgid "Your %1$s Facebook application access has been disabled."
-msgstr ""
-
-#: facebookutil.php:283
-#, php-format
-msgid ""
-"Hi, %1$s. We're sorry to inform you that we are unable to update your "
-"Facebook status from %2$s, and have disabled the Facebook application for "
-"your account. This may be because you have removed the Facebook "
-"application's authorization, or have deleted your Facebook account. You can "
-"re-enable the Facebook application and automatic status updating by re-"
-"installing the %2$s Facebook application.\n"
-"\n"
-"Regards,\n"
-"\n"
-"%2$s"
-msgstr ""
-
-#: FBConnectLogin.php:33
-msgid "Already logged in."
-msgstr ""
-
-#: FBConnectLogin.php:41
-msgid "Login with your Facebook Account"
-msgstr ""
-
-#: FBConnectLogin.php:55
-msgid "Facebook Login"
-msgstr ""
-
#: facebookhome.php:111
msgid "Server error - couldn't get user!"
msgstr ""
@@ -149,50 +117,6 @@ msgstr ""
msgid "Skip"
msgstr ""
-#: facebooksettings.php:74
-msgid "There was a problem saving your sync preferences!"
-msgstr ""
-
-#: facebooksettings.php:76
-msgid "Sync preferences saved."
-msgstr ""
-
-#: facebooksettings.php:99
-msgid "Automatically update my Facebook status with my notices."
-msgstr ""
-
-#: facebooksettings.php:106
-msgid "Send \"@\" replies to Facebook."
-msgstr ""
-
-#: facebooksettings.php:115
-msgid "Prefix"
-msgstr ""
-
-#: facebooksettings.php:117
-msgid "A string to prefix notices with."
-msgstr ""
-
-#: facebooksettings.php:123
-msgid "Save"
-msgstr ""
-
-#: facebooksettings.php:133
-#, 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:146
-#, php-format
-msgid "Allow %s to update my Facebook status"
-msgstr ""
-
-#: facebooksettings.php:156
-msgid "Sync preferences"
-msgstr ""
-
#: facebookinvite.php:72
#, php-format
msgid "Thanks for inviting your friends to use %s"
@@ -221,61 +145,85 @@ msgstr ""
msgid "Send invitations"
msgstr ""
-#: facebookremove.php:58
-msgid "Couldn't remove Facebook user."
+#: FacebookPlugin.php:413 FacebookPlugin.php:433
+msgid "Facebook"
msgstr ""
-#: FBConnectSettings.php:56 FacebookPlugin.php:430
+#: FacebookPlugin.php:414
+msgid "Login or register using Facebook"
+msgstr ""
+
+#: FacebookPlugin.php:434 FBConnectSettings.php:56
msgid "Facebook Connect Settings"
msgstr ""
-#: FBConnectSettings.php:67
-msgid "Manage how your account connects to Facebook"
+#: FacebookPlugin.php:533
+msgid ""
+"The Facebook plugin allows you to integrate your StatusNet instance with <a "
+"href=\"http://facebook.com/\">Facebook</a> and Facebook Connect."
msgstr ""
-#: FBConnectSettings.php:92
-msgid "There is no Facebook user connected to this account."
+#: facebookremove.php:58
+msgid "Couldn't remove Facebook user."
msgstr ""
-#: FBConnectSettings.php:100
-msgid "Connected Facebook user"
+#: facebooksettings.php:74
+msgid "There was a problem saving your sync preferences!"
msgstr ""
-#: FBConnectSettings.php:119
-msgid "Disconnect my account from Facebook"
+#: facebooksettings.php:76
+msgid "Sync preferences saved."
msgstr ""
-#: FBConnectSettings.php:124
-msgid ""
-"Disconnecting your Faceboook would make it impossible to log in! Please "
+#: facebooksettings.php:99
+msgid "Automatically update my Facebook status with my notices."
msgstr ""
-#: FBConnectSettings.php:128
-msgid "set a password"
+#: facebooksettings.php:106
+msgid "Send \"@\" replies to Facebook."
msgstr ""
-#: FBConnectSettings.php:130
-msgid " first."
+#: facebooksettings.php:115
+msgid "Prefix"
msgstr ""
-#: FBConnectSettings.php:142
-msgid "Disconnect"
+#: facebooksettings.php:117
+msgid "A string to prefix notices with."
msgstr ""
-#: FBConnectSettings.php:164 FBConnectAuth.php:90
-msgid "There was a problem with your session token. Try again, please."
+#: facebooksettings.php:123
+msgid "Save"
msgstr ""
-#: FBConnectSettings.php:178
-msgid "Couldn't delete link to Facebook."
+#: facebooksettings.php:133
+#, 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 ""
-#: FBConnectSettings.php:194
-msgid "You have disconnected from Facebook."
+#: facebooksettings.php:146
+#, php-format
+msgid "Allow %s to update my Facebook status"
msgstr ""
-#: FBConnectSettings.php:197
-msgid "Not sure what you're trying to do."
+#: facebooksettings.php:156
+msgid "Sync preferences"
+msgstr ""
+
+#: facebookutil.php:285
+#, php-format
+msgid ""
+"Hi, %1$s. We're sorry to inform you that we are unable to update your "
+"Facebook status from %2$s, and have disabled the Facebook application for "
+"your account. This may be because you have removed the Facebook "
+"application's authorization, or have deleted your Facebook account. You can "
+"re-enable the Facebook application and automatic status updating by re-"
+"installing the %2$s Facebook application.\n"
+"\n"
+"Regards,\n"
+"\n"
+"%2$s"
msgstr ""
#: FBConnectAuth.php:51
@@ -286,6 +234,10 @@ msgstr ""
msgid "There is already a local user linked with this Facebook."
msgstr ""
+#: FBConnectAuth.php:90 FBConnectSettings.php:164
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
#: FBConnectAuth.php:95
msgid "You can't register if you don't agree to the license."
msgstr ""
@@ -385,10 +337,59 @@ msgstr ""
msgid "Invalid username or password."
msgstr ""
-#: FacebookPlugin.php:409 FacebookPlugin.php:429
-msgid "Facebook"
+#: FBConnectLogin.php:33
+msgid "Already logged in."
msgstr ""
-#: FacebookPlugin.php:410
-msgid "Login or register using Facebook"
+#: FBConnectLogin.php:41
+msgid "Login with your Facebook Account"
+msgstr ""
+
+#: FBConnectLogin.php:55
+msgid "Facebook Login"
+msgstr ""
+
+#: FBConnectSettings.php:67
+msgid "Manage how your account connects to Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:92
+msgid "There is no Facebook user connected to this account."
+msgstr ""
+
+#: FBConnectSettings.php:100
+msgid "Connected Facebook user"
+msgstr ""
+
+#: FBConnectSettings.php:119
+msgid "Disconnect my account from Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:124
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please "
+msgstr ""
+
+#: FBConnectSettings.php:128
+msgid "set a password"
+msgstr ""
+
+#: FBConnectSettings.php:130
+msgid " first."
+msgstr ""
+
+#: FBConnectSettings.php:142
+msgid "Disconnect"
+msgstr ""
+
+#: FBConnectSettings.php:178
+msgid "Couldn't delete link to Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:194
+msgid "You have disconnected from Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:197
+msgid "Not sure what you're trying to do."
msgstr ""
diff --git a/plugins/Gravatar/locale/Gravatar.po b/plugins/Gravatar/locale/Gravatar.po
index 1df62b666..d7275b929 100644
--- a/plugins/Gravatar/locale/Gravatar.po
+++ b/plugins/Gravatar/locale/Gravatar.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-11 16:27-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,3 +59,9 @@ msgstr ""
#: GravatarPlugin.php:177
msgid "Gravatar removed."
msgstr ""
+
+#: GravatarPlugin.php:196
+msgid ""
+"The Gravatar plugin allows users to use their <a href=\"http://www.gravatar."
+"com/\">Gravatar</a> with StatusNet."
+msgstr ""
diff --git a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
index 768f0fe7f..e0fd615dd 100644
--- a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
+++ b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
@@ -76,6 +76,32 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
return false;
}
}
+
+ function onEndShowPageNotice($action)
+ {
+ $name = $action->trimmed('action');
+ $instr = false;
+
+ switch ($name)
+ {
+ case 'register':
+ if($this->autoregistration) {
+ $instr = 'Have an LDAP account? Use your standard username and password.';
+ }
+ break;
+ case 'login':
+ $instr = 'Have an LDAP account? Use your standard username and password.';
+ break;
+ default:
+ return true;
+ }
+
+ if($instr) {
+ $output = common_markup_to_html($instr);
+ $action->raw($output);
+ }
+ return true;
+ }
//---interface implementation---//
@@ -163,15 +189,14 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
$entry = $this->ldap_get_user($username, $this->attributes);
if(!$entry){
//this really shouldn't happen
- return $username;
+ $nickname = $username;
}else{
$nickname = $entry->getValue($this->attributes['nickname'],'single');
- if($nickname){
- return $nickname;
- }else{
- return $username;
+ if(!$nickname){
+ $nickname = $username;
}
}
+ return common_nicknamize($nickname);
}
//---utility functions---//
@@ -199,8 +224,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
$ldap->setErrorHandling(PEAR_ERROR_RETURN);
$err=$ldap->bind();
if (Net_LDAP2::isError($err)) {
- common_log(LOG_WARNING, 'Could not connect to LDAP server: '.$err->getMessage());
- return false;
+ throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
}
if($config == null) $this->default_ldap=$ldap;
diff --git a/plugins/LdapAuthentication/README b/plugins/LdapAuthentication/README
index 0460fb639..c188f2dbc 100644
--- a/plugins/LdapAuthentication/README
+++ b/plugins/LdapAuthentication/README
@@ -9,7 +9,10 @@ to the bottom of your config.php
Settings
========
-provider_name*: a unique name for this authentication provider.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
authoritative (false): Set to true if LDAP's responses are authoritative
(if authorative and LDAP fails, no other password checking will be done).
autoregistration (false): Set to true if users should be automatically created
diff --git a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
index 7f48ce5e1..19aff42b8 100644
--- a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
+++ b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
@@ -167,7 +167,7 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
$ldap->setErrorHandling(PEAR_ERROR_RETURN);
$err=$ldap->bind();
if (Net_LDAP2::isError($err)) {
- common_log(LOG_WARNING, 'Could not connect to LDAP server: '.$err->getMessage());
+ throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
return false;
}
if($config == null) $this->default_ldap=$ldap;
@@ -185,6 +185,9 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
if($ldap==null) {
$ldap = $this->ldap_get_connection();
}
+ if(! $ldap) {
+ throw new Exception("Could not connect to LDAP");
+ }
$filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
$options = array(
'attributes' => $attributes
diff --git a/plugins/LdapAuthorization/README b/plugins/LdapAuthorization/README
index 44239d8e0..3a6d8d25e 100644
--- a/plugins/LdapAuthorization/README
+++ b/plugins/LdapAuthorization/README
@@ -11,7 +11,10 @@ You *cannot* use this plugin without the LDAP Authentication plugin
Settings
========
-provider_name*: name of the LDAP authentication provider that this plugin works with.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
authoritative (false): should this plugin be authoritative for
authorization?
uniqueMember_attribute ('uniqueMember')*: the attribute of a group
diff --git a/plugins/Mapstraction/locale/Mapstraction.po b/plugins/Mapstraction/locale/Mapstraction.po
index c1c50bf50..1dd5dbbcc 100644
--- a/plugins/Mapstraction/locale/Mapstraction.po
+++ b/plugins/Mapstraction/locale/Mapstraction.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -34,15 +34,21 @@ msgstr ""
msgid "User has no profile."
msgstr ""
-#: usermap.php:71
-#, php-format
-msgid "%s map, page %d"
-msgstr ""
-
-#: MapstractionPlugin.php:180
+#: MapstractionPlugin.php:182
msgid "Map"
msgstr ""
-#: MapstractionPlugin.php:191
+#: MapstractionPlugin.php:193
msgid "Full size"
msgstr ""
+
+#: MapstractionPlugin.php:205
+msgid ""
+"Show maps of users' and friends' notices with <a href=\"http://www."
+"mapstraction.com/\">Mapstraction</a> JavaScript library."
+msgstr ""
+
+#: usermap.php:71
+#, php-format
+msgid "%s map, page %d"
+msgstr ""
diff --git a/plugins/Mapstraction/map.php b/plugins/Mapstraction/map.php
index a33dfc736..b809c1b8e 100644
--- a/plugins/Mapstraction/map.php
+++ b/plugins/Mapstraction/map.php
@@ -142,8 +142,6 @@ class MapAction extends OwnerDesignAction
// of refactoring from within a plugin, so I'm just abusing
// the ApiAction method. Don't do this unless you're me!
- require_once(INSTALLDIR.'/lib/api.php');
-
$act = new ApiAction('/dev/null');
$arr = $act->twitterStatusArray($notice, true);
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
index cd2531fa7..0b37734b7 100644
--- a/plugins/MobileProfile/MobileProfilePlugin.php
+++ b/plugins/MobileProfile/MobileProfilePlugin.php
@@ -307,25 +307,14 @@ class MobileProfilePlugin extends WAP20Plugin
function _showPrimaryNav($action)
{
$user = common_current_user();
- $connect = '';
- if (common_config('xmpp', 'enabled')) {
- $connect = 'imsettings';
- } else if (common_config('sms', 'enabled')) {
- $connect = 'smssettings';
- } else if (common_config('twitter', 'enabled')) {
- $connect = 'twittersettings';
- }
-
$action->elementStart('ul', array('id' => 'site_nav_global_primary'));
if ($user) {
$action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
_('Home'));
$action->menuItem(common_local_url('profilesettings'),
_('Account'));
- if ($connect) {
- $action->menuItem(common_local_url($connect),
+ $action->menuItem(common_local_url('oauthconnectionssettings'),
_('Connect'));
- }
if ($user->hasRight(Right::CONFIGURESITE)) {
$action->menuItem(common_local_url('siteadminpanel'),
_('Admin'), _('Change site configuration'), false, 'nav_admin');
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index 3686c0226..efb630297 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -1,17 +1,7 @@
<?php
/*
-StatusNet Plugin: 0.9
-Plugin Name: FeedSub
-Plugin URI: http://status.net/wiki/Feed_subscription
-Description: FeedSub allows subscribing to real-time updates from external feeds supporting PubHubSubbub protocol.
-Version: 0.1
-Author: Brion Vibber <brion@status.net>
-Author URI: http://status.net/
-*/
-
-/*
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
+ * Copyright (C) 2009-2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -28,16 +18,13 @@ Author URI: http://status.net/
*/
/**
- * @package FeedSubPlugin
+ * @package OStatusPlugin
* @maintainer Brion Vibber <brion@status.net>
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-define('FEEDSUB_SERVICE', 100); // fixme -- avoid hardcoding these?
-
-// We bundle the XML_Parse_Feed library...
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib');
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/');
class FeedSubException extends Exception
{
@@ -56,16 +43,20 @@ class OStatusPlugin extends Plugin
// Discovery actions
$m->connect('.well-known/host-meta',
array('action' => 'hostmeta'));
- $m->connect('main/webfinger',
- array('action' => 'webfinger'));
+ $m->connect('main/xrd',
+ array('action' => 'userxrd'));
+ $m->connect('main/ownerxrd',
+ array('action' => 'ownerxrd'));
$m->connect('main/ostatus',
array('action' => 'ostatusinit'));
$m->connect('main/ostatus?nickname=:nickname',
array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+'));
+ $m->connect('main/ostatus?group=:group',
+ array('action' => 'ostatusinit'), array('group' => '[A-Za-z0-9_-]+'));
$m->connect('main/ostatussub',
array('action' => 'ostatussub'));
- $m->connect('main/ostatussub',
- array('action' => 'ostatussub'), array('feed' => '[A-Za-z0-9\.\/\:]+'));
+ $m->connect('main/ostatusgroup',
+ array('action' => 'ostatusgroup'));
// PuSH actions
$m->connect('main/push/hub', array('action' => 'pushhub'));
@@ -73,15 +64,13 @@ class OStatusPlugin extends Plugin
$m->connect('main/push/callback/:feed',
array('action' => 'pushcallback'),
array('feed' => '[0-9]+'));
- $m->connect('settings/feedsub',
- array('action' => 'feedsubsettings'));
// Salmon endpoint
$m->connect('main/salmon/user/:id',
- array('action' => 'salmon'),
+ array('action' => 'usersalmon'),
array('id' => '[0-9]+'));
$m->connect('main/salmon/group/:id',
- array('action' => 'salmongroup'),
+ array('action' => 'groupsalmon'),
array('id' => '[0-9]+'));
return true;
}
@@ -93,9 +82,18 @@ class OStatusPlugin extends Plugin
*/
function onEndInitializeQueueManager(QueueManager $qm)
{
- $qm->connect('hubverify', 'HubVerifyQueueHandler');
- $qm->connect('hubdistrib', 'HubDistribQueueHandler');
+ // Prepare outgoing distributions after notice save.
+ $qm->connect('ostatus', 'OStatusQueueHandler');
+
+ // Outgoing from our internal PuSH hub
+ $qm->connect('hubconf', 'HubConfQueueHandler');
$qm->connect('hubout', 'HubOutQueueHandler');
+
+ // Outgoing Salmon replies (when we don't need a return value)
+ $qm->connect('salmon', 'SalmonQueueHandler');
+
+ // Incoming from a foreign PuSH hub
+ $qm->connect('pushin', 'PushInQueueHandler');
return true;
}
@@ -104,29 +102,48 @@ class OStatusPlugin extends Plugin
*/
function onStartEnqueueNotice($notice, &$transports)
{
- $transports[] = 'hubdistrib';
+ $transports[] = 'ostatus';
return true;
}
/**
+ * Add a link header for LRDD Discovery
+ */
+ function onStartShowHTML($action)
+ {
+ if ($action instanceof ShowstreamAction) {
+ $acct = 'acct:'. $action->profile->nickname .'@'. common_config('site', 'server');
+ $url = common_local_url('userxrd');
+ $url.= '?uri='. $acct;
+
+ header('Link: <'.$url.'>; rel="'. Discovery::LRDD_REL.'"; type="application/xrd+xml"');
+ }
+ }
+
+ /**
* Set up a PuSH hub link to our internal link for canonical timeline
* Atom feeds for users and groups.
*/
- function onStartApiAtom(AtomNoticeFeed $feed)
+ function onStartApiAtom($feed)
{
$id = null;
if ($feed instanceof AtomUserNoticeFeed) {
- $salmonAction = 'salmon';
- $id = $feed->getUser()->id;
+ $salmonAction = 'usersalmon';
+ $user = $feed->getUser();
+ $id = $user->id;
+ $profile = $user->getProfile();
+ $feed->setActivitySubject($profile->asActivityNoun('subject'));
} else if ($feed instanceof AtomGroupNoticeFeed) {
- $salmonAction = 'salmongroup';
- $id = $feed->getGroup()->id;
+ $salmonAction = 'groupsalmon';
+ $group = $feed->getGroup();
+ $id = $group->id;
+ $feed->setActivitySubject($group->asActivitySubject());
} else {
- return;
+ return true;
}
- if (!empty($id)) {
+ if (!empty($id)) {
$hub = common_config('ostatus', 'hub');
if (empty($hub)) {
// Updates will be handled through our internal PuSH hub.
@@ -136,25 +153,9 @@ class OStatusPlugin extends Plugin
// Also, we'll add in the salmon link
$salmon = common_local_url($salmonAction, array('id' => $id));
- $feed->addLink($salmon, array('rel' => 'salmon'));
+ $feed->addLink($salmon, array('rel' => Salmon::NS_REPLIES));
+ $feed->addLink($salmon, array('rel' => Salmon::NS_MENTIONS));
}
- }
-
- /**
- * Add the feed settings page to the Connect Settings menu
- *
- * @param Action &$action The calling page
- *
- * @return boolean hook return
- */
- function onEndConnectSettingsNav(&$action)
- {
- $action_name = $action->trimmed('action');
-
- $action->menuItem(common_local_url('feedsubsettings'),
- _m('Feeds'),
- _m('Feed subscription options'),
- $action_name === 'feedsubsettings');
return true;
}
@@ -171,6 +172,12 @@ class OStatusPlugin extends Plugin
{
$base = dirname(__FILE__);
$lower = strtolower($cls);
+ $map = array('activityverb' => 'activity',
+ 'activityobject' => 'activity',
+ 'activityutils' => 'activity');
+ if (isset($map[$lower])) {
+ $lower = $map[$lower];
+ }
$files = array("$base/classes/$cls.php",
"$base/lib/$lower.php");
if (substr($lower, -6) == 'action') {
@@ -207,66 +214,110 @@ class OStatusPlugin extends Plugin
return false;
}
+ function onStartGroupSubscribe($output, $group)
+ {
+ $cur = common_current_user();
+
+ if (empty($cur)) {
+ // Add an OStatus subscribe
+ $url = common_local_url('ostatusinit',
+ array('group' => $group->nickname));
+ $output->element('a', array('href' => $url,
+ 'class' => 'entity_remote_subscribe'),
+ _m('Join'));
+ }
+
+ return true;
+ }
+
/**
* Check if we've got remote replies to send via Salmon.
*
* @fixme push webfinger lookup & sending to a background queue
* @fixme also detect short-form name for remote subscribees where not ambiguous
*/
+
function onEndNoticeSave($notice)
{
- $count = preg_match_all('/(\w+\.)*\w+@(\w+\.)*\w+(\w+\-\w+)*\.\w+/', $notice->content, $matches);
- if ($count) {
- foreach ($matches[0] as $webfinger) {
-
- // FIXME: look up locally first
-
- // Check to see if we've got an actual webfinger
- $w = new Webfinger;
-
- $endpoint_uri = '';
+ }
- $result = $w->lookup($webfinger);
- if (empty($result)) {
- continue;
- }
+ /**
+ * Find any explicit remote mentions. Accepted forms:
+ * Webfinger: @user@example.com
+ * Profile link: @example.com/mublog/user
+ * @param Profile $sender (os user?)
+ * @param string $text input markup text
+ * @param array &$mention in/out param: set of found mentions
+ * @return boolean hook return value
+ */
- foreach ($result->links as $link) {
- if ($link['rel'] == 'salmon') {
- $endpoint_uri = $link['href'];
+ function onEndFindMentions($sender, $text, &$mentions)
+ {
+ $matches = array();
+
+ // Webfinger matches: @user@example.com
+ if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)!',
+ $text,
+ $wmatches,
+ PREG_OFFSET_CAPTURE)) {
+ foreach ($wmatches[1] as $wmatch) {
+ list($target, $pos) = $wmatch;
+ $this->log(LOG_INFO, "Checking webfinger '$target'");
+ try {
+ $oprofile = Ostatus_profile::ensureWebfinger($target);
+ if ($oprofile && !$oprofile->isGroup()) {
+ $profile = $oprofile->localProfile();
+ $matches[$pos] = array('mentioned' => array($profile),
+ 'text' => $target,
+ 'position' => $pos,
+ 'url' => $profile->profileurl);
}
+ } catch (Exception $e) {
+ $this->log(LOG_ERR, "Webfinger check failed: " . $e->getMessage());
}
+ }
+ }
- if (empty($endpoint_uri)) {
- continue;
+ // Profile matches: @example.com/mublog/user
+ if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+(?:/\w+)+)!',
+ $text,
+ $wmatches,
+ PREG_OFFSET_CAPTURE)) {
+ foreach ($wmatches[1] as $wmatch) {
+ list($target, $pos) = $wmatch;
+ $schemes = array('http', 'https');
+ foreach ($schemes as $scheme) {
+ $url = "$scheme://$target";
+ $this->log(LOG_INFO, "Checking profile address '$url'");
+ try {
+ $oprofile = Ostatus_profile::ensureProfile($url);
+ if ($oprofile && !$oprofile->isGroup()) {
+ $profile = $oprofile->localProfile();
+ $matches[$pos] = array('mentioned' => array($profile),
+ 'text' => $target,
+ 'position' => $pos,
+ 'url' => $profile->profileurl);
+ break;
+ }
+ } catch (Exception $e) {
+ $this->log(LOG_ERR, "Profile check failed: " . $e->getMessage());
+ }
}
-
- // FIXME: this needs to go out in a queue handler
-
- $xml = '<?xml version="1.0" encoding="UTF-8" ?>';
- $xml .= $notice->asAtomEntry();
-
- $salmon = new Salmon();
- $salmon->post($endpoint_uri, $xml);
}
}
- }
- /**
- * Garbage collect unused feeds on unsubscribe
- */
- function onEndUnsubscribe($user, $other)
- {
- $profile = Ostatus_profile::staticGet('profile_id', $other->id);
- if ($feed) {
- $sub = new Subscription();
- $sub->subscribed = $other->id;
- $sub->limit(1);
- if (!$sub->find(true)) {
- common_log(LOG_INFO, "Unsubscribing from now-unused feed $feed->feeduri on hub $feed->huburi");
- $profile->unsubscribe();
+ foreach ($mentions as $i => $other) {
+ // If we share a common prefix with a local user, override it!
+ $pos = $other['position'];
+ if (isset($matches[$pos])) {
+ $mentions[$i] = $matches[$pos];
+ unset($matches[$pos]);
}
}
+ foreach ($matches as $mention) {
+ $mentions[] = $mention;
+ }
+
return true;
}
@@ -276,7 +327,10 @@ class OStatusPlugin extends Plugin
function onCheckSchema() {
$schema = Schema::get();
$schema->ensureTable('ostatus_profile', Ostatus_profile::schemaDef());
+ $schema->ensureTable('ostatus_source', Ostatus_source::schemaDef());
+ $schema->ensureTable('feedsub', FeedSub::schemaDef());
$schema->ensureTable('hubsub', HubSub::schemaDef());
+ $schema->ensureTable('magicsig', Magicsig::schemaDef());
return true;
}
@@ -290,16 +344,509 @@ class OStatusPlugin extends Plugin
return true;
}
+ /**
+ * Override the "from ostatus" bit in notice lists to link to the
+ * original post and show the domain it came from.
+ *
+ * @param Notice in $notice
+ * @param string out &$name
+ * @param string out &$url
+ * @param string out &$title
+ * @return mixed hook return code
+ */
function onStartNoticeSourceLink($notice, &$name, &$url, &$title)
{
if ($notice->source == 'ostatus') {
- $bits = parse_url($notice->uri);
- $domain = $bits['host'];
+ if ($notice->url) {
+ $bits = parse_url($notice->url);
+ $domain = $bits['host'];
+ if (substr($domain, 0, 4) == 'www.') {
+ $name = substr($domain, 4);
+ } else {
+ $name = $domain;
+ }
+
+ $url = $notice->url;
+ $title = sprintf(_m("Sent from %s via OStatus"), $domain);
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Send incoming PuSH feeds for OStatus endpoints in for processing.
+ *
+ * @param FeedSub $feedsub
+ * @param DOMDocument $feed
+ * @return mixed hook return code
+ */
+ function onStartFeedSubReceive($feedsub, $feed)
+ {
+ $oprofile = Ostatus_profile::staticGet('feeduri', $feedsub->uri);
+ if ($oprofile) {
+ $oprofile->processFeed($feed, 'push');
+ } else {
+ common_log(LOG_DEBUG, "No ostatus profile for incoming feed $feedsub->uri");
+ }
+ }
+
+ /**
+ * When about to subscribe to a remote user, start a server-to-server
+ * PuSH subscription if needed. If we can't establish that, abort.
+ *
+ * @fixme If something else aborts later, we could end up with a stray
+ * PuSH subscription. This is relatively harmless, though.
+ *
+ * @param Profile $subscriber
+ * @param Profile $other
+ *
+ * @return hook return code
+ *
+ * @throws Exception
+ */
+ function onStartSubscribe($subscriber, $other)
+ {
+ $user = User::staticGet('id', $subscriber->id);
+
+ if (empty($user)) {
+ return true;
+ }
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $other->id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ if (!$oprofile->subscribe()) {
+ throw new Exception(_m('Could not set up remote subscription.'));
+ }
+ }
+
+ /**
+ * Having established a remote subscription, send a notification to the
+ * remote OStatus profile's endpoint.
+ *
+ * @param Profile $subscriber
+ * @param Profile $other
+ *
+ * @return hook return code
+ *
+ * @throws Exception
+ */
+ function onEndSubscribe($subscriber, $other)
+ {
+ $user = User::staticGet('id', $subscriber->id);
+
+ if (empty($user)) {
+ return true;
+ }
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $other->id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::FOLLOW;
+
+ $act->id = TagURI::mint('follow:%d:%d:%s',
+ $subscriber->id,
+ $other->id,
+ common_date_iso8601(time()));
+
+ $act->time = time();
+ $act->title = _("Follow");
+ $act->content = sprintf(_("%s is now following %s."),
+ $subscriber->getBestName(),
+ $other->getBestName());
+
+ $act->actor = ActivityObject::fromProfile($subscriber);
+ $act->object = ActivityObject::fromProfile($other);
+
+ $oprofile->notifyActivity($act, $subscriber);
+
+ return true;
+ }
+
+ /**
+ * Notify remote server and garbage collect unused feeds on unsubscribe.
+ * @fixme send these operations to background queues
+ *
+ * @param User $user
+ * @param Profile $other
+ * @return hook return value
+ */
+ function onEndUnsubscribe($profile, $other)
+ {
+ $user = User::staticGet('id', $profile->id);
+
+ if (empty($user)) {
+ return true;
+ }
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $other->id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ // Drop the PuSH subscription if there are no other subscribers.
+ $oprofile->garbageCollect();
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::UNFOLLOW;
+
+ $act->id = TagURI::mint('unfollow:%d:%d:%s',
+ $profile->id,
+ $other->id,
+ common_date_iso8601(time()));
+
+ $act->time = time();
+ $act->title = _("Unfollow");
+ $act->content = sprintf(_("%s stopped following %s."),
+ $profile->getBestName(),
+ $other->getBestName());
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->object = ActivityObject::fromProfile($other);
- $name = $domain;
- $url = $notice->uri;
- $title = sprintf(_m("Sent from %s via OStatus"), $domain);
+ $oprofile->notifyActivity($act, $profile);
+
+ return true;
+ }
+
+ /**
+ * When one of our local users tries to join a remote group,
+ * notify the remote server. If the notification is rejected,
+ * deny the join.
+ *
+ * @param User_group $group
+ * @param User $user
+ *
+ * @return mixed hook return value
+ */
+
+ function onStartJoinGroup($group, $user)
+ {
+ $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+ if ($oprofile) {
+ if (!$oprofile->subscribe()) {
+ throw new Exception(_m('Could not set up remote group membership.'));
+ }
+
+ $member = Profile::staticGet($user->id);
+
+ $act = new Activity();
+ $act->id = TagURI::mint('join:%d:%d:%s',
+ $member->id,
+ $group->id,
+ common_date_iso8601(time()));
+
+ $act->actor = ActivityObject::fromProfile($member);
+ $act->verb = ActivityVerb::JOIN;
+ $act->object = $oprofile->asActivityObject();
+
+ $act->time = time();
+ $act->title = _m("Join");
+ $act->content = sprintf(_m("%s has joined group %s."),
+ $member->getBestName(),
+ $oprofile->getBestName());
+
+ if ($oprofile->notifyActivity($act, $member)) {
+ return true;
+ } else {
+ $oprofile->garbageCollect();
+ throw new Exception(_m("Failed joining remote group."));
+ }
+ }
+ }
+
+ /**
+ * When one of our local users leaves a remote group, notify the remote
+ * server.
+ *
+ * @fixme Might be good to schedule a resend of the leave notification
+ * if it failed due to a transitory error. We've canceled the local
+ * membership already anyway, but if the remote server comes back up
+ * it'll be left with a stray membership record.
+ *
+ * @param User_group $group
+ * @param User $user
+ *
+ * @return mixed hook return value
+ */
+
+ function onEndLeaveGroup($group, $user)
+ {
+ $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+ if ($oprofile) {
+ // Drop the PuSH subscription if there are no other subscribers.
+ $oprofile->garbageCollect();
+
+ $member = Profile::staticGet($user->id);
+
+ $act = new Activity();
+ $act->id = TagURI::mint('leave:%d:%d:%s',
+ $member->id,
+ $group->id,
+ common_date_iso8601(time()));
+
+ $act->actor = ActivityObject::fromProfile($member);
+ $act->verb = ActivityVerb::LEAVE;
+ $act->object = $oprofile->asActivityObject();
+
+ $act->time = time();
+ $act->title = _m("Leave");
+ $act->content = sprintf(_m("%s has left group %s."),
+ $member->getBestName(),
+ $oprofile->getBestName());
+
+ $oprofile->notifyActivity($act, $member);
+ }
+ }
+
+ /**
+ * Notify remote users when their notices get favorited.
+ *
+ * @param Profile or User $profile of local user doing the faving
+ * @param Notice $notice being favored
+ * @return hook return value
+ */
+
+ function onEndFavorNotice(Profile $profile, Notice $notice)
+ {
+ $user = User::staticGet('id', $profile->id);
+
+ if (empty($user)) {
+ return true;
+ }
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::FAVORITE;
+ $act->id = TagURI::mint('favor:%d:%d:%s',
+ $profile->id,
+ $notice->id,
+ common_date_iso8601(time()));
+
+ $act->time = time();
+ $act->title = _("Favor");
+ $act->content = sprintf(_("%s marked notice %s as a favorite."),
+ $profile->getBestName(),
+ $notice->uri);
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->object = ActivityObject::fromNotice($notice);
+
+ $oprofile->notifyActivity($act, $profile);
+
+ return true;
+ }
+
+ /**
+ * Notify remote users when their notices get de-favorited.
+ *
+ * @param Profile $profile Profile person doing the de-faving
+ * @param Notice $notice Notice being favored
+ *
+ * @return hook return value
+ */
+
+ function onEndDisfavorNotice(Profile $profile, Notice $notice)
+ {
+ $user = User::staticGet('id', $profile->id);
+
+ if (empty($user)) {
+ return true;
+ }
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $notice->profile_id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::UNFAVORITE;
+ $act->id = TagURI::mint('disfavor:%d:%d:%s',
+ $profile->id,
+ $notice->id,
+ common_date_iso8601(time()));
+ $act->time = time();
+ $act->title = _("Disfavor");
+ $act->content = sprintf(_("%s marked notice %s as no longer a favorite."),
+ $profile->getBestName(),
+ $notice->uri);
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->object = ActivityObject::fromNotice($notice);
+
+ $oprofile->notifyActivity($act, $profile);
+
+ return true;
+ }
+
+ function onStartGetProfileUri($profile, &$uri)
+ {
+ $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
+ if (!empty($oprofile)) {
+ $uri = $oprofile->uri;
+ return false;
+ }
+ return true;
+ }
+
+ function onStartUserGroupHomeUrl($group, &$url)
+ {
+ return $this->onStartUserGroupPermalink($group, $url);
+ }
+
+ function onStartUserGroupPermalink($group, &$url)
+ {
+ $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+ if ($oprofile) {
+ // @fixme this should probably be in the user_group table
+ // @fixme this uri not guaranteed to be a profile page
+ $url = $oprofile->uri;
return false;
}
}
+
+ function onStartShowSubscriptionsContent($action)
+ {
+ $this->showEntityRemoteSubscribe($action);
+
+ return true;
+ }
+
+ function onStartShowUserGroupsContent($action)
+ {
+ $this->showEntityRemoteSubscribe($action, 'ostatusgroup');
+
+ return true;
+ }
+
+ function onEndShowSubscriptionsMiniList($action)
+ {
+ $this->showEntityRemoteSubscribe($action);
+
+ return true;
+ }
+
+ function onEndShowGroupsMiniList($action)
+ {
+ $this->showEntityRemoteSubscribe($action, 'ostatusgroup');
+
+ return true;
+ }
+
+ function showEntityRemoteSubscribe($action, $target='ostatussub')
+ {
+ $user = common_current_user();
+ if ($user && ($user->id == $action->profile->id)) {
+ $action->elementStart('div', 'entity_actions');
+ $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'));
+ $action->elementEnd('p');
+ $action->elementEnd('div');
+ }
+ }
+
+ /**
+ * Ping remote profiles with updates to this profile.
+ * Salmon pings are queued for background processing.
+ */
+ function onEndBroadcastProfile(Profile $profile)
+ {
+ $user = User::staticGet('id', $profile->id);
+
+ // Find foreign accounts I'm subscribed to that support Salmon pings.
+ //
+ // @fixme we could run updates through the PuSH feed too,
+ // in which case we can skip Salmon pings to folks who
+ // are also subscribed to me.
+ $sql = "SELECT * FROM ostatus_profile " .
+ "WHERE profile_id IN " .
+ "(SELECT subscribed FROM subscription WHERE subscriber=%d) " .
+ "OR group_id IN " .
+ "(SELECT group_id FROM group_member WHERE profile_id=%d)";
+ $oprofile = new Ostatus_profile();
+ $oprofile->query(sprintf($sql, $profile->id, $profile->id));
+
+ if ($oprofile->N == 0) {
+ common_log(LOG_DEBUG, "No OStatus remote subscribees for $profile->nickname");
+ return true;
+ }
+
+ $act = new Activity();
+
+ $act->verb = ActivityVerb::UPDATE_PROFILE;
+ $act->id = TagURI::mint('update-profile:%d:%s',
+ $profile->id,
+ common_date_iso8601(time()));
+ $act->time = time();
+ $act->title = _m("Profile update");
+ $act->content = sprintf(_m("%s has updated their profile page."),
+ $profile->getBestName());
+
+ $act->actor = ActivityObject::fromProfile($profile);
+ $act->object = $act->actor;
+
+ while ($oprofile->fetch()) {
+ $oprofile->notifyDeferred($act, $profile);
+ }
+
+ return true;
+ }
+
+ function onStartProfileListItemActionElements($item)
+ {
+ if (!common_logged_in()) {
+
+ $profileUser = User::staticGet('id', $item->profile->id);
+
+ if (!empty($profileUser)) {
+
+ $output = $item->out;
+
+ // Add an OStatus subscribe
+ $output->elementStart('li', 'entity_subscribe');
+ $url = common_local_url('ostatusinit',
+ array('nickname' => $profileUser->nickname));
+ $output->element('a', array('href' => $url,
+ 'class' => 'entity_remote_subscribe'),
+ _m('Subscribe'));
+ $output->elementEnd('li');
+ }
+ }
+
+ return true;
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'OStatus',
+ '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>.'));
+
+ return true;
+ }
}
diff --git a/plugins/OStatus/README b/plugins/OStatus/README
index cbf3adbb9..3a98b7b25 100644
--- a/plugins/OStatus/README
+++ b/plugins/OStatus/README
@@ -2,23 +2,33 @@ Plugin to support importing updates from external RSS and Atom feeds into your t
Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
+Configuration options available:
+
+$config['ostatus']['hub']
+ (default internal hub)
+ Set to URL of an external PuSH hub to use it instead of our internal hub.
+
+$config['ostatus']['hub_retries']
+ (default 0)
+ Number of times to retry a PuSH send to consumers if using internal hub
+
+
+For testing, shouldn't be used in production:
+
+$config['ostatus']['skip_signatures']
+ (default use signatures)
+ Disable generation and validation of Salmon magicenv signatures
+
+$config['feedsub']['nohub']
+ (default require hub)
+ Allow low-level feed subscription setup for feeds without hubs.
+ Not actually usable at this stage, OStatus will check for hubs too
+ and we have no polling backend.
+
+
Todo:
-* set feed icon avatar for actual profiles as well as for preview
-* use channel image and/or favicon for avatar?
-* garbage-collect subscriptions that are no longer being used
-* administrative way to kill feeds?
-* functional l10n
-* clean up subscription form look and workflow
-* use ajax for test/preview in subscription form
-* rssCloud support? (Does anything use it that doesn't support PuSH as well?)
-* possibly a polling daemon to support non-PuSH feeds?
-* likely problems with multiple feeds from the same site, such as category feeds on a blog
- (currently each feed would publish a separate notice on a separate profile, but pointing to the same post URI.)
- (could use the local URI I guess, but that's so icky!)
-* problems with Atom feeds that list <link rel="alternate" href="..."/> but don't have the type
- (such as http://atomgen.appspot.com/feed/5 demo feed); currently it's not recognized and we end up with the feed's master URI
-* make it easier to see what you're subscribed to and unsub from things
-* saner treatment of fullname/nickname?
+* fully functional l10n
+* redo non-OStatus feed support
+** rssCloud support?
+** possibly a polling daemon to support non-PuSH feeds?
* make use of tags/categories from feeds
-* update feed profile data when it changes
-* XML_Feed_Parser has major problems with category and link tags; consider replacing?
diff --git a/plugins/OStatus/actions/feedsubsettings.php b/plugins/OStatus/actions/feedsubsettings.php
deleted file mode 100644
index 6933c9bf2..000000000
--- a/plugins/OStatus/actions/feedsubsettings.php
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-class FeedSubSettingsAction extends ConnectSettingsAction
-{
- protected $feedurl;
- protected $preview;
- protected $munger;
-
- /**
- * Title of the page
- *
- * @return string Title of the page
- */
-
- function title()
- {
- return _m('Feed subscriptions');
- }
-
- /**
- * Instructions for use
- *
- * @return instructions for use
- */
-
- function getInstructions()
- {
- return _m('You can subscribe to feeds from other sites; ' .
- 'updates will appear in your personal timeline.');
- }
-
- /**
- * Content area of the page
- *
- * Shows a form for associating a Twitter account with this
- * StatusNet account. Also lets the user set preferences.
- *
- * @return void
- */
-
- function showContent()
- {
- $user = common_current_user();
-
- $profile = $user->getProfile();
-
- $fuser = null;
-
- $flink = Foreign_link::getByUserID($user->id, FEEDSUB_SERVICE);
-
- if (!empty($flink)) {
- $fuser = $flink->getForeignUser();
- }
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_feedsub',
- 'class' => 'form_settings',
- 'action' =>
- common_local_url('feedsubsettings')));
-
- $this->hidden('token', common_session_token());
-
- $this->elementStart('fieldset', array('id' => 'settings_feeds'));
-
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li', array('id' => 'settings_twitter_login_button'));
- $this->input('feedurl', _('Feed URL'), $this->feedurl, _('Enter the URL of a PubSubHubbub-enabled feed'));
- $this->elementEnd('li');
- $this->elementEnd('ul');
-
- if ($this->preview) {
- $this->submit('subscribe', _m('Subscribe'));
- } else {
- $this->submit('validate', _m('Continue'));
- }
-
- $this->elementEnd('fieldset');
-
- $this->elementEnd('form');
-
- if ($this->preview) {
- $this->previewFeed();
- }
- }
-
- /**
- * Handle posts to this form
- *
- * Based on the button that was pressed, muxes out to other functions
- * to do the actual task requested.
- *
- * All sub-functions reload the form with a message -- success or failure.
- *
- * @return void
- */
-
- function handlePost()
- {
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
- return;
- }
-
- if ($this->arg('validate')) {
- $this->validateAndPreview();
- } else if ($this->arg('subscribe')) {
- $this->saveFeed();
- } else {
- $this->showForm(_('Unexpected form submission.'));
- }
- }
-
- /**
- * Set up and add a feed
- *
- * @return boolean true if feed successfully read
- * Sends you back to input form if not.
- */
- function validateFeed()
- {
- $feedurl = trim($this->arg('feedurl'));
-
- if ($feedurl == '') {
- $this->showForm(_m('Empty feed URL!'));
- return;
- }
- $this->feedurl = $feedurl;
-
- // Get the canonical feed URI and check it
- try {
- $discover = new FeedDiscovery();
- $uri = $discover->discoverFromURL($feedurl);
- } catch (FeedSubBadURLException $e) {
- $this->showForm(_m('Invalid URL or could not reach server.'));
- return false;
- } catch (FeedSubBadResponseException $e) {
- $this->showForm(_m('Cannot read feed; server returned error.'));
- return false;
- } catch (FeedSubEmptyException $e) {
- $this->showForm(_m('Cannot read feed; server returned an empty page.'));
- return false;
- } catch (FeedSubBadHTMLException $e) {
- $this->showForm(_m('Bad HTML, could not find feed link.'));
- return false;
- } catch (FeedSubNoFeedException $e) {
- $this->showForm(_m('Could not find a feed linked from this URL.'));
- return false;
- } catch (FeedSubUnrecognizedTypeException $e) {
- $this->showForm(_m('Not a recognized feed type.'));
- return false;
- } catch (FeedSubException $e) {
- // Any new ones we forgot about
- $this->showForm(_m('Bad feed URL.'));
- return false;
- }
-
- $this->munger = $discover->feedMunger();
- $this->profile = $this->munger->ostatusProfile();
-
- if ($this->profile->huburi == '' && !common_config('feedsub', 'nohub')) {
- $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
- return false;
- }
-
- return true;
- }
-
- function saveFeed()
- {
- if ($this->validateFeed()) {
- $this->preview = true;
- $this->profile = Ostatus_profile::ensureProfile($this->munger);
- if (!$this->profile) {
- throw new ServerException("Feed profile was not saved properly.");
- }
-
- // If not already in use, subscribe to updates via the hub
- if ($this->profile->sub_start) {
- common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->profile->feeduri} last subbed {$this->profile->sub_start}");
- } else {
- $ok = $this->profile->subscribe();
- common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
- if (!$ok) {
- $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
- return;
- }
- }
-
- // And subscribe the current user to the local profile
- $user = common_current_user();
-
- if ($this->profile->isGroup()) {
- $group = $this->profile->localGroup();
- if ($user->isMember($group)) {
- $this->showForm(_m('Already a member!'));
- } elseif (Group_member::join($this->profile->group_id, $user->id)) {
- $this->showForm(_m('Joined remote group!'));
- } else {
- $this->showForm(_m('Remote group join failed!'));
- }
- } else {
- $local = $this->profile->localProfile();
- if ($user->isSubscribed($local)) {
- $this->showForm(_m('Already subscribed!'));
- } elseif ($user->subscribeTo($local)) {
- $this->showForm(_m('Feed subscribed!'));
- } else {
- $this->showForm(_m('Feed subscription failed!'));
- }
- }
- }
- }
-
- function validateAndPreview()
- {
- if ($this->validateFeed()) {
- $this->preview = true;
- $this->showForm(_m('Previewing feed:'));
- }
- }
-
- function previewFeed()
- {
- $profile = $this->munger->ostatusProfile();
- $notice = $this->munger->notice(0, true); // preview
-
- if ($notice) {
- $this->element('b', null, 'Preview of latest post from this feed:');
-
- $item = new NoticeList($notice, $this);
- $item->show();
- } else {
- $this->element('b', null, 'No posts in this feed yet.');
- }
- }
-
- function showScripts()
- {
- parent::showScripts();
- $this->autofocus('feedurl');
- }
-}
diff --git a/plugins/OStatus/actions/groupsalmon.php b/plugins/OStatus/actions/groupsalmon.php
new file mode 100644
index 000000000..29377b5fa
--- /dev/null
+++ b/plugins/OStatus/actions/groupsalmon.php
@@ -0,0 +1,188 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class GroupsalmonAction extends SalmonAction
+{
+ var $group = null;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $id = $this->trimmed('id');
+
+ if (!$id) {
+ $this->clientError(_('No ID.'));
+ }
+
+ $this->group = User_group::staticGet('id', $id);
+
+ if (empty($this->group)) {
+ $this->clientError(_('No such group.'));
+ }
+
+ $oprofile = Ostatus_profile::staticGet('group_id', $id);
+ if ($oprofile) {
+ $this->clientError(_m("Can't accept remote posts for a remote group."));
+ }
+
+ return true;
+ }
+
+ /**
+ * We've gotten a post event on the Salmon backchannel, probably a reply.
+ */
+
+ function handlePost()
+ {
+ switch ($this->act->object->type) {
+ case ActivityObject::ARTICLE:
+ case ActivityObject::BLOGENTRY:
+ case ActivityObject::NOTE:
+ case ActivityObject::STATUS:
+ case ActivityObject::COMMENT:
+ break;
+ default:
+ throw new ClientException("Can't handle that kind of post.");
+ }
+
+ // Notice must be to the attention of this group
+
+ $context = $this->act->context;
+
+ if (empty($context->attention)) {
+ 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)) {
+ throw new ClientException("Not to the attention of this group.");
+ }
+ }
+
+ $profile = $this->ensureProfile();
+ $this->saveNotice();
+ }
+
+ /**
+ * We've gotten a follow/subscribe notification from a remote user.
+ * Save a subscription relationship for them.
+ */
+
+ /**
+ * Postel's law: consider a "follow" notification as a "join".
+ */
+ function handleFollow()
+ {
+ $this->handleJoin();
+ }
+
+ /**
+ * Postel's law: consider an "unfollow" notification as a "leave".
+ */
+ function handleUnfollow()
+ {
+ $this->handleLeave();
+ }
+
+ /**
+ * A remote user joined our group.
+ * @fixme move permission checks and event call into common code,
+ * currently we're doing the main logic in joingroup action
+ * and so have to repeat it here.
+ */
+
+ function handleJoin()
+ {
+ $oprofile = $this->ensureProfile();
+ if (!$oprofile) {
+ $this->clientError(_m("Can't read profile to set up group membership."));
+ }
+ if ($oprofile->isGroup()) {
+ $this->clientError(_m("Groups can't join groups."));
+ }
+
+ common_log(LOG_INFO, "Remote profile {$oprofile->uri} joining local group {$this->group->nickname}");
+ $profile = $oprofile->localProfile();
+
+ if ($profile->isMember($this->group)) {
+ // Already a member; we'll take it silently to aid in resolving
+ // inconsistencies on the other side.
+ return true;
+ }
+
+ if (Group_block::isBlocked($this->group, $profile)) {
+ $this->clientError(_('You have been blocked from that group by the admin.'), 403);
+ return false;
+ }
+
+ try {
+ // @fixme that event currently passes a user from main UI
+ // Event should probably move into Group_member::join
+ // and take a Profile object.
+ //
+ //if (Event::handle('StartJoinGroup', array($this->group, $profile))) {
+ Group_member::join($this->group->id, $profile->id);
+ //Event::handle('EndJoinGroup', array($this->group, $profile));
+ //}
+ } catch (Exception $e) {
+ $this->serverError(sprintf(_m('Could not join remote user %1$s to group %2$s.'),
+ $oprofile->uri, $this->group->nickname));
+ }
+ }
+
+ /**
+ * A remote user left our group.
+ */
+
+ function handleLeave()
+ {
+ $oprofile = $this->ensureProfile();
+ if (!$oprofile) {
+ $this->clientError(_m("Can't read profile to cancel group membership."));
+ }
+ if ($oprofile->isGroup()) {
+ $this->clientError(_m("Groups can't join groups."));
+ }
+
+ common_log(LOG_INFO, "Remote profile {$oprofile->uri} leaving local group {$this->group->nickname}");
+ $profile = $oprofile->localProfile();
+
+ try {
+ // @fixme event needs to be refactored as above
+ //if (Event::handle('StartLeaveGroup', array($this->group, $profile))) {
+ Group_member::leave($this->group->id, $profile->id);
+ //Event::handle('EndLeaveGroup', array($this->group, $profile));
+ //}
+ } catch (Exception $e) {
+ $this->serverError(sprintf(_m('Could not remove remote user %1$s from group %2$s.'),
+ $oprofile->uri, $this->group->nickname));
+ return;
+ }
+ }
+
+}
diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php
index 850b8a0fe..6d35ada6c 100644
--- a/plugins/OStatus/actions/hostmeta.php
+++ b/plugins/OStatus/actions/hostmeta.php
@@ -31,12 +31,18 @@ class HostMetaAction extends Action
{
parent::handle();
- $w = new Webfinger();
-
-
$domain = common_config('site', 'server');
- $url = common_local_url('webfinger');
+ $url = common_local_url('userxrd');
$url.= '?uri={uri}';
- print $w->getHostMeta($domain, $url);
+
+ $xrd = new XRD();
+
+ $xrd = new XRD();
+ $xrd->host = $domain;
+ $xrd->links[] = array('rel' => Discovery::LRDD_REL,
+ 'template' => $url,
+ 'title' => array('Resource Descriptor'));
+
+ print $xrd->toXML();
}
}
diff --git a/plugins/OStatus/actions/ostatusgroup.php b/plugins/OStatus/actions/ostatusgroup.php
new file mode 100644
index 000000000..f325ba053
--- /dev/null
+++ b/plugins/OStatus/actions/ostatusgroup.php
@@ -0,0 +1,181 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009-2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+/**
+ * Key UI methods:
+ *
+ * showInputForm() - form asking for a remote profile account or URL
+ * We end up back here on errors
+ *
+ * showPreviewForm() - surrounding form for preview-and-confirm
+ * preview() - display profile for a remote group
+ *
+ * success() - redirects to groups page on join
+ */
+class OStatusGroupAction extends OStatusSubAction
+{
+ protected $profile_uri; // provided acct: or URI of remote entity
+ protected $oprofile; // Ostatus_profile of remote entity, if valid
+
+
+ function validateRemoteProfile()
+ {
+ if (!$this->oprofile->isGroup()) {
+ // Send us to the user subscription form for conf
+ $target = common_local_url('ostatussub', array(), array('profile' => $this->profile_uri));
+ common_redirect($target, 303);
+ }
+ }
+
+ /**
+ * Show the initial form, when we haven't yet been given a valid
+ * remote profile.
+ */
+ function showInputForm()
+ {
+ $user = common_current_user();
+
+ $profile = $user->getProfile();
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_ostatus_sub',
+ 'class' => 'form_settings',
+ 'action' => $this->selfLink()));
+
+ $this->hidden('token', common_session_token());
+
+ $this->elementStart('fieldset', array('id' => 'settings_feeds'));
+
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->input('profile',
+ _m('Join group'),
+ $this->profile_uri,
+ _m("OStatus group's address, like http://example.net/group/nickname"));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+
+ $this->submit('validate', _m('Continue'));
+
+ $this->elementEnd('fieldset');
+
+ $this->elementEnd('form');
+ }
+
+ /**
+ * Show a preview for a remote group's profile
+ * @return boolean true if we're ok to try joining
+ */
+ function preview()
+ {
+ $oprofile = $this->oprofile;
+ $group = $oprofile->localGroup();
+
+ $cur = common_current_user();
+ if ($cur->isMember($group)) {
+ $this->element('div', array('class' => 'error'),
+ _m("You are already a member of this group."));
+ $ok = false;
+ } else {
+ $ok = true;
+ }
+
+ $this->showEntity($group,
+ $group->getProfileUrl(),
+ $group->homepage_logo,
+ $group->description);
+ return $ok;
+ }
+
+ /**
+ * Redirect on successful remote group join
+ */
+ function success()
+ {
+ $cur = common_current_user();
+ $url = common_local_url('usergroups', array('nickname' => $cur->nickname));
+ common_redirect($url, 303);
+ }
+
+ /**
+ * Attempt to finalize subscription.
+ * validateFeed must have been run first.
+ *
+ * Calls showForm on failure or success on success.
+ */
+ function saveFeed()
+ {
+ $user = common_current_user();
+ $group = $this->oprofile->localGroup();
+ if ($user->isMember($group)) {
+ // TRANS: OStatus remote group subscription dialog error.
+ $this->showForm(_m('Already a member!'));
+ return;
+ }
+
+ if (Event::handle('StartJoinGroup', array($group, $user))) {
+ $ok = Group_member::join($this->oprofile->group_id, $user->id);
+ if ($ok) {
+ Event::handle('EndJoinGroup', array($group, $user));
+ $this->success();
+ } else {
+ // TRANS: OStatus remote group subscription dialog error.
+ $this->showForm(_m('Remote group join failed!'));
+ }
+ } else {
+ // TRANS: OStatus remote group subscription dialog error.
+ $this->showForm(_m('Remote group join aborted!'));
+ }
+ }
+
+ /**
+ * Title of the page
+ *
+ * @return string Title of the page
+ */
+
+ function title()
+ {
+ // TRANS: Page title for OStatus remote group join form
+ return _m('Confirm joining remote group');
+ }
+
+ /**
+ * Instructions for use
+ *
+ * @return instructions for use
+ */
+
+ function getInstructions()
+ {
+ return _m('You can subscribe to groups from other supported sites. Paste the group\'s profile URI below:');
+ }
+
+ function selfLink()
+ {
+ return common_local_url('ostatusgroup');
+ }
+}
diff --git a/plugins/OStatus/actions/ostatusinit.php b/plugins/OStatus/actions/ostatusinit.php
index d21774420..22aea9f70 100644
--- a/plugins/OStatus/actions/ostatusinit.php
+++ b/plugins/OStatus/actions/ostatusinit.php
@@ -29,7 +29,8 @@ class OStatusInitAction extends Action
{
var $nickname;
- var $acct;
+ var $group;
+ var $profile;
var $err;
function prepare($args)
@@ -37,12 +38,16 @@ class OStatusInitAction extends Action
parent::prepare($args);
if (common_logged_in()) {
- $this->clientError(_('You can use the local subscription!'));
+ $this->clientError(_m('You can use the local subscription!'));
return false;
}
- $this->nickname = $this->trimmed('nickname');
- $this->acct = $this->trimmed('acct');
+ // Local user or group the remote wants to subscribe to
+ $this->nickname = $this->trimmed('nickname');
+ $this->group = $this->trimmed('group');
+
+ // Webfinger or profile URL of the remote user
+ $this->profile = $this->trimmed('profile');
return true;
}
@@ -55,7 +60,7 @@ class OStatusInitAction extends Action
/* Use a session token for CSRF protection. */
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
+ $this->showForm(_m('There was a problem with your session token. '.
'Try again, please.'));
return;
}
@@ -73,7 +78,7 @@ class OStatusInitAction extends Action
$this->xw->startDocument('1.0', 'UTF-8');
$this->elementStart('html');
$this->elementStart('head');
- $this->element('title', null, _('Subscribe to user'));
+ $this->element('title', null, _m('Subscribe to user'));
$this->elementEnd('head');
$this->elementStart('body');
$this->showContent();
@@ -86,55 +91,115 @@ class OStatusInitAction extends Action
function showContent()
{
+ if ($this->group) {
+ $header = sprintf(_m('Join group %s'), $this->group);
+ $submit = _m('Join');
+ } else {
+ $header = sprintf(_m('Subscribe to %s'), $this->nickname);
+ $submit = _m('Subscribe');
+ }
$this->elementStart('form', array('id' => 'form_ostatus_connect',
'method' => 'post',
'class' => 'form_settings',
'action' => common_local_url('ostatusinit')));
$this->elementStart('fieldset');
- $this->element('legend', null, sprintf(_('Subscribe to %s'), $this->nickname));
+ $this->element('legend', null, $header);
$this->hidden('token', common_session_token());
$this->elementStart('ul', 'form_data');
$this->elementStart('li', array('id' => 'ostatus_nickname'));
- $this->input('nickname', _('User nickname'), $this->nickname,
- _('Nickname of the user you want to follow'));
+ $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'));
- $this->input('acct', _('Profile Account'), $this->acct,
- _('Your account id (i.e. user@identi.ca)'));
+ $this->input('profile', _m('Profile Account'), $this->profile,
+ _m('Your account id (i.e. user@identi.ca)'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('submit', _('Subscribe'));
+ $this->submit('submit', $submit);
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
function ostatusConnect()
{
- $w = new Webfinger;
+ $opts = array('allowed_schemes' => array('http', 'https', 'acct'));
+ if (Validate::uri($this->profile, $opts)) {
+ $bits = parse_url($this->profile);
+ if ($bits['scheme'] == 'acct') {
+ $this->connectWebfinger($bits['path']);
+ } else {
+ $this->connectProfile($this->profile);
+ }
+ } elseif (strpos($this->profile, '@') !== false) {
+ $this->connectWebfinger($this->profile);
+ } else {
+ $this->clientError(_m("Must provide a remote profile."));
+ }
+ }
- $result = $w->lookup($this->acct);
- foreach ($result->links as $link) {
- if ($link['rel'] == 'http://ostatus.org/schema/1.0/subscribe') {
- // We found a URL - let's redirect!
+ function connectWebfinger($acct)
+ {
+ $target_profile = $this->targetProfile();
- $user = User::staticGet('nickname', $this->nickname);
+ $disco = new Discovery;
+ $result = $disco->lookup($acct);
+ if (!$result) {
+ $this->clientError(_m("Couldn't look up OStatus account profile."));
+ }
- $feed_url = common_local_url('ApiTimelineUser',
- array('id' => $user->id,
- 'format' => 'atom'));
- $url = $w->applyTemplate($link['template'], $feed_url);
+ foreach ($result->links as $link) {
+ if ($link['rel'] == 'http://ostatus.org/schema/1.0/subscribe') {
+ // We found a URL - let's redirect!
+ $url = Discovery::applyTemplate($link['template'], $target_profile);
+ common_log(LOG_INFO, "Sending remote subscriber $acct to $url");
+ common_redirect($url, 303);
+ }
- common_redirect($url, 303);
- }
+ }
+ $this->clientError(_m("Couldn't confirm remote profile address."));
+ }
- }
-
+ function connectProfile($subscriber_profile)
+ {
+ $target_profile = $this->targetProfile();
+
+ // @fixme hack hack! We should look up the remote sub URL from XRDS
+ $suburl = preg_replace('!^(.*)/(.*?)$!', '$1/main/ostatussub', $subscriber_profile);
+ $suburl .= '?profile=' . urlencode($target_profile);
+
+ common_log(LOG_INFO, "Sending remote subscriber $subscriber_profile to $suburl");
+ common_redirect($suburl, 303);
}
-
+
+ /**
+ * Build the canonical profile URI+URL of the requested user or group
+ */
+ function targetProfile()
+ {
+ if ($this->nickname) {
+ $user = User::staticGet('nickname', $this->nickname);
+ if ($user) {
+ return common_local_url('userbyid', array('id' => $user->id));
+ } else {
+ $this->clientError("No such user.");
+ }
+ } else if ($this->group) {
+ $group = Local_group::staticGet('nickname', $this->group);
+ if ($group) {
+ return common_local_url('groupbyid', array('id' => $group->group_id));
+ } else {
+ $this->clientError("No such group.");
+ }
+ } else {
+ $this->clientError("No local user or group nickname provided.");
+ }
+ }
+
function title()
{
- return _('OStatus Connect');
+ return _m('OStatus Connect');
}
}
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index 239122501..65dee2392 100644
--- a/plugins/OStatus/actions/ostatussub.php
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -1,7 +1,7 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
+ * Copyright (C) 2009-2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -19,57 +19,41 @@
/**
* @package OStatusPlugin
- * @maintainer James Walker <james@status.net>
+ * @maintainer Brion Vibber <brion@status.net>
*/
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+/**
+ * Key UI methods:
+ *
+ * showInputForm() - form asking for a remote profile account or URL
+ * We end up back here on errors
+ *
+ * showPreviewForm() - surrounding form for preview-and-confirm
+ * preview() - display profile for a remote user
+ *
+ * success() - redirects to subscriptions page on subscribe
+ */
class OStatusSubAction extends Action
{
+ protected $profile_uri; // provided acct: or URI of remote entity
+ protected $oprofile; // Ostatus_profile of remote entity, if valid
- protected $feedurl;
-
- function title()
- {
- return _m("OStatus Subscribe");
- }
-
- function handle($args)
- {
- if ($this->validateFeed()) {
- $this->showForm();
- }
-
- return true;
-
- }
-
- function showForm($err = null)
- {
- $this->err = $err;
- $this->showPage();
- }
-
-
- function showContent()
+ /**
+ * Show the initial form, when we haven't yet been given a valid
+ * remote profile.
+ */
+ function showInputForm()
{
$user = common_current_user();
$profile = $user->getProfile();
- $fuser = null;
-
- $flink = Foreign_link::getByUserID($user->id, FEEDSUB_SERVICE);
-
- if (!empty($flink)) {
- $fuser = $flink->getForeignUser();
- }
-
$this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_feedsub',
+ 'id' => 'form_ostatus_sub',
'class' => 'form_settings',
- 'action' =>
- common_local_url('feedsubsettings')));
+ 'action' => $this->selfLink()));
$this->hidden('token', common_session_token());
@@ -77,150 +61,390 @@ class OStatusSubAction extends Action
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- $this->input('feedurl', _('Feed URL'), $this->feedurl, _('Enter the URL of a PubSubHubbub-enabled feed'));
+ $this->input('profile',
+ _m('Subscribe to'),
+ $this->profile_uri,
+ _m("OStatus user's address, like nickname@example.com or http://example.net/nickname"));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('subscribe', _m('Subscribe'));
+ $this->submit('validate', _m('Continue'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
-
- $this->previewFeed();
}
/**
- * Handle posts to this form
- *
- * Based on the button that was pressed, muxes out to other functions
- * to do the actual task requested.
+ * Show the preview-and-confirm form. We've got a valid remote
+ * profile and are ready to poke it!
*
- * All sub-functions reload the form with a message -- success or failure.
- *
- * @return void
+ * This controls the wrapper form; actual profile display will
+ * be in previewUser() or previewGroup() depending on the type.
*/
-
- function handlePost()
+ function showPreviewForm()
{
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
+ $ok = $this->preview();
+ if (!$ok) {
+ // @fixme maybe provide a cancel button or link back?
return;
}
- if ($this->arg('subscribe')) {
- $this->saveFeed();
+ $this->elementStart('div', 'entity_actions');
+ $this->elementStart('ul');
+ $this->elementStart('li', 'entity_subscribe');
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_ostatus_sub',
+ 'class' => 'form_remote_authorize',
+ 'action' =>
+ $this->selfLink()));
+ $this->elementStart('fieldset');
+ $this->hidden('token', common_session_token());
+ $this->hidden('profile', $this->profile_uri);
+ if ($this->oprofile->isGroup()) {
+ $this->submit('submit', _m('Join'), 'submit', null,
+ _m('Join this group'));
} else {
- $this->showForm(_('Unexpected form submission.'));
+ $this->submit('submit', _m('Confirm'), 'submit', null,
+ _m('Subscribe to this user'));
}
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->elementEnd('div');
}
-
/**
- * Set up and add a feed
- *
- * @return boolean true if feed successfully read
- * Sends you back to input form if not.
+ * Show a preview for a remote user's profile
+ * @return boolean true if we're ok to try subscribing
*/
- function validateFeed()
+ function preview()
{
- $feedurl = $this->trimmed('feed');
-
- if ($feedurl == '') {
- $this->showForm(_m('Empty feed URL!'));
- return;
+ $oprofile = $this->oprofile;
+ $profile = $oprofile->localProfile();
+
+ $cur = common_current_user();
+ if ($cur->isSubscribed($profile)) {
+ $this->element('div', array('class' => 'error'),
+ _m("You are already subscribed to this user."));
+ $ok = false;
+ } else {
+ $ok = true;
}
- $this->feedurl = $feedurl;
+
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
+ $avatarUrl = $avatar ? $avatar->displayUrl() : false;
+
+ $this->showEntity($profile,
+ $profile->profileurl,
+ $avatarUrl,
+ $profile->bio);
+ return $ok;
+ }
+
+ function showEntity($entity, $profile, $avatar, $note)
+ {
+ $nickname = $entity->nickname;
+ $fullname = $entity->fullname;
+ $homepage = $entity->homepage;
+ $location = $entity->location;
- // Get the canonical feed URI and check it
+ if (!$avatar) {
+ $avatar = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ }
+
+ $this->elementStart('div', 'entity_profile vcard');
+ $this->elementStart('dl', 'entity_depiction');
+ $this->element('dt', null, _('Photo'));
+ $this->elementStart('dd');
+ $this->element('img', array('src' => $avatar,
+ 'class' => 'photo avatar',
+ 'width' => AVATAR_PROFILE_SIZE,
+ 'height' => AVATAR_PROFILE_SIZE,
+ 'alt' => $nickname));
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+
+ $this->elementStart('dl', 'entity_nickname');
+ $this->element('dt', null, _('Nickname'));
+ $this->elementStart('dd');
+ $hasFN = ($fullname !== '') ? 'nickname' : 'fn nickname';
+ $this->elementStart('a', array('href' => $profile,
+ 'class' => 'url '.$hasFN));
+ $this->raw($nickname);
+ $this->elementEnd('a');
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+
+ if (!is_null($fullname)) {
+ $this->elementStart('dl', 'entity_fn');
+ $this->elementStart('dd');
+ $this->elementStart('span', 'fn');
+ $this->raw($fullname);
+ $this->elementEnd('span');
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+ }
+ if (!is_null($location)) {
+ $this->elementStart('dl', 'entity_location');
+ $this->element('dt', null, _('Location'));
+ $this->elementStart('dd', 'label');
+ $this->raw($location);
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+ }
+
+ if (!is_null($homepage)) {
+ $this->elementStart('dl', 'entity_url');
+ $this->element('dt', null, _('URL'));
+ $this->elementStart('dd');
+ $this->elementStart('a', array('href' => $homepage,
+ 'class' => 'url'));
+ $this->raw($homepage);
+ $this->elementEnd('a');
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+ }
+
+ if (!is_null($note)) {
+ $this->elementStart('dl', 'entity_note');
+ $this->element('dt', null, _('Note'));
+ $this->elementStart('dd', 'note');
+ $this->raw($note);
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+ }
+ $this->elementEnd('div');
+ }
+
+ /**
+ * Redirect on successful remote user subscription
+ */
+ function success()
+ {
+ $cur = common_current_user();
+ $url = common_local_url('subscriptions', array('nickname' => $cur->nickname));
+ common_redirect($url, 303);
+ }
+
+ /**
+ * Pull data for a remote profile and check if it's valid.
+ * Fills out error UI string in $this->error
+ * Fills out $this->oprofile on success.
+ *
+ * @return boolean
+ */
+ function pullRemoteProfile()
+ {
+ $this->profile_uri = $this->trimmed('profile');
try {
- $discover = new FeedDiscovery();
- $uri = $discover->discoverFromURL($feedurl);
+ if (Validate::email($this->profile_uri)) {
+ $this->oprofile = Ostatus_profile::ensureWebfinger($this->profile_uri);
+ } else if (Validate::uri($this->profile_uri)) {
+ $this->oprofile = Ostatus_profile::ensureProfile($this->profile_uri);
+ } else {
+ $this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname");
+ common_debug('Invalid address format.', __FILE__);
+ return false;
+ }
+ return true;
} catch (FeedSubBadURLException $e) {
- $this->showForm(_m('Invalid URL or could not reach server.'));
- return false;
+ $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) {
- $this->showForm(_m('Cannot read feed; server returned error.'));
- return false;
+ $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) {
- $this->showForm(_m('Cannot read feed; server returned an empty page.'));
- return false;
+ $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) {
- $this->showForm(_m('Bad HTML, could not find feed link.'));
- return false;
+ $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) {
- $this->showForm(_m('Could not find a feed linked from this URL.'));
- return false;
+ $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) {
- $this->showForm(_m('Not a recognized feed type.'));
- return false;
- } catch (FeedSubException $e) {
+ $this->error = _m("Sorry, we could not reach that feed. Please try that OStatus address again later.");
+ common_debug('Not a recognized feed type.', __FILE__);
+ } catch (Exception $e) {
// Any new ones we forgot about
- $this->showForm(_m('Bad feed URL.'));
- return false;
+ $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__);
}
-
- $this->munger = $discover->feedMunger();
- $this->profile = $this->munger->ostatusProfile();
- if ($this->profile->huburi == '') {
- $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
- return false;
+ return false;
+ }
+
+ function validateRemoteProfile()
+ {
+ if ($this->oprofile->isGroup()) {
+ // Send us to the group subscription form for conf
+ $target = common_local_url('ostatusgroup', array(), array('profile' => $this->profile_uri));
+ common_redirect($target, 303);
}
-
- return true;
}
+ /**
+ * Attempt to finalize subscription.
+ * validateFeed must have been run first.
+ *
+ * Calls showForm on failure or success on success.
+ */
function saveFeed()
{
- if ($this->validateFeed()) {
- $this->preview = true;
- $this->profile = Ostatus_profile::ensureProfile($this->munger);
+ // And subscribe the current user to the local profile
+ $user = common_current_user();
+ $local = $this->oprofile->localProfile();
+ if ($user->isSubscribed($local)) {
+ // TRANS: OStatus remote subscription dialog error.
+ $this->showForm(_m('Already subscribed!'));
+ } elseif ($this->oprofile->subscribeLocalToRemote($user)) {
+ $this->success();
+ } else {
+ // TRANS: OStatus remote subscription dialog error.
+ $this->showForm(_m('Remote subscription failed!'));
+ }
+ }
+
+ function prepare($args)
+ {
+ parent::prepare($args);
- // If not already in use, subscribe to updates via the hub
- if ($this->profile->sub_start) {
- common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->profile->feeduri} last subbed {$this->profile->sub_start}");
- } else {
- $ok = $this->profile->subscribe();
- common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
- if (!$ok) {
- $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
- return;
- }
+ if (!common_logged_in()) {
+ // XXX: selfURL() didn't work. :<
+ common_set_returnto($_SERVER['REQUEST_URI']);
+ if (Event::handle('RedirectToLogin', array($this, null))) {
+ common_redirect(common_local_url('login'), 303);
}
-
- // And subscribe the current user to the local profile
- $user = common_current_user();
- $profile = $this->profile->getProfile();
-
- if ($user->isSubscribed($profile)) {
- $this->showForm(_m('Already subscribed!'));
- } elseif ($user->subscribeTo($profile)) {
- $this->showForm(_m('Feed subscribed!'));
- } else {
- $this->showForm(_m('Feed subscription failed!'));
+ return false;
+ }
+
+ if ($this->pullRemoteProfile()) {
+ $this->validateRemoteProfile();
+ }
+ return true;
+ }
+
+ /**
+ * Handle the submission.
+ */
+ function handle($args)
+ {
+ parent::handle($args);
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $this->handlePost();
+ } else {
+ $this->showForm();
+ }
+ }
+
+
+ /**
+ * Handle posts to this form
+ *
+ * @return void
+ */
+
+ function handlePost()
+ {
+ // CSRF protection
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->showForm(_('There was a problem with your session token. '.
+ 'Try again, please.'));
+ return;
+ }
+
+ if ($this->oprofile) {
+ if ($this->arg('submit')) {
+ $this->saveFeed();
+ return;
}
}
+ $this->showForm();
}
-
- function previewFeed()
+ /**
+ * Show the appropriate form based on our input state.
+ */
+ function showForm($err=null)
{
- $profile = $this->munger->ostatusProfile();
- $notice = $this->munger->notice(0, true); // preview
+ if ($err) {
+ $this->error = $err;
+ }
+ if ($this->boolean('ajax')) {
+ header('Content-Type: text/xml;charset=utf-8');
+ $this->xw->startDocument('1.0', 'UTF-8');
+ $this->elementStart('html');
+ $this->elementStart('head');
+ $this->element('title', null, _m('Subscribe to user'));
+ $this->elementEnd('head');
+ $this->elementStart('body');
+ $this->showContent();
+ $this->elementEnd('body');
+ $this->elementEnd('html');
+ } else {
+ $this->showPage();
+ }
+ }
- if ($notice) {
- $this->element('b', null, 'Preview of latest post from this feed:');
+ /**
+ * Title of the page
+ *
+ * @return string Title of the page
+ */
- $item = new NoticeList($notice, $this);
- $item->show();
+ function title()
+ {
+ // TRANS: Page title for OStatus remote subscription form
+ return _m('Confirm');
+ }
+
+ /**
+ * Instructions for use
+ *
+ * @return instructions for use
+ */
+
+ function getInstructions()
+ {
+ return _m('You can subscribe to users from other supported sites. Paste their address or profile URI below:');
+ }
+
+ function showPageNotice()
+ {
+ if (!empty($this->error)) {
+ $this->element('p', 'error', $this->error);
+ }
+ }
+
+ /**
+ * Content area of the page
+ *
+ * Shows a form for associating a remote OStatus account with this
+ * StatusNet account.
+ *
+ * @return void
+ */
+
+ function showContent()
+ {
+ if ($this->oprofile) {
+ $this->showPreviewForm();
} else {
- $this->element('b', null, 'No posts in this feed yet.');
+ $this->showInputForm();
}
}
+ function showScripts()
+ {
+ parent::showScripts();
+ $this->autofocus('feedurl');
+ }
+ function selfLink()
+ {
+ return common_local_url('ostatussub');
+ }
}
diff --git a/plugins/OStatus/actions/ownerxrd.php b/plugins/OStatus/actions/ownerxrd.php
new file mode 100644
index 000000000..9c141d8c7
--- /dev/null
+++ b/plugins/OStatus/actions/ownerxrd.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class OwnerxrdAction extends XrdAction
+{
+
+ public $uri;
+
+ function prepare($args)
+ {
+ $this->user = User::siteOwner();
+
+ if (!$this->user) {
+ $this->clientError(_('No such user.'), 404);
+ return false;
+ }
+
+ $nick = common_canonical_nickname($this->user->nickname);
+ $acct = 'acct:' . $nick . '@' . common_config('site', 'server');
+
+ $this->xrd = new XRD();
+
+ // Check to see if a $config['webfinger']['owner'] has been set
+ if ($owner = common_config('webfinger', 'owner')) {
+ $this->xrd->subject = Discovery::normalize($owner);
+ $this->xrd->alias[] = $acct;
+ } else {
+ $this->xrd->subject = $acct;
+ }
+
+ return true;
+ }
+}
diff --git a/plugins/OStatus/actions/pushcallback.php b/plugins/OStatus/actions/pushcallback.php
index 388c8f9c3..9a2067b8c 100644
--- a/plugins/OStatus/actions/pushcallback.php
+++ b/plugins/OStatus/actions/pushcallback.php
@@ -29,6 +29,7 @@ class PushCallbackAction extends Action
{
function handle()
{
+ StatusNet::setApi(true); // Minimize error messages to aid in debugging
parent::handle();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$this->handlePost();
@@ -48,9 +49,9 @@ class PushCallbackAction extends Action
throw new ServerException('Empty or invalid feed id', 400);
}
- $profile = Ostatus_profile::staticGet('id', $feedid);
- if (!$profile) {
- throw new ServerException('Unknown OStatus/PuSH feed id ' . $feedid, 400);
+ $feedsub = FeedSub::staticGet('id', $feedid);
+ if (!$feedsub) {
+ throw new ServerException('Unknown PuSH feed id ' . $feedid, 400);
}
$hmac = '';
@@ -60,13 +61,18 @@ class PushCallbackAction extends Action
$post = file_get_contents('php://input');
- // @fixme Queue this to a background process; we should return
+ // Queue this to a background process; we should return
// as quickly as possible from a distribution POST.
- $profile->postUpdates($post, $hmac);
+ // If queues are disabled this'll process immediately.
+ $data = array('feedsub_id' => $feedsub->id,
+ 'post' => $post,
+ 'hmac' => $hmac);
+ $qm = QueueManager::get();
+ $qm->enqueue($data, 'pushin');
}
/**
- * Handler for GET verification requests from the hub
+ * Handler for GET verification requests from the hub.
*/
function handleGet()
{
@@ -75,35 +81,41 @@ class PushCallbackAction extends Action
$challenge = $this->arg('hub_challenge');
$lease_seconds = $this->arg('hub_lease_seconds');
$verify_token = $this->arg('hub_verify_token');
-
+
if ($mode != 'subscribe' && $mode != 'unsubscribe') {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with mode \"$mode\"");
- throw new ServerException("Bogus hub callback: bad mode", 404);
+ throw new ClientException("Bad hub.mode $mode", 404);
}
-
- $profile = Ostatus_profile::staticGet('feeduri', $topic);
- if (!$profile) {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback for unknown feed $topic");
- throw new ServerException("Bogus hub callback: unknown feed", 404);
+
+ $feedsub = FeedSub::staticGet('uri', $topic);
+ if (!$feedsub) {
+ throw new ClientException("Bad hub.topic feed $topic", 404);
}
- if ($profile->verify_token !== $verify_token) {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad token \"$verify_token\" for feed $topic");
- throw new ServerError("Bogus hub callback: bad token", 404);
+ if ($feedsub->verify_token !== $verify_token) {
+ throw new ClientException("Bad hub.verify_token $token for $topic", 404);
}
- if ($mode != $profile->sub_state) {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad mode \"$mode\" for feed $topic in state \"{$profile->sub_state}\"");
- throw new ServerException("Bogus hub callback: mode doesn't match subscription state.", 404);
+ if ($mode == 'subscribe') {
+ // We may get re-sub requests legitimately.
+ if ($feedsub->sub_state != 'subscribe' && $feedsub->sub_state != 'active') {
+ throw new ClientException("Unexpected subscribe request for $topic.", 404);
+ }
+ } else {
+ if ($feedsub->sub_state != 'unsubscribe') {
+ throw new ClientException("Unexpected unsubscribe request for $topic.", 404);
+ }
}
- // OK!
if ($mode == 'subscribe') {
- common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
- $profile->confirmSubscribe($lease_seconds);
+ if ($feedsub->sub_state == 'active') {
+ common_log(LOG_INFO, __METHOD__ . ': sub update confirmed');
+ } else {
+ common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
+ }
+ $feedsub->confirmSubscribe($lease_seconds);
} else {
common_log(LOG_INFO, __METHOD__ . ": unsub confirmed; deleting sub record for $topic");
- $profile->confirmUnsubscribe();
+ $feedsub->confirmUnsubscribe();
}
print $challenge;
}
diff --git a/plugins/OStatus/actions/pushhub.php b/plugins/OStatus/actions/pushhub.php
index 13ec09d52..842d65e7d 100644
--- a/plugins/OStatus/actions/pushhub.php
+++ b/plugins/OStatus/actions/pushhub.php
@@ -59,99 +59,121 @@ class PushHubAction extends Action
$mode = $this->trimmed('hub.mode');
switch ($mode) {
case "subscribe":
- $this->subscribe();
- break;
case "unsubscribe":
- $this->unsubscribe();
+ $this->subunsub($mode);
break;
case "publish":
- throw new ServerException("Publishing outside feeds not supported.", 400);
+ throw new ClientException("Publishing outside feeds not supported.", 400);
default:
- throw new ServerException("Unrecognized mode '$mode'.", 400);
+ throw new ClientException("Unrecognized mode '$mode'.", 400);
}
}
/**
- * Process a PuSH feed subscription request.
+ * Process a request for a new or modified PuSH feed subscription.
+ * If asynchronous verification is requested, updates won't be saved immediately.
*
* HTTP return codes:
* 202 Accepted - request saved and awaiting verification
* 204 No Content - already subscribed
- * 403 Forbidden - rejecting this (not specifically spec'd)
+ * 400 Bad Request - rejecting this (not specifically spec'd)
*/
- function subscribe()
+ function subunsub($mode)
{
- $feed = $this->argUrl('hub.topic');
$callback = $this->argUrl('hub.callback');
- common_log(LOG_DEBUG, __METHOD__ . ": checking sub'd to $feed $callback");
- if ($this->getSub($feed, $callback)) {
- // Already subscribed; return 204 per spec.
- header('HTTP/1.1 204 No Content');
- common_log(LOG_DEBUG, __METHOD__ . ': already subscribed');
- return;
+ $topic = $this->argUrl('hub.topic');
+ if (!$this->recognizedFeed($topic)) {
+ throw new ClientException("Unsupported hub.topic $topic; this hub only serves local user and group Atom feeds.");
}
- common_log(LOG_DEBUG, __METHOD__ . ': setting up');
- $sub = new HubSub();
- $sub->topic = $feed;
- $sub->callback = $callback;
- $sub->verify_token = $this->arg('hub.verify_token', null);
- $sub->secret = $this->arg('hub.secret', null);
- if (strlen($sub->secret) > 200) {
- throw new ClientException("hub.secret must be no longer than 200 chars", 400);
+ $verify = $this->arg('hub.verify'); // @fixme may be multiple
+ if ($verify != 'sync' && $verify != 'async') {
+ throw new ClientException("Invalid hub.verify $verify; must be sync or async.");
}
- $sub->setLease(intval($this->arg('hub.lease_seconds')));
- // @fixme check for feeds we don't manage
- // @fixme check the verification mode, might want a return immediately?
+ $lease = $this->arg('hub.lease_seconds', null);
+ if ($mode == 'subscribe' && $lease != '' && !preg_match('/^\d+$/', $lease)) {
+ throw new ClientException("Invalid hub.lease $lease; must be empty or positive integer.");
+ }
- common_log(LOG_DEBUG, __METHOD__ . ': inserting');
- $ok = $sub->insert();
-
- if (!$ok) {
- throw new ServerException("Failed to save subscription record", 500);
+ $token = $this->arg('hub.verify_token', null);
+
+ $secret = $this->arg('hub.secret', null);
+ if ($secret != '' && strlen($secret) >= 200) {
+ throw new ClientException("Invalid hub.secret $secret; must be under 200 bytes.");
}
- // @fixme check errors ;)
+ $sub = HubSub::staticGet($topic, $callback);
+ if (!$sub) {
+ // Creating a new one!
+ $sub = new HubSub();
+ $sub->topic = $topic;
+ $sub->callback = $callback;
+ }
+ if ($mode == 'subscribe') {
+ if ($secret) {
+ $sub->secret = $secret;
+ }
+ if ($lease) {
+ $sub->setLease(intval($lease));
+ }
+ }
- $data = array('sub' => $sub, 'mode' => 'subscribe');
- $qm = QueueManager::get();
- $qm->enqueue($data, 'hubverify');
-
- header('HTTP/1.1 202 Accepted');
- common_log(LOG_DEBUG, __METHOD__ . ': done');
+ if (!common_config('queue', 'enabled')) {
+ // Won't be able to background it.
+ $verify = 'sync';
+ }
+ if ($verify == 'async') {
+ $sub->scheduleVerify($mode, $token);
+ header('HTTP/1.1 202 Accepted');
+ } else {
+ $sub->verify($mode, $token);
+ header('HTTP/1.1 204 No Content');
+ }
}
/**
- * Process a PuSH feed unsubscription request.
+ * Check whether the given URL represents one of our canonical
+ * user or group Atom feeds.
*
- * HTTP return codes:
- * 202 Accepted - request saved and awaiting verification
- * 204 No Content - already subscribed
- * 400 Bad Request - invalid params or rejected feed
+ * @param string $feed URL
+ * @return boolean true if it matches
*/
- function unsubscribe()
+ function recognizedFeed($feed)
{
- $feed = $this->argUrl('hub.topic');
- $callback = $this->argUrl('hub.callback');
- $sub = $this->getSub($feed, $callback);
-
- if ($sub) {
- if ($sub->verify('unsubscribe')) {
- $sub->delete();
- common_log(LOG_INFO, "PuSH unsubscribed $feed for $callback");
- } else {
- throw new ServerException("Failed PuSH unsubscription: verification failed! $feed for $callback");
+ $matches = array();
+ if (preg_match('!/(\d+)\.atom$!', $feed, $matches)) {
+ $id = $matches[1];
+ $params = array('id' => $id, 'format' => 'atom');
+ $userFeed = common_local_url('ApiTimelineUser', $params);
+ $groupFeed = common_local_url('ApiTimelineGroup', $params);
+
+ if ($feed == $userFeed) {
+ $user = User::staticGet('id', $id);
+ if (!$user) {
+ throw new ClientException("Invalid hub.topic $feed; user doesn't exist.");
+ } else {
+ return true;
+ }
}
- } else {
- throw new ServerException("Failed PuSH unsubscription: not subscribed! $feed for $callback");
+ if ($feed == $groupFeed) {
+ $user = User_group::staticGet('id', $id);
+ if (!$user) {
+ throw new ClientException("Invalid hub.topic $feed; group doesn't exist.");
+ } else {
+ return true;
+ }
+ }
+ common_log(LOG_DEBUG, "Not a user or group feed? $feed $userFeed $groupFeed");
}
+ common_log(LOG_DEBUG, "LOST $feed");
+ return false;
}
/**
* Grab and validate a URL from POST parameters.
- * @throws ServerException for malformed or non-http/https URLs
+ * @throws ClientException for malformed or non-http/https URLs
*/
protected function argUrl($arg)
{
@@ -161,7 +183,7 @@ class PushHubAction extends Action
if (Validate::uri($url, $params)) {
return $url;
} else {
- throw new ServerException("Invalid URL passed for $arg: '$url'", 400);
+ throw new ClientException("Invalid URL passed for $arg: '$url'");
}
}
diff --git a/plugins/OStatus/actions/salmon.php b/plugins/OStatus/actions/salmon.php
deleted file mode 100644
index c79d09c95..000000000
--- a/plugins/OStatus/actions/salmon.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package OStatusPlugin
- * @author James Walker <james@status.net>
- */
-
-if (!defined('STATUSNET')) {
- exit(1);
-}
-
-class SalmonAction extends Action
-{
- var $user = null;
- var $xml = null;
- var $activity = null;
-
- function prepare($args)
- {
- if ($_SERVER['REQUEST_METHOD'] != 'POST') {
- $this->clientError(_('This method requires a POST.'));
- }
-
- if ($_SERVER['CONTENT_TYPE'] != 'application/atom+xml') {
- $this->clientError(_('Salmon requires application/atom+xml'));
- }
-
- $id = $this->trimmed('id');
-
- if (!$id) {
- $this->clientError(_('No ID.'));
- }
-
- $this->user = User::staticGet($id);
-
- if (empty($this->user)) {
- $this->clientError(_('No such user.'));
- }
-
- $xml = file_get_contents('php://input');
-
- $dom = DOMDocument::loadXML($xml);
-
- // XXX: check that document element is Atom entry
- // XXX: check the signature
-
- $this->act = new Activity($dom->documentElement);
- }
-
- function handle($args)
- {
- common_log(LOG_DEBUG, 'Salmon: incoming post for user: '. $user_id);
-
- // TODO : Insert new $xml -> notice code
-
- switch ($this->act->verb)
- {
- case Activity::POST:
- case Activity::SHARE:
- case Activity::FAVORITE:
- case Activity::FOLLOW:
- }
- }
-}
diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php
new file mode 100644
index 000000000..c8a16e06f
--- /dev/null
+++ b/plugins/OStatus/actions/usersalmon.php
@@ -0,0 +1,212 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class UsersalmonAction extends SalmonAction
+{
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $id = $this->trimmed('id');
+
+ if (!$id) {
+ $this->clientError(_('No ID.'));
+ }
+
+ $this->user = User::staticGet('id', $id);
+
+ if (empty($this->user)) {
+ $this->clientError(_('No such user.'));
+ }
+
+ return true;
+ }
+
+ /**
+ * We've gotten a post event on the Salmon backchannel, probably a reply.
+ *
+ * @todo validate if we need to handle this post, then call into
+ * ostatus_profile's general incoming-post handling.
+ */
+ function handlePost()
+ {
+ common_log(LOG_INFO, "Received post of '{$this->act->object->id}' from '{$this->act->actor->id}'");
+
+ switch ($this->act->object->type) {
+ case ActivityObject::ARTICLE:
+ case ActivityObject::BLOGENTRY:
+ case ActivityObject::NOTE:
+ case ActivityObject::STATUS:
+ case ActivityObject::COMMENT:
+ break;
+ default:
+ throw new ClientException("Can't handle that kind of post.");
+ }
+
+ // Notice must either be a) in reply to a notice by this user
+ // or b) to the attention of this user
+
+ $context = $this->act->context;
+
+ if (!empty($context->replyToID)) {
+ $notice = Notice::staticGet('uri', $context->replyToID);
+ if (empty($notice)) {
+ throw new ClientException("In reply to unknown notice");
+ }
+ if ($notice->profile_id != $this->user->id) {
+ throw new ClientException("In reply to a notice not by this user");
+ }
+ } else if (!empty($context->attention)) {
+ if (!in_array($this->user->uri, $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!");
+ }
+ } else {
+ throw new ClientException("Not to anyone in reply to anything!");
+ }
+
+ $existing = Notice::staticGet('uri', $this->act->object->id);
+
+ if (!empty($existing)) {
+ common_log(LOG_ERR, "Not saving notice '{$existing->uri}'; already exists.");
+ return;
+ }
+
+ $this->saveNotice();
+ }
+
+ /**
+ * We've gotten a follow/subscribe notification from a remote user.
+ * Save a subscription relationship for them.
+ */
+
+ function handleFollow()
+ {
+ $oprofile = $this->ensureProfile();
+ if ($oprofile) {
+ common_log(LOG_INFO, "Setting up subscription from remote {$oprofile->uri} to local {$this->user->nickname}");
+ Subscription::start($oprofile->localProfile(),
+ $this->user->getProfile());
+ } else {
+ common_log(LOG_INFO, "Can't set up subscription from remote; missing profile.");
+ }
+ }
+
+ /**
+ * We've gotten an unfollow/unsubscribe notification from a remote user.
+ * Check if we have a subscription relationship for them and kill it.
+ *
+ * @fixme probably catch exceptions on fail?
+ */
+ function handleUnfollow()
+ {
+ $oprofile = $this->ensureProfile();
+ if ($oprofile) {
+ common_log(LOG_INFO, "Canceling subscription from remote {$oprofile->uri} to local {$this->user->nickname}");
+ Subscription::cancel($oprofile->localProfile(), $this->user->getProfile());
+ } else {
+ common_log(LOG_ERR, "Can't cancel subscription from remote, didn't find the profile");
+ }
+ }
+
+ /**
+ * Remote user likes one of our posts.
+ * Confirm the post is ours, and save a local favorite event.
+ */
+
+ function handleFavorite()
+ {
+ $notice = $this->getNotice($this->act->object);
+ $profile = $this->ensureProfile()->localProfile();
+
+ $old = Fave::pkeyGet(array('user_id' => $profile->id,
+ 'notice_id' => $notice->id));
+
+ if (!empty($old)) {
+ throw new ClientException("We already know that's a fave!");
+ }
+
+ if (!Fave::addNew($profile, $notice)) {
+ throw new ClientException("Could not save new favorite.");
+ }
+ }
+
+ /**
+ * Remote user doesn't like one of our posts after all!
+ * Confirm the post is ours, and save a local favorite event.
+ */
+ function handleUnfavorite()
+ {
+ $notice = $this->getNotice($this->act->object);
+ $profile = $this->ensureProfile()->localProfile();
+
+ $fave = Fave::pkeyGet(array('user_id' => $profile->id,
+ 'notice_id' => $notice->id));
+ if (empty($fave)) {
+ throw new ClientException("Notice wasn't favorited!");
+ }
+
+ $fave->delete();
+ }
+
+ /**
+ * @param ActivityObject $object
+ * @return Notice
+ * @throws ClientException on invalid input
+ */
+ function getNotice($object)
+ {
+ if (!$object) {
+ throw new ClientException("Can't favorite/unfavorite without an object.");
+ }
+
+ switch ($object->type) {
+ case ActivityObject::ARTICLE:
+ case ActivityObject::BLOGENTRY:
+ case ActivityObject::NOTE:
+ case ActivityObject::STATUS:
+ case ActivityObject::COMMENT:
+ break;
+ default:
+ throw new ClientException("Can't handle that kind of object for liking/faving.");
+ }
+
+ $notice = Notice::staticGet('uri', $object->id);
+
+ if (empty($notice)) {
+ throw new ClientException("Notice with ID $object->id unknown.");
+ }
+
+ if ($notice->profile_id != $this->user->id) {
+ throw new ClientException("Notice with ID $object->id not posted by $this->user->id.");
+ }
+
+ return $notice;
+ }
+
+}
diff --git a/plugins/OStatus/actions/webfinger.php b/plugins/OStatus/actions/userxrd.php
index 75ba16638..414de9364 100644
--- a/plugins/OStatus/actions/webfinger.php
+++ b/plugins/OStatus/actions/userxrd.php
@@ -22,29 +22,19 @@
* @maintainer James Walker <james@status.net>
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET')) { exit(1); }
-class WebfingerAction extends Action
+class UserxrdAction extends XrdAction
{
- public $uri;
-
function prepare($args)
{
parent::prepare($args);
$this->uri = $this->trimmed('uri');
+ $acct = Discovery::normalize($this->uri);
- return true;
- }
-
- function handle()
- {
- $acct = Webfinger::normalize($this->uri);
-
- $xrd = new XRD();
-
- list($nick, $domain) = explode('@', urldecode($acct));
+ list($nick, $domain) = explode('@', substr(urldecode($acct), 5));
$nick = common_canonical_nickname($nick);
$this->user = User::staticGet('nickname', $nick);
@@ -53,25 +43,6 @@ class WebfingerAction extends Action
return false;
}
- $xrd->subject = $this->uri;
- $xrd->alias[] = common_profile_url($nick);
- $xrd->links[] = array('rel' => 'http://webfinger.net/rel/profile-page',
- 'type' => 'text/html',
- 'href' => common_profile_url($nick));
-
- $salmon_url = common_local_url('salmon',
- array('id' => $this->user->id));
-
- $xrd->links[] = array('rel' => 'salmon',
- 'href' => $salmon_url);
-
- // TODO - finalize where the redirect should go on the publisher
- $url = common_local_url('ostatussub') . '?feed={uri}';
- $xrd->links[] = array('rel' => 'http://ostatus.org/schema/1.0/subscribe',
- 'template' => $url );
-
- header('Content-type: text/xml');
- print $xrd->toXML();
+ return true;
}
-
}
diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php
new file mode 100644
index 000000000..b848b6b1d
--- /dev/null
+++ b/plugins/OStatus/classes/FeedSub.php
@@ -0,0 +1,452 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009-2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+/*
+PuSH subscription flow:
+
+ $profile->subscribe()
+ generate random verification token
+ save to verify_token
+ sends a sub request to the hub...
+
+ main/push/callback
+ hub sends confirmation back to us via GET
+ We verify the request, then echo back the challenge.
+ On our end, we save the time we subscribed and the lease expiration
+
+ main/push/callback
+ hub sends us updates via POST
+
+*/
+
+class FeedDBException extends FeedSubException
+{
+ public $obj;
+
+ function __construct($obj)
+ {
+ parent::__construct('Database insert failure');
+ $this->obj = $obj;
+ }
+}
+
+/**
+ * FeedSub handles low-level PubHubSubbub (PuSH) subscriptions.
+ * Higher-level behavior building OStatus stuff on top is handled
+ * under Ostatus_profile.
+ */
+class FeedSub extends Memcached_DataObject
+{
+ public $__table = 'feedsub';
+
+ public $id;
+ public $feeduri;
+
+ // PuSH subscription data
+ public $huburi;
+ public $secret;
+ public $verify_token;
+ public $sub_state; // subscribe, active, unsubscribe, inactive
+ public $sub_start;
+ public $sub_end;
+ public $last_update;
+
+ public $created;
+ public $modified;
+
+ public /*static*/ function staticGet($k, $v=null)
+ {
+ return parent::staticGet(__CLASS__, $k, $v);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * DB_DataObject needs to know something about the table to manipulate
+ * instances. This method provides all the DB_DataObject needs to know.
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'huburi' => DB_DATAOBJECT_STR,
+ 'secret' => DB_DATAOBJECT_STR,
+ 'verify_token' => DB_DATAOBJECT_STR,
+ 'sub_state' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'last_update' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('id', 'integer',
+ /*size*/ null,
+ /*nullable*/ false,
+ /*key*/ 'PRI',
+ /*default*/ '0',
+ /*extra*/ null,
+ /*auto_increment*/ true),
+ new ColumnDef('uri', 'varchar',
+ 255, false, 'UNI'),
+ new ColumnDef('huburi', 'text',
+ null, true),
+ new ColumnDef('verify_token', 'text',
+ null, true),
+ new ColumnDef('secret', 'text',
+ null, true),
+ new ColumnDef('sub_state', "enum('subscribe','active','unsubscribe','inactive')",
+ null, false),
+ new ColumnDef('sub_start', 'datetime',
+ null, true),
+ new ColumnDef('sub_end', 'datetime',
+ null, true),
+ new ColumnDef('last_update', 'datetime',
+ null, false),
+ new ColumnDef('created', 'datetime',
+ null, false),
+ new ColumnDef('modified', 'datetime',
+ null, false));
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ /**
+ * return key definitions for Memcached_DataObject
+ *
+ * Our caching system uses the same key definitions, but uses a different
+ * method to get them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return array('id' => 'K', 'uri' => 'U');
+ }
+
+ function sequenceKey()
+ {
+ return array('id', true, false);
+ }
+
+ /**
+ * Fetch the StatusNet-side profile for this feed
+ * @return Profile
+ */
+ public function localProfile()
+ {
+ if ($this->profile_id) {
+ return Profile::staticGet('id', $this->profile_id);
+ }
+ return null;
+ }
+
+ /**
+ * Fetch the StatusNet-side profile for this feed
+ * @return Profile
+ */
+ public function localGroup()
+ {
+ if ($this->group_id) {
+ return User_group::staticGet('id', $this->group_id);
+ }
+ return null;
+ }
+
+ /**
+ * @param string $feeduri
+ * @return FeedSub
+ * @throws FeedSubException if feed is invalid or lacks PuSH setup
+ */
+ public static function ensureFeed($feeduri)
+ {
+ $current = self::staticGet('uri', $feeduri);
+ if ($current) {
+ return $current;
+ }
+
+ $discover = new FeedDiscovery();
+ $discover->discoverFromFeedURL($feeduri);
+
+ $huburi = $discover->getAtomLink('hub');
+ if (!$huburi) {
+ throw new FeedSubNoHubException();
+ }
+
+ $feedsub = new FeedSub();
+ $feedsub->uri = $feeduri;
+ $feedsub->huburi = $huburi;
+ $feedsub->sub_state = 'inactive';
+
+ $feedsub->created = common_sql_now();
+ $feedsub->modified = common_sql_now();
+
+ $result = $feedsub->insert();
+ if (empty($result)) {
+ throw new FeedDBException($feedsub);
+ }
+
+ return $feedsub;
+ }
+
+ /**
+ * Send a subscription request to the hub for this feed.
+ * The hub will later send us a confirmation POST to /main/push/callback.
+ *
+ * @return bool true on success, false on failure
+ * @throws ServerException if feed state is not valid
+ */
+ public function subscribe($mode='subscribe')
+ {
+ if ($this->sub_state && $this->sub_state != 'inactive') {
+ throw new ServerException("Attempting to start PuSH subscription to feed in state $this->sub_state");
+ }
+ if (empty($this->huburi)) {
+ if (common_config('feedsub', 'nohub')) {
+ // Fake it! We're just testing remote feeds w/o hubs.
+ return true;
+ } else {
+ throw new ServerException("Attempting to start PuSH subscription for feed with no hub");
+ }
+ }
+
+ return $this->doSubscribe('subscribe');
+ }
+
+ /**
+ * Send a PuSH unsubscription request to the hub for this feed.
+ * The hub will later send us a confirmation POST to /main/push/callback.
+ *
+ * @return bool true on success, false on failure
+ * @throws ServerException if feed state is not valid
+ */
+ public function unsubscribe() {
+ if ($this->sub_state != 'active') {
+ throw new ServerException("Attempting to end PuSH subscription to feed in state $this->sub_state");
+ }
+ if (empty($this->huburi)) {
+ if (common_config('feedsub', 'nohub')) {
+ // Fake it! We're just testing remote feeds w/o hubs.
+ return true;
+ } else {
+ throw new ServerException("Attempting to end PuSH subscription for feed with no hub");
+ }
+ }
+
+ return $this->doSubscribe('unsubscribe');
+ }
+
+ protected function doSubscribe($mode)
+ {
+ $orig = clone($this);
+ $this->verify_token = common_good_rand(16);
+ if ($mode == 'subscribe') {
+ $this->secret = common_good_rand(32);
+ }
+ $this->sub_state = $mode;
+ $this->update($orig);
+ unset($orig);
+
+ try {
+ $callback = common_local_url('pushcallback', array('feed' => $this->id));
+ $headers = array('Content-Type: application/x-www-form-urlencoded');
+ $post = array('hub.mode' => $mode,
+ 'hub.callback' => $callback,
+ 'hub.verify' => 'sync',
+ 'hub.verify_token' => $this->verify_token,
+ 'hub.secret' => $this->secret,
+ 'hub.topic' => $this->uri);
+ $client = new HTTPClient();
+ $response = $client->post($this->huburi, $headers, $post);
+ $status = $response->getStatus();
+ if ($status == 202) {
+ common_log(LOG_INFO, __METHOD__ . ': sub req ok, awaiting verification callback');
+ return true;
+ } else if ($status == 204) {
+ common_log(LOG_INFO, __METHOD__ . ': sub req ok and verified');
+ return true;
+ } else if ($status >= 200 && $status < 300) {
+ common_log(LOG_ERR, __METHOD__ . ": sub req returned unexpected HTTP $status: " . $response->getBody());
+ return false;
+ } else {
+ common_log(LOG_ERR, __METHOD__ . ": sub req failed with HTTP $status: " . $response->getBody());
+ return false;
+ }
+ } catch (Exception $e) {
+ // wtf!
+ common_log(LOG_ERR, __METHOD__ . ": error \"{$e->getMessage()}\" hitting hub $this->huburi subscribing to $this->uri");
+
+ $orig = clone($this);
+ $this->verify_token = '';
+ $this->sub_state = 'inactive';
+ $this->update($orig);
+ unset($orig);
+
+ return false;
+ }
+ }
+
+ /**
+ * Save PuSH subscription confirmation.
+ * Sets approximate lease start and end times and finalizes state.
+ *
+ * @param int $lease_seconds provided hub.lease_seconds parameter, if given
+ */
+ public function confirmSubscribe($lease_seconds=0)
+ {
+ $original = clone($this);
+
+ $this->sub_state = 'active';
+ $this->sub_start = common_sql_date(time());
+ if ($lease_seconds > 0) {
+ $this->sub_end = common_sql_date(time() + $lease_seconds);
+ } else {
+ $this->sub_end = null;
+ }
+ $this->modified = common_sql_now();
+
+ return $this->update($original);
+ }
+
+ /**
+ * Save PuSH unsubscription confirmation.
+ * Wipes active PuSH sub info and resets state.
+ */
+ public function confirmUnsubscribe()
+ {
+ $original = clone($this);
+
+ // @fixme these should all be null, but DB_DataObject doesn't save null values...?????
+ $this->verify_token = '';
+ $this->secret = '';
+ $this->sub_state = '';
+ $this->sub_start = '';
+ $this->sub_end = '';
+ $this->modified = common_sql_now();
+
+ return $this->update($original);
+ }
+
+ /**
+ * Accept updates from a PuSH feed. If validated, this object and the
+ * feed (as a DOMDocument) will be passed to the StartFeedSubHandleFeed
+ * and EndFeedSubHandleFeed events for processing.
+ *
+ * Not guaranteed to be running in an immediate POST context; may be run
+ * from a queue handler.
+ *
+ * Side effects: the feedsub record's lastupdate field will be updated
+ * to the current time (not published time) if we got a legit update.
+ *
+ * @param string $post source of Atom or RSS feed
+ * @param string $hmac X-Hub-Signature header, if present
+ */
+ public function receive($post, $hmac)
+ {
+ common_log(LOG_INFO, __METHOD__ . ": packet for \"$this->uri\"! $hmac $post");
+
+ if ($this->sub_state != 'active') {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH for inactive feed $this->uri (in state '$this->sub_state')");
+ return;
+ }
+
+ if ($post === '') {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring empty post");
+ return;
+ }
+
+ if (!$this->validatePushSig($post, $hmac)) {
+ // Per spec we silently drop input with a bad sig,
+ // while reporting receipt to the server.
+ return;
+ }
+
+ $feed = new DOMDocument();
+ if (!$feed->loadXML($post)) {
+ // @fixme might help to include the err message
+ common_log(LOG_ERR, __METHOD__ . ": ignoring invalid XML");
+ return;
+ }
+
+ $orig = clone($this);
+ $this->last_update = common_sql_now();
+ $this->update($orig);
+
+ Event::handle('StartFeedSubReceive', array($this, $feed));
+ Event::handle('EndFeedSubReceive', array($this, $feed));
+ }
+
+ /**
+ * Validate the given Atom chunk and HMAC signature against our
+ * shared secret that was set up at subscription time.
+ *
+ * If we don't have a shared secret, there should be no signature.
+ * If we we do, our the calculated HMAC should match theirs.
+ *
+ * @param string $post raw XML source as POSTed to us
+ * @param string $hmac X-Hub-Signature HTTP header value, or empty
+ * @return boolean true for a match
+ */
+ protected function validatePushSig($post, $hmac)
+ {
+ if ($this->secret) {
+ if (preg_match('/^sha1=([0-9a-fA-F]{40})$/', $hmac, $matches)) {
+ $their_hmac = strtolower($matches[1]);
+ $our_hmac = hash_hmac('sha1', $post, $this->secret);
+ if ($their_hmac === $our_hmac) {
+ return true;
+ }
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bad SHA-1 HMAC: got $their_hmac, expected $our_hmac");
+ } else {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bogus HMAC '$hmac'");
+ }
+ } else {
+ if (empty($hmac)) {
+ return true;
+ } else {
+ common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with unexpected HMAC '$hmac'");
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php
index 7071ee5b4..3120a70f9 100644
--- a/plugins/OStatus/classes/HubSub.php
+++ b/plugins/OStatus/classes/HubSub.php
@@ -30,12 +30,11 @@ class HubSub extends Memcached_DataObject
public $topic;
public $callback;
public $secret;
- public $verify_token;
- public $challenge;
public $lease;
public $sub_start;
public $sub_end;
public $created;
+ public $modified;
public /*static*/ function staticGet($topic, $callback)
{
@@ -62,12 +61,11 @@ class HubSub extends Memcached_DataObject
'topic' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'callback' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'secret' => DB_DATAOBJECT_STR,
- 'verify_token' => DB_DATAOBJECT_STR,
- 'challenge' => DB_DATAOBJECT_STR,
'lease' => DB_DATAOBJECT_INT,
'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
}
static function schemaDef()
@@ -84,10 +82,6 @@ class HubSub extends Memcached_DataObject
255, false),
new ColumnDef('secret', 'text',
null, true),
- new ColumnDef('verify_token', 'text',
- null, true),
- new ColumnDef('challenge', 'varchar',
- 32, true),
new ColumnDef('lease', 'int',
null, true),
new ColumnDef('sub_start', 'datetime',
@@ -95,6 +89,8 @@ class HubSub extends Memcached_DataObject
new ColumnDef('sub_end', 'datetime',
null, true),
new ColumnDef('created', 'datetime',
+ null, false),
+ new ColumnDef('modified', 'datetime',
null, false));
}
@@ -103,7 +99,7 @@ class HubSub extends Memcached_DataObject
return array_keys($this->keyTypes());
}
- function sequenceKeys()
+ function sequenceKey()
{
return array(false, false, false);
}
@@ -152,84 +148,132 @@ class HubSub extends Memcached_DataObject
}
/**
- * Send a verification ping to subscriber
+ * Schedule a future verification ping to the subscriber.
+ * If queues are disabled, will be immediate.
+ *
* @param string $mode 'subscribe' or 'unsubscribe'
+ * @param string $token hub.verify_token value, if provided by client
*/
- function verify($mode)
+ function scheduleVerify($mode, $token=null, $retries=null)
{
- assert($mode == 'subscribe' || $mode == 'unsubscribe');
+ if ($retries === null) {
+ $retries = intval(common_config('ostatus', 'hub_retries'));
+ }
+ $data = array('sub' => clone($this),
+ 'mode' => $mode,
+ 'token' => $token,
+ 'retries' => $retries);
+ $qm = QueueManager::get();
+ $qm->enqueue($data, 'hubconf');
+ }
- // Is this needed? data object fun...
- $clone = clone($this);
- $clone->challenge = common_good_rand(16);
- $clone->update($this);
- $this->challenge = $clone->challenge;
- unset($clone);
+ /**
+ * Send a verification ping to subscriber, and if confirmed apply the changes.
+ * This may create, update, or delete the database record.
+ *
+ * @param string $mode 'subscribe' or 'unsubscribe'
+ * @param string $token hub.verify_token value, if provided by client
+ * @throws ClientException on failure
+ */
+ function verify($mode, $token=null)
+ {
+ assert($mode == 'subscribe' || $mode == 'unsubscribe');
+ $challenge = common_good_rand(32);
$params = array('hub.mode' => $mode,
'hub.topic' => $this->topic,
- 'hub.challenge' => $this->challenge);
+ 'hub.challenge' => $challenge);
if ($mode == 'subscribe') {
$params['hub.lease_seconds'] = $this->lease;
}
- if ($this->verify_token) {
- $params['hub.verify_token'] = $this->verify_token;
+ if ($token !== null) {
+ $params['hub.verify_token'] = $token;
}
- $url = $this->callback . '?' . http_build_query($params, '', '&'); // @fixme ugly urls
- try {
- $request = new HTTPClient();
- $response = $request->get($url);
- $status = $response->getStatus();
-
- if ($status >= 200 && $status < 300) {
- $fail = false;
- } else {
- // @fixme how can we schedule a second attempt?
- // Or should we?
- $fail = "Returned HTTP $status";
- }
- } catch (Exception $e) {
- $fail = $e->getMessage();
+ // Any existing query string parameters must be preserved
+ $url = $this->callback;
+ if (strpos('?', $url) !== false) {
+ $url .= '&';
+ } else {
+ $url .= '?';
}
- if ($fail) {
- // @fixme how can we schedule a second attempt?
- // or save a fail count?
- // Or should we?
- common_log(LOG_ERR, "Failed to verify $mode for $this->topic at $this->callback: $fail");
- return false;
+ $url .= http_build_query($params, '', '&');
+
+ $request = new HTTPClient();
+ $response = $request->get($url);
+ $status = $response->getStatus();
+
+ if ($status >= 200 && $status < 300) {
+ common_log(LOG_INFO, "Verified $mode of $this->callback:$this->topic");
} else {
- if ($mode == 'subscribe') {
- // Establish or renew the subscription!
- // This seems unnecessary... dataobject fun!
- $clone = clone($this);
- $clone->challenge = null;
- $clone->setLease($this->lease);
- $clone->update($this);
- unset($clone);
+ throw new ClientException("Hub subscriber verification returned HTTP $status");
+ }
- $this->challenge = null;
- $this->setLease($this->lease);
- common_log(LOG_ERR, "Verified $mode of $this->callback:$this->topic for $this->lease seconds");
- } else if ($mode == 'unsubscribe') {
- common_log(LOG_ERR, "Verified $mode of $this->callback:$this->topic");
- $this->delete();
+ $old = HubSub::staticGet($this->topic, $this->callback);
+ if ($mode == 'subscribe') {
+ if ($old) {
+ $this->update($old);
+ } else {
+ $ok = $this->insert();
+ }
+ } else if ($mode == 'unsubscribe') {
+ if ($old) {
+ $old->delete();
+ } else {
+ // That's ok, we're already unsubscribed.
}
- return true;
}
}
/**
* Insert wrapper; transparently set the hash key from topic and callback columns.
- * @return boolean success
+ * @return mixed success
*/
function insert()
{
$this->hashkey = self::hashkey($this->topic, $this->callback);
+ $this->created = common_sql_now();
+ $this->modified = common_sql_now();
return parent::insert();
}
/**
+ * Update wrapper; transparently update modified column.
+ * @return boolean success
+ */
+ function update($old=null)
+ {
+ $this->modified = common_sql_now();
+ return parent::update($old);
+ }
+
+ /**
+ * Schedule delivery of a 'fat ping' to the subscriber's callback
+ * endpoint. If queues are disabled, this will run immediately.
+ *
+ * @param string $atom well-formed Atom feed
+ * @param int $retries optional count of retries if POST fails; defaults to hub_retries from config or 0 if unset
+ */
+ function distribute($atom, $retries=null)
+ {
+ if ($retries === null) {
+ $retries = intval(common_config('ostatus', 'hub_retries'));
+ }
+
+ // We dare not clone() as when the clone is discarded it'll
+ // destroy the result data for the parent query.
+ // @fixme use clone() again when it's safe to copy an
+ // individual item from a multi-item query again.
+ $sub = HubSub::staticGet($this->topic, $this->callback);
+ $data = array('sub' => $sub,
+ 'atom' => $atom,
+ 'retries' => $retries);
+ common_log(LOG_INFO, "Queuing PuSH: $this->topic to $this->callback");
+ $qm = QueueManager::get();
+ $qm->enqueue($data, 'hubout');
+ }
+
+ /**
* Send a 'fat ping' to the subscriber's callback endpoint
* containing the given Atom feed chunk.
*
@@ -237,6 +281,7 @@ class HubSub extends Memcached_DataObject
* a higher level; don't just shove in a complete feed!
*
* @param string $atom well-formed Atom feed
+ * @throws Exception (HTTP or general)
*/
function push($atom)
{
@@ -248,24 +293,18 @@ class HubSub extends Memcached_DataObject
$hmac = '(none)';
}
common_log(LOG_INFO, "About to push feed to $this->callback for $this->topic, HMAC $hmac");
- try {
- $request = new HTTPClient();
- $request->setBody($atom);
- $response = $request->post($this->callback, $headers);
- if ($response->isOk()) {
- return true;
- }
- common_log(LOG_ERR, "Error sending PuSH content " .
- "to $this->callback for $this->topic: " .
- $response->getStatus());
- return false;
+ $request = new HTTPClient();
+ $request->setBody($atom);
+ $response = $request->post($this->callback, $headers);
- } catch (Exception $e) {
- common_log(LOG_ERR, "Error sending PuSH content " .
- "to $this->callback for $this->topic: " .
- $e->getMessage());
- return false;
+ if ($response->isOk()) {
+ return true;
+ } else {
+ throw new Exception("Callback returned status: " .
+ $response->getStatus() .
+ "; body: " .
+ trim($response->getBody()));
}
}
}
diff --git a/plugins/OStatus/classes/Magicsig.php b/plugins/OStatus/classes/Magicsig.php
new file mode 100644
index 000000000..5a46aeeb6
--- /dev/null
+++ b/plugins/OStatus/classes/Magicsig.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+require_once 'Crypt/RSA.php';
+
+class Magicsig extends Memcached_DataObject
+{
+
+ const PUBLICKEYREL = 'magic-public-key';
+
+ public $__table = 'magicsig';
+
+ public $user_id;
+ public $keypair;
+ public $alg;
+
+ private $_rsa;
+
+ public function __construct($alg = 'RSA-SHA256')
+ {
+ $this->alg = $alg;
+ }
+
+ public /*static*/ function staticGet($k, $v=null)
+ {
+ $obj = parent::staticGet(__CLASS__, $k, $v);
+ if (!empty($obj)) {
+ return Magicsig::fromString($obj->keypair);
+ }
+
+ return $obj;
+ }
+
+
+ function table()
+ {
+ return array(
+ 'user_id' => DB_DATAOBJECT_INT,
+ 'keypair' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'alg' => DB_DATAOBJECT_STR
+ );
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('user_id', 'integer',
+ null, true, 'PRI'),
+ new ColumnDef('keypair', 'varchar',
+ 255, false),
+ new ColumnDef('alg', 'varchar',
+ 64, false));
+ }
+
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
+ return array('user_id' => 'K');
+ }
+
+ function sequenceKey() {
+ return array(false, false, false);
+ }
+
+ function insert()
+ {
+ $this->keypair = $this->toString();
+
+ return parent::insert();
+ }
+
+ public function generate($user_id, $key_length = 512)
+ {
+ PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+
+ $keypair = new Crypt_RSA_KeyPair($key_length);
+ $params['public_key'] = $keypair->getPublicKey();
+ $params['private_key'] = $keypair->getPrivateKey();
+
+ $this->_rsa = new Crypt_RSA($params);
+ PEAR::popErrorHandling();
+
+ $this->user_id = $user_id;
+ $this->insert();
+ }
+
+
+ public function toString($full_pair = true)
+ {
+ $public_key = $this->_rsa->_public_key;
+ $private_key = $this->_rsa->_private_key;
+
+ $mod = base64_url_encode($public_key->getModulus());
+ $exp = base64_url_encode($public_key->getExponent());
+ $private_exp = '';
+ if ($full_pair && $private_key->getExponent()) {
+ $private_exp = '.' . base64_url_encode($private_key->getExponent());
+ }
+
+ return 'RSA.' . $mod . '.' . $exp . $private_exp;
+ }
+
+ public static function fromString($text)
+ {
+ PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+
+ $magic_sig = new Magicsig();
+
+ // remove whitespace
+ $text = preg_replace('/\s+/', '', $text);
+
+ // parse components
+ if (!preg_match('/RSA\.([^\.]+)\.([^\.]+)(.([^\.]+))?/', $text, $matches)) {
+ return false;
+ }
+
+ $mod = base64_url_decode($matches[1]);
+ $exp = base64_url_decode($matches[2]);
+ if (!empty($matches[4])) {
+ $private_exp = base64_url_decode($matches[4]);
+ } else {
+ $private_exp = false;
+ }
+
+ $params['public_key'] = new Crypt_RSA_KEY($mod, $exp, 'public');
+ if ($params['public_key']->isError()) {
+ $error = $params['public_key']->getLastError();
+ common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
+ return false;
+ }
+ if ($private_exp) {
+ $params['private_key'] = new Crypt_RSA_KEY($mod, $private_exp, 'private');
+ if ($params['private_key']->isError()) {
+ $error = $params['private_key']->getLastError();
+ common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
+ return false;
+ }
+ }
+
+ $magic_sig->_rsa = new Crypt_RSA($params);
+ PEAR::popErrorHandling();
+
+ return $magic_sig;
+ }
+
+ public function getName()
+ {
+ return $this->alg;
+ }
+
+ public function getHash()
+ {
+ switch ($this->alg) {
+
+ case 'RSA-SHA256':
+ return 'magicsig_sha256';
+ }
+
+ }
+
+ public function sign($bytes)
+ {
+ $hash = $this->getHash();
+ $sig = $this->_rsa->createSign($bytes, null, $hash);
+ if ($this->_rsa->isError()) {
+ $error = $this->_rsa->getLastError();
+ common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
+ return false;
+ }
+
+ return $sig;
+ }
+
+ public function verify($signed_bytes, $signature)
+ {
+ $hash = $this->getHash();
+ $result = $this->_rsa->validateSign($signed_bytes, $signature, null, $hash);
+ if ($this->_rsa->isError()) {
+ $error = $this->keypair->getLastError();
+ common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
+ return false;
+ }
+ return $result;
+ }
+
+}
+
+// Define a sha256 function for hashing
+// (Crypt_RSA should really be updated to use hash() )
+function magicsig_sha256($bytes)
+{
+ return hash('sha256', $bytes);
+}
+
+function base64_url_encode($input)
+{
+ return strtr(base64_encode($input), '+/', '-_');
+}
+
+function base64_url_decode($input)
+{
+ return base64_decode(strtr($input, '-_', '+/'));
+} \ No newline at end of file
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index be01cdfe1..fcca1a252 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -18,62 +18,25 @@
*/
/**
- * @package FeedSubPlugin
+ * @package OStatusPlugin
* @maintainer Brion Vibber <brion@status.net>
*/
-/*
-PuSH subscription flow:
-
- $profile->subscribe()
- generate random verification token
- save to verify_token
- sends a sub request to the hub...
-
- main/push/callback
- hub sends confirmation back to us via GET
- We verify the request, then echo back the challenge.
- On our end, we save the time we subscribed and the lease expiration
-
- main/push/callback
- hub sends us updates via POST
-
-*/
-
-class FeedDBException extends FeedSubException
-{
- public $obj;
-
- function __construct($obj)
- {
- parent::__construct('Database insert failure');
- $this->obj = $obj;
- }
-}
-
class Ostatus_profile extends Memcached_DataObject
{
public $__table = 'ostatus_profile';
- public $id;
+ public $uri;
+
public $profile_id;
public $group_id;
public $feeduri;
- public $homeuri;
-
- // PuSH subscription data
- public $huburi;
- public $secret;
- public $verify_token;
- public $sub_state; // subscribe, active, unsubscribe
- public $sub_start;
- public $sub_end;
-
public $salmonuri;
+ public $avatar; // remote URL of the last avatar we saved
public $created;
- public $lastupdate;
+ public $modified;
public /*static*/ function staticGet($k, $v=null)
{
@@ -91,56 +54,33 @@ class Ostatus_profile extends Memcached_DataObject
function table()
{
- return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ return array('uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
'profile_id' => DB_DATAOBJECT_INT,
'group_id' => DB_DATAOBJECT_INT,
- 'feeduri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'homeuri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'huburi' => DB_DATAOBJECT_STR,
- 'secret' => DB_DATAOBJECT_STR,
- 'verify_token' => DB_DATAOBJECT_STR,
- 'sub_state' => DB_DATAOBJECT_STR,
- 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
+ 'feeduri' => DB_DATAOBJECT_STR,
'salmonuri' => DB_DATAOBJECT_STR,
+ 'avatar' => DB_DATAOBJECT_STR,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
- 'lastupdate' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
}
static function schemaDef()
{
- return array(new ColumnDef('id', 'integer',
- /*size*/ null,
- /*nullable*/ false,
- /*key*/ 'PRI',
- /*default*/ '0',
- /*extra*/ null,
- /*auto_increment*/ true),
+ return array(new ColumnDef('uri', 'varchar',
+ 255, false, 'PRI'),
new ColumnDef('profile_id', 'integer',
null, true, 'UNI'),
new ColumnDef('group_id', 'integer',
null, true, 'UNI'),
new ColumnDef('feeduri', 'varchar',
- 255, false, 'UNI'),
- new ColumnDef('homeuri', 'varchar',
- 255, false),
- new ColumnDef('huburi', 'text',
- null, true),
- new ColumnDef('verify_token', 'varchar',
- 32, true),
- new ColumnDef('secret', 'varchar',
- 64, true),
- new ColumnDef('sub_state', "enum('subscribe','active','unsubscribe')",
- null, true),
- new ColumnDef('sub_start', 'datetime',
- null, true),
- new ColumnDef('sub_end', 'datetime',
- null, true),
+ 255, true, 'UNI'),
new ColumnDef('salmonuri', 'text',
null, true),
+ new ColumnDef('avatar', 'text',
+ null, true),
new ColumnDef('created', 'datetime',
null, false),
- new ColumnDef('lastupdate', 'datetime',
+ new ColumnDef('modified', 'datetime',
null, false));
}
@@ -169,12 +109,12 @@ class Ostatus_profile extends Memcached_DataObject
function keyTypes()
{
- return array('id' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
+ return array('uri' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
}
function sequenceKey()
{
- return array('id', true, false);
+ return array(false, false, false);
}
/**
@@ -202,97 +142,17 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
- * @param FeedMunger $munger
- * @param boolean $isGroup is this a group record?
- * @return Ostatus_profile
- */
- public static function ensureProfile($munger)
- {
- $profile = $munger->ostatusProfile();
-
- $current = self::staticGet('feeduri', $profile->feeduri);
- if ($current) {
- // @fixme we should probably update info as necessary
- return $current;
- }
-
- $profile->query('BEGIN');
-
- try {
- $local = $munger->profile();
-
- if ($profile->isGroup()) {
- $group = new User_group();
- $group->nickname = $local->nickname . '@remote'; // @fixme
- $group->fullname = $local->fullname;
- $group->homepage = $local->homepage;
- $group->location = $local->location;
- $group->created = $local->created;
- $group->insert();
- if (empty($result)) {
- throw new FeedDBException($group);
- }
- $profile->group_id = $group->id;
- } else {
- $result = $local->insert();
- if (empty($result)) {
- throw new FeedDBException($local);
- }
- $profile->profile_id = $local->id;
- }
-
- $profile->created = common_sql_now();
- $profile->lastupdate = common_sql_now();
- $result = $profile->insert();
- if (empty($result)) {
- throw new FeedDBException($profile);
- }
-
- $profile->query('COMMIT');
- } catch (FeedDBException $e) {
- common_log_db_error($e->obj, 'INSERT', __FILE__);
- $profile->query('ROLLBACK');
- return false;
- }
-
- $avatar = $munger->getAvatar();
- if ($avatar) {
- try {
- $profile->updateAvatar($avatar);
- } catch (Exception $e) {
- common_log(LOG_ERR, "Exception setting OStatus avatar: " .
- $e->getMessage());
- }
- }
-
- return $profile;
- }
-
- /**
- * Download and update given avatar image
- * @param string $url
- * @throws Exception in various failure cases
+ * Returns an ActivityObject describing this remote user or group profile.
+ * Can then be used to generate Atom chunks.
+ *
+ * @return ActivityObject
*/
- public function updateAvatar($url)
+ function asActivityObject()
{
- // @fixme this should be better encapsulated
- // ripped from oauthstore.php (for old OMB client)
- $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
- copy($url, $temp_filename);
-
- // @fixme should we be using different ids?
- $imagefile = new ImageFile($this->id, $temp_filename);
- $filename = Avatar::filename($this->id,
- image_type_to_extension($imagefile->type),
- null,
- common_timestamp());
- rename($temp_filename, Avatar::path($filename));
if ($this->isGroup()) {
- $group = $this->localGroup();
- $group->setOriginal($filename);
+ return ActivityObject::fromGroup($this->localGroup());
} else {
- $profile = $this->localProfile();
- $profile->setOriginal($filename);
+ return ActivityObject::fromProfile($this->localProfile());
}
}
@@ -302,71 +162,82 @@ class Ostatus_profile extends Memcached_DataObject
*
* Assumes that 'activity' namespace has been previously defined.
*
+ * @fixme replace with wrappers on asActivityObject when it's got everything.
+ *
* @param string $element one of 'actor', 'subject', 'object', 'target'
* @return string
*/
function asActivityNoun($element)
{
- $xs = new XMLStringer(true);
-
- $avatarHref = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
- $avatarType = 'image/png';
if ($this->isGroup()) {
- $type = 'http://activitystrea.ms/schema/1.0/group';
- $self = $this->localGroup();
-
- // @fixme put a standard getAvatar() interface on groups too
- if ($self->homepage_logo) {
- $avatarHref = $self->homepage_logo;
- $map = array('png' => 'image/png',
- 'jpg' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'gif' => 'image/gif');
- $extension = pathinfo(parse_url($avatarHref, PHP_URL_PATH), PATHINFO_EXTENSION);
- if (isset($map[$extension])) {
- $avatarType = $map[$extension];
- }
- }
+ $noun = ActivityObject::fromGroup($this->localGroup());
+ return $noun->asString('activity:' . $element);
} else {
- $type = 'http://activitystrea.ms/schema/1.0/person';
- $self = $this->localProfile();
- $avatar = $self->getAvatar(AVATAR_PROFILE_SIZE);
- if ($avatar) {
- $avatarHref = $avatar->
- $avatarType = $avatar->mediatype;
- }
+ $noun = ActivityObject::fromProfile($this->localProfile());
+ return $noun->asString('activity:' . $element);
}
- $xs->elementStart('activity:' . $element);
- $xs->element(
- 'activity:object-type',
- null,
- $type
- );
- $xs->element(
- 'id',
- null,
- $this->homeuri); // ?
- $xs->element('title', null, $self->getBestName());
+ }
- $xs->element(
- 'link', array(
- 'type' => $avatarType,
- 'href' => $avatarHref
- ),
- ''
- );
+ /**
+ * @return boolean true if this is a remote group
+ */
+ function isGroup()
+ {
+ if ($this->profile_id && !$this->group_id) {
+ return false;
+ } else if ($this->group_id && !$this->profile_id) {
+ return true;
+ } else if ($this->group_id && $this->profile_id) {
+ throw new ServerException("Invalid ostatus_profile state: both group and profile IDs set for $this->uri");
+ } else {
+ throw new ServerException("Invalid ostatus_profile state: both group and profile IDs empty for $this->uri");
+ }
+ }
- $xs->elementEnd('activity:' . $element);
+ /**
+ * Subscribe a local user to this remote user.
+ * PuSH subscription will be started if necessary, and we'll
+ * send a Salmon notification to the remote server if available
+ * notifying them of the sub.
+ *
+ * @param User $user
+ * @return boolean success
+ * @throws FeedException
+ */
+ public function subscribeLocalToRemote(User $user)
+ {
+ if ($this->isGroup()) {
+ throw new ServerException("Can't subscribe to a remote group");
+ }
- return $xs->getString();
+ if ($this->subscribe()) {
+ if ($user->subscribeTo($this->localProfile())) {
+ $this->notify($user->getProfile(), ActivityVerb::FOLLOW, $this);
+ return true;
+ }
+ }
+ return false;
}
/**
- * Damn dirty hack!
+ * Mark this remote profile as subscribing to the given local user,
+ * and send appropriate notifications to the user.
+ *
+ * This will generally be in response to a subscription notification
+ * from a foreign site to our local Salmon response channel.
+ *
+ * @param User $user
+ * @return boolean success
*/
- function isGroup()
+ public function subscribeRemoteToLocal(User $user)
{
- return (strpos($this->feeduri, '/groups/') !== false);
+ if ($this->isGroup()) {
+ throw new ServerException("Remote groups can't subscribe to local users");
+ }
+
+ Subscription::start($this->localProfile(), $user->getProfile());
+
+ return true;
}
/**
@@ -376,21 +247,16 @@ class Ostatus_profile extends Memcached_DataObject
* @return bool true on success, false on failure
* @throws ServerException if feed state is not valid
*/
- public function subscribe($mode='subscribe')
+ public function subscribe()
{
- if ($this->sub_state != '') {
- throw new ServerException("Attempting to start PuSH subscription to feed in state $this->sub_state");
+ $feedsub = FeedSub::ensureFeed($this->feeduri);
+ if ($feedsub->sub_state == 'active' || $feedsub->sub_state == 'subscribe') {
+ return true;
+ } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') {
+ return $feedsub->subscribe();
+ } else if ('unsubscribe') {
+ throw new FeedSubException("Unsub is pending, can't subscribe...");
}
- if (empty($this->huburi)) {
- if (common_config('feedsub', 'nohub')) {
- // Fake it! We're just testing remote feeds w/o hubs.
- return true;
- } else {
- throw new ServerException("Attempting to start PuSH subscription for feed with no hub");
- }
- }
-
- return $this->doSubscribe('subscribe');
}
/**
@@ -401,196 +267,160 @@ class Ostatus_profile extends Memcached_DataObject
* @throws ServerException if feed state is not valid
*/
public function unsubscribe() {
- if ($this->sub_state != 'active') {
- throw new ServerException("Attempting to end PuSH subscription to feed in state $this->sub_state");
+ $feedsub = FeedSub::staticGet('uri', $this->feeduri);
+ if (!$feedsub) {
+ return true;
}
- if (empty($this->huburi)) {
- if (common_config('feedsub', 'nohub')) {
- // Fake it! We're just testing remote feeds w/o hubs.
- return true;
- } else {
- throw new ServerException("Attempting to end PuSH subscription for feed with no hub");
- }
- }
-
- return $this->doSubscribe('unsubscribe');
- }
-
- protected function doSubscribe($mode)
- {
- $orig = clone($this);
- $this->verify_token = common_good_rand(16);
- if ($mode == 'subscribe') {
- $this->secret = common_good_rand(32);
- }
- $this->sub_state = $mode;
- $this->update($orig);
- unset($orig);
-
- try {
- $callback = common_local_url('pushcallback', array('feed' => $this->id));
- $headers = array('Content-Type: application/x-www-form-urlencoded');
- $post = array('hub.mode' => $mode,
- 'hub.callback' => $callback,
- 'hub.verify' => 'async',
- 'hub.verify_token' => $this->verify_token,
- 'hub.secret' => $this->secret,
- //'hub.lease_seconds' => 0,
- 'hub.topic' => $this->feeduri);
- $client = new HTTPClient();
- $response = $client->post($this->huburi, $headers, $post);
- $status = $response->getStatus();
- if ($status == 202) {
- common_log(LOG_INFO, __METHOD__ . ': sub req ok, awaiting verification callback');
- return true;
- } else if ($status == 204) {
- common_log(LOG_INFO, __METHOD__ . ': sub req ok and verified');
- return true;
- } else if ($status >= 200 && $status < 300) {
- common_log(LOG_ERR, __METHOD__ . ": sub req returned unexpected HTTP $status: " . $response->getBody());
- return false;
- } else {
- common_log(LOG_ERR, __METHOD__ . ": sub req failed with HTTP $status: " . $response->getBody());
- return false;
- }
- } catch (Exception $e) {
- // wtf!
- common_log(LOG_ERR, __METHOD__ . ": error \"{$e->getMessage()}\" hitting hub $this->huburi subscribing to $this->feeduri");
-
- $orig = clone($this);
- $this->verify_token = null;
- $this->sub_state = null;
- $this->update($orig);
- unset($orig);
-
- return false;
+ if ($feedsub->sub_state == 'active') {
+ return $feedsub->unsubscribe();
+ } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive' || $feedsub->sub_state == 'unsubscribe') {
+ return true;
+ } else if ($feedsub->sub_state == 'subscribe') {
+ throw new FeedSubException("Feed is awaiting subscription, can't unsub...");
}
}
/**
- * Save PuSH subscription confirmation.
- * Sets approximate lease start and end times and finalizes state.
+ * Check if this remote profile has any active local subscriptions, and
+ * if not drop the PuSH subscription feed.
*
- * @param int $lease_seconds provided hub.lease_seconds parameter, if given
+ * @return boolean
*/
- public function confirmSubscribe($lease_seconds=0)
+ public function garbageCollect()
{
- $original = clone($this);
-
- $this->sub_state = 'active';
- $this->sub_start = common_sql_date(time());
- if ($lease_seconds > 0) {
- $this->sub_end = common_sql_date(time() + $lease_seconds);
+ if ($this->isGroup()) {
+ $members = $this->localGroup()->getMembers(0, 1);
+ $count = $members->N;
} else {
- $this->sub_end = null;
+ $count = $this->localProfile()->subscriberCount();
+ }
+ if ($count == 0) {
+ common_log(LOG_INFO, "Unsubscribing from now-unused remote feed $this->feeduri");
+ $this->unsubscribe();
+ return true;
+ } else {
+ return false;
}
- $this->lastupdate = common_sql_date();
-
- return $this->update($original);
- }
-
- /**
- * Save PuSH unsubscription confirmation.
- * Wipes active PuSH sub info and resets state.
- */
- public function confirmUnsubscribe()
- {
- $original = clone($this);
-
- $this->verify_token = null;
- $this->secret = null;
- $this->sub_state = null;
- $this->sub_start = null;
- $this->sub_end = null;
- $this->lastupdate = common_sql_date();
-
- return $this->update($original);
}
/**
* Send an Activity Streams notification to the remote Salmon endpoint,
* if so configured.
*
- * @param Profile $actor
- * @param $verb eg Activity::SUBSCRIBE or Activity::JOIN
- * @param $object object of the action; if null, the remote entity itself is assumed
+ * @param Profile $actor Actor who did the activity
+ * @param string $verb Activity::SUBSCRIBE or Activity::JOIN
+ * @param Object $object object of the action; must define asActivityNoun($tag)
*/
- public function notify(Profile $actor, $verb, $object=null)
+ public function notify($actor, $verb, $object=null)
{
+ if (!($actor instanceof Profile)) {
+ $type = gettype($actor);
+ if ($type == 'object') {
+ $type = get_class($actor);
+ }
+ throw new ServerException("Invalid actor passed to " . __METHOD__ . ": " . $type);
+ }
if ($object == null) {
$object = $this;
}
if ($this->salmonuri) {
- $text = 'update'; // @fixme
- $id = 'tag:' . common_config('site', 'server') .
- ':' . $verb .
- ':' . $actor->id .
- ':' . time(); // @fixme
-
- $entry = new Atom10Entry();
- $entry->elementStart('entry');
+
+ $text = 'update';
+ $id = TagURI::mint('%s:%s:%s',
+ $verb,
+ $actor->getURI(),
+ common_date_iso8601(time()));
+
+ // @fixme consolidate all these NS settings somewhere
+ $attributes = array('xmlns' => Activity::ATOM,
+ 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
+ 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0',
+ 'xmlns:georss' => 'http://www.georss.org/georss',
+ 'xmlns:ostatus' => 'http://ostatus.org/schema/1.0',
+ 'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
+ 'xmlns:media' => 'http://purl.org/syndication/atommedia');
+
+ $entry = new XMLStringer();
+ $entry->elementStart('entry', $attributes);
$entry->element('id', null, $id);
$entry->element('title', null, $text);
$entry->element('summary', null, $text);
- $entry->element('published', null, common_date_w3dtf());
+ $entry->element('published', null, common_date_w3dtf(common_sql_now()));
$entry->element('activity:verb', null, $verb);
- $entry->raw($profile->asAtomAuthor());
- $entry->raw($profile->asActivityActor());
+ $entry->raw($actor->asAtomAuthor());
+ $entry->raw($actor->asActivityActor());
$entry->raw($object->asActivityNoun('object'));
- $entry->elmentEnd('entry');
+ $entry->elementEnd('entry');
- $feed = $this->atomFeed($actor);
- $feed->initFeed();
- $feed->addEntry($entry);
- $feed->renderEntries();
- $feed->endFeed();
-
- $xml = $feed->getString();
- common_log(LOG_INFO, "Posting to Salmon endpoint $salmon: $xml");
+ $xml = $entry->getString();
+ common_log(LOG_INFO, "Posting to Salmon endpoint $this->salmonuri: $xml");
$salmon = new Salmon(); // ?
- $salmon->post($this->salmonuri, $xml);
+ return $salmon->post($this->salmonuri, $xml, $actor);
}
+ return false;
}
- function getBestName()
+ /**
+ * Send a Salmon notification ping immediately, and confirm that we got
+ * an acceptable response from the remote site.
+ *
+ * @param mixed $entry XML string, Notice, or Activity
+ * @return boolean success
+ */
+ public function notifyActivity($entry, $actor)
{
- if ($this->isGroup()) {
- return $this->localGroup()->getBestName();
- } else {
- return $this->localProfile()->getBestName();
+ if ($this->salmonuri) {
+ $salmon = new Salmon();
+ return $salmon->post($this->salmonuri, $this->notifyPrepXml($entry), $actor);
}
+
+ return false;
}
- function atomFeed($actor)
+ /**
+ * Queue a Salmon notification for later. If queues are disabled we'll
+ * send immediately but won't get the return value.
+ *
+ * @param mixed $entry XML string, Notice, or Activity
+ * @return boolean success
+ */
+ public function notifyDeferred($entry, $actor)
{
- $feed = new Atom10Feed();
- // @fixme should these be set up somewhere else?
- $feed->addNamespace('activity', 'http://activitystrea.ms/spec/1.0/');
- $feed->addNamesapce('thr', 'http://purl.org/syndication/thread/1.0');
- $feed->addNamespace('georss', 'http://www.georss.org/georss');
- $feed->addNamespace('ostatus', 'http://ostatus.org/schema/1.0');
-
- $taguribase = common_config('integration', 'taguri');
- $feed->setId("tag:{$taguribase}:UserTimeline:{$actor->id}"); // ???
+ if ($this->salmonuri) {
+ $data = array('salmonuri' => $this->salmonuri,
+ 'entry' => $this->notifyPrepXml($entry),
+ 'actor' => $actor->id);
- $feed->setTitle($actor->getBestName() . ' timeline'); // @fixme
- $feed->setUpdated(time());
- $feed->setPublished(time());
+ $qm = QueueManager::get();
+ return $qm->enqueue($data, 'salmon');
+ }
- $feed->addLink(common_url('ApiTimelineUser',
- array('id' => $actor->id,
- 'type' => 'atom')),
- array('rel' => 'self',
- 'type' => 'application/atom+xml'));
+ return false;
+ }
- $feed->addLink(common_url('userbyid',
- array('id' => $actor->id)),
- array('rel' => 'alternate',
- 'type' => 'text/html'));
+ protected function notifyPrepXml($entry)
+ {
+ $preamble = '<?xml version="1.0" encoding="UTF-8" ?' . '>';
+ if (is_string($entry)) {
+ return $entry;
+ } else if ($entry instanceof Activity) {
+ return $preamble . $entry->asString(true);
+ } else if ($entry instanceof Notice) {
+ return $preamble . $entry->asAtomEntry(true, true);
+ } else {
+ throw new ServerException("Invalid type passed to Ostatus_profile::notify; must be XML string or Activity entry");
+ }
+ }
- return $feed;
+ function getBestName()
+ {
+ if ($this->isGroup()) {
+ return $this->localGroup()->getBestName();
+ } else {
+ return $this->localProfile()->getBestName();
+ }
}
/**
@@ -598,36 +428,10 @@ class Ostatus_profile extends Memcached_DataObject
* Currently assumes that all items in the feed are new,
* coming from a PuSH hub.
*
- * @param string $post source of Atom or RSS feed
- * @param string $hmac X-Hub-Signature header, if present
+ * @param DOMDocument $feed
*/
- public function postUpdates($post, $hmac)
+ public function processFeed($feed, $source)
{
- common_log(LOG_INFO, __METHOD__ . ": packet for \"$this->feeduri\"! $hmac $post");
-
- if ($this->sub_state != 'active') {
- common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH for inactive feed $this->feeduri (in state '$this->sub_state')");
- return;
- }
-
- if ($post === '') {
- common_log(LOG_ERR, __METHOD__ . ": ignoring empty post");
- return;
- }
-
- if (!$this->validatePushSig($post, $hmac)) {
- // Per spec we silently drop input with a bad sig,
- // while reporting receipt to the server.
- return;
- }
-
- $feed = new DOMDocument();
- if (!$feed->loadXML($post)) {
- // @fixme might help to include the err message
- common_log(LOG_ERR, __METHOD__ . ": ignoring invalid XML");
- return;
- }
-
$entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
if ($entries->length == 0) {
common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring");
@@ -636,59 +440,22 @@ class Ostatus_profile extends Memcached_DataObject
for ($i = 0; $i < $entries->length; $i++) {
$entry = $entries->item($i);
- $this->processEntry($entry, $feed);
+ $this->processEntry($entry, $feed, $source);
}
}
/**
- * Validate the given Atom chunk and HMAC signature against our
- * shared secret that was set up at subscription time.
- *
- * If we don't have a shared secret, there should be no signature.
- * If we we do, our the calculated HMAC should match theirs.
- *
- * @param string $post raw XML source as POSTed to us
- * @param string $hmac X-Hub-Signature HTTP header value, or empty
- * @return boolean true for a match
- */
- protected function validatePushSig($post, $hmac)
- {
- if ($this->secret) {
- if (preg_match('/^sha1=([0-9a-fA-F]{40})$/', $hmac, $matches)) {
- $their_hmac = strtolower($matches[1]);
- $our_hmac = hash_hmac('sha1', $post, $this->secret);
- if ($their_hmac === $our_hmac) {
- return true;
- }
- common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bad SHA-1 HMAC: got $their_hmac, expected $our_hmac");
- } else {
- common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with bogus HMAC '$hmac'");
- }
- } else {
- if (empty($hmac)) {
- return true;
- } else {
- common_log(LOG_ERR, __METHOD__ . ": ignoring PuSH with unexpected HMAC '$hmac'");
- }
- }
- return false;
- }
-
- /**
* Process a posted entry from this feed source.
*
* @param DOMElement $entry
* @param DOMElement $feed for context
*/
- protected function processEntry($entry, $feed)
+ public function processEntry($entry, $feed, $source)
{
$activity = new Activity($entry, $feed);
- $debug = var_export($activity, true);
- common_log(LOG_DEBUG, $debug);
-
if ($activity->verb == ActivityVerb::POST) {
- $this->processPost($activity);
+ $this->processPost($activity, $source);
} else {
common_log(LOG_INFO, "Ignoring activity with unrecognized verb $activity->verb");
}
@@ -697,91 +464,393 @@ class Ostatus_profile extends Memcached_DataObject
/**
* Process an incoming post activity from this remote feed.
* @param Activity $activity
+ * @param string $method 'push' or 'salmon'
+ * @return mixed saved Notice or false
+ * @fixme break up this function, it's getting nasty long
*/
- protected function processPost($activity)
+ public function processPost($activity, $method)
{
if ($this->isGroup()) {
+ // A group feed will contain posts from multiple authors.
// @fixme validate these profiles in some way!
- $oprofile = $this->ensureActorProfile($activity);
+ $oprofile = self::ensureActorProfile($activity);
+ if ($oprofile->isGroup()) {
+ // Groups can't post notices in StatusNet.
+ common_log(LOG_WARNING, "OStatus: skipping post with group listed as author: $oprofile->uri in feed from $this->uri");
+ return false;
+ }
} else {
- $actorUri = $this->getActorProfileURI($activity);
- if ($actorUri == $this->homeuri) {
- // @fixme check if profile info has changed and update it
+ // Individual user feeds may contain only posts from themselves.
+ // Authorship is validated against the profile URI on upper layers,
+ // through PuSH setup or Salmon signature checks.
+ $actorUri = self::getActorProfileURI($activity);
+ if ($actorUri == $this->uri) {
+ // Check if profile info has changed and update it
+ $this->updateFromActivityObject($activity->actor);
} else {
- // @fixme drop or reject the messages once we've got the canonical profile URI recorded sanely
- common_log(LOG_INFO, "OStatus: Warning: non-group post with unexpected author: $actorUri expected $this->homeuri");
- //return;
+ common_log(LOG_WARNING, "OStatus: skipping post with bad author: got $actorUri expected $this->uri");
+ return false;
}
$oprofile = $this;
}
+ // The id URI will be used as a unique identifier for for the notice,
+ // protecting against duplicate saves. It isn't required to be a URL;
+ // tag: URIs for instance are found in Google Buzz feeds.
+ $sourceUri = $activity->object->id;
+ $dupe = Notice::staticGet('uri', $sourceUri);
+ if ($dupe) {
+ common_log(LOG_INFO, "OStatus: ignoring duplicate post: $sourceUri");
+ return false;
+ }
+
+ // We'll also want to save a web link to the original notice, if provided.
+ $sourceUrl = null;
if ($activity->object->link) {
- $sourceUri = $activity->object->link;
+ $sourceUrl = $activity->object->link;
+ } else if ($activity->link) {
+ $sourceUrl = $activity->link;
} else if (preg_match('!^https?://!', $activity->object->id)) {
- $sourceUri = $activity->object->id;
+ $sourceUrl = $activity->object->id;
+ }
+
+ // Get (safe!) HTML and text versions of the content
+ $rendered = $this->purify($activity->object->content);
+ $content = html_entity_decode(strip_tags($rendered));
+
+ $shortened = common_shorten_links($content);
+
+ // If it's too long, try using the summary, and make the
+ // HTML an attachment.
+
+ $attachment = null;
+
+ if (Notice::contentTooLong($shortened)) {
+ $attachment = $this->saveHTMLFile($activity->object->title, $rendered);
+ $summary = $activity->object->summary;
+ if (empty($summary)) {
+ $summary = $content;
+ }
+ $shortSummary = common_shorten_links($summary);
+ if (Notice::contentTooLong($shortSummary)) {
+ $url = common_shorten_url(common_local_url('attachment',
+ array('attachment' => $attachment->id)));
+ $shortSummary = substr($shortSummary,
+ 0,
+ Notice::maxContent() - (mb_strlen($url) + 2));
+ $shortSummary .= '… ' . $url;
+ $content = $shortSummary;
+ $rendered = common_render_text($content);
+ }
+ }
+
+ $options = array('is_local' => Notice::REMOTE_OMB,
+ 'url' => $sourceUrl,
+ 'uri' => $sourceUri,
+ 'rendered' => $rendered,
+ 'replies' => array(),
+ 'groups' => array(),
+ 'tags' => array(),
+ 'urls' => array());
+
+ // Check for optional attributes...
+
+ if (!empty($activity->time)) {
+ $options['created'] = common_sql_date($activity->time);
+ }
+
+ if ($activity->context) {
+ // Any individual or group attn: targets?
+ $replies = $activity->context->attention;
+ $options['groups'] = $this->filterReplies($oprofile, $replies);
+ $options['replies'] = $replies;
+
+ // Maintain direct reply associations
+ // @fixme what about conversation ID?
+ if (!empty($activity->context->replyToID)) {
+ $orig = Notice::staticGet('uri',
+ $activity->context->replyToID);
+ if (!empty($orig)) {
+ $options['reply_to'] = $orig->id;
+ }
+ }
+
+ $location = $activity->context->location;
+ if ($location) {
+ $options['lat'] = $location->lat;
+ $options['lon'] = $location->lon;
+ if ($location->location_id) {
+ $options['location_ns'] = $location->location_ns;
+ $options['location_id'] = $location->location_id;
+ }
+ }
+ }
+
+ // Atom categories <-> hashtags
+ foreach ($activity->categories as $cat) {
+ if ($cat->term) {
+ $term = common_canonical_tag($cat->term);
+ if ($term) {
+ $options['tags'][] = $term;
+ }
+ }
+ }
+
+ // Atom enclosures -> attachment URLs
+ foreach ($activity->enclosures as $href) {
+ // @fixme save these locally or....?
+ $options['urls'][] = $href;
+ }
+
+ try {
+ $saved = Notice::saveNew($oprofile->profile_id,
+ $content,
+ 'ostatus',
+ $options);
+ if ($saved) {
+ Ostatus_source::saveNew($saved, $this, $method);
+ if (!empty($attachment)) {
+ File_to_post::processNew($attachment->id, $saved->id);
+ }
+ }
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "OStatus save of remote message $sourceUri failed: " . $e->getMessage());
+ throw $e;
+ }
+ common_log(LOG_INFO, "OStatus saved remote message $sourceUri as notice id $saved->id");
+ return $saved;
+ }
+
+ /**
+ * Clean up HTML
+ */
+ protected function purify($html)
+ {
+ require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+ $config = array('safe' => 1,
+ 'deny_attribute' => 'id,style,on*');
+ return htmLawed($html, $config);
+ }
+
+ /**
+ * Filters a list of recipient ID URIs to just those for local delivery.
+ * @param Ostatus_profile local profile of sender
+ * @param array in/out &$attention_uris set of URIs, will be pruned on output
+ * @return array of group IDs
+ */
+ protected function filterReplies($sender, &$attention_uris)
+ {
+ common_log(LOG_DEBUG, "Original reply recipients: " . implode(', ', $attention_uris));
+ $groups = array();
+ $replies = array();
+ foreach ($attention_uris as $recipient) {
+ // Is the recipient a local user?
+ $user = User::staticGet('uri', $recipient);
+ if ($user) {
+ // @fixme sender verification, spam etc?
+ $replies[] = $recipient;
+ continue;
+ }
+
+ // Is the recipient a remote group?
+ $oprofile = Ostatus_profile::staticGet('uri', $recipient);
+ if ($oprofile) {
+ if ($oprofile->isGroup()) {
+ // Deliver to local members of this remote group.
+ // @fixme sender verification?
+ $groups[] = $oprofile->group_id;
+ } else {
+ common_log(LOG_DEBUG, "Skipping reply to remote profile $recipient");
+ }
+ continue;
+ }
+
+ // Is the recipient a local group?
+ // @fixme we need a uri on user_group
+ // $group = User_group::staticGet('uri', $recipient);
+ $template = common_local_url('groupbyid', array('id' => '31337'));
+ $template = preg_quote($template, '/');
+ $template = str_replace('31337', '(\d+)', $template);
+ if (preg_match("/$template/", $recipient, $matches)) {
+ $id = $matches[1];
+ $group = User_group::staticGet('id', $id);
+ if ($group) {
+ // Deliver to all members of this local group if allowed.
+ $profile = $sender->localProfile();
+ if ($profile->isMember($group)) {
+ $groups[] = $group->id;
+ } else {
+ common_log(LOG_DEBUG, "Skipping reply to local group $group->nickname as sender $profile->id is not a member");
+ }
+ continue;
+ } else {
+ common_log(LOG_DEBUG, "Skipping reply to bogus group $recipient");
+ }
+ }
+
+ common_log(LOG_DEBUG, "Skipping reply to unrecognized profile $recipient");
+
+ }
+ $attention_uris = $replies;
+ common_log(LOG_DEBUG, "Local reply recipients: " . implode(', ', $replies));
+ common_log(LOG_DEBUG, "Local group recipients: " . implode(', ', $groups));
+ return $groups;
+ }
+
+ /**
+ * @param string $profile_url
+ * @return Ostatus_profile
+ * @throws FeedSubException
+ */
+ public static function ensureProfile($profile_uri, $hints=array())
+ {
+ // Get the canonical feed URI and check it
+ $discover = new FeedDiscovery();
+ if (isset($hints['feedurl'])) {
+ $feeduri = $hints['feedurl'];
+ $feeduri = $discover->discoverFromFeedURL($feeduri);
} else {
- common_log(LOG_INFO, "OStatus: ignoring post with no source link: id $activity->object->id");
- return;
+ $feeduri = $discover->discoverFromURL($profile_uri);
+ $hints['feedurl'] = $feeduri;
}
- $dupe = Notice::staticGet('uri', $sourceUri);
- if ($dupe) {
- common_log(LOG_INFO, "OStatus: ignoring duplicate post: $noticeLink");
- return;
+ $huburi = $discover->getAtomLink('hub');
+ $hints['hub'] = $huburi;
+ $salmonuri = $discover->getAtomLink(Salmon::NS_REPLIES);
+ $hints['salmon'] = $salmonuri;
+
+ if (!$huburi) {
+ // We can only deal with folks with a PuSH hub
+ throw new FeedSubNoHubException();
+ }
+
+ // Try to get a profile from the feed activity:subject
+
+ $feedEl = $discover->feed->documentElement;
+
+ $subject = ActivityUtils::child($feedEl, Activity::SUBJECT, Activity::SPEC);
+
+ if (!empty($subject)) {
+ $subjObject = new ActivityObject($subject);
+ return self::ensureActivityObjectProfile($subjObject, $hints);
+ }
+
+ // Otherwise, try the feed author
+
+ $author = ActivityUtils::child($feedEl, Activity::AUTHOR, Activity::ATOM);
+
+ if (!empty($author)) {
+ $authorObject = new ActivityObject($author);
+ return self::ensureActivityObjectProfile($authorObject, $hints);
}
- // @fixme sanitize and save HTML content if available
- $content = $activity->object->title;
+ // Sheesh. Not a very nice feed! Let's try fingerpoken in the
+ // entries.
- $params = array('is_local' => Notice::REMOTE_OMB,
- 'uri' => $sourceUri);
+ $entries = $discover->feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
+
+ if (!empty($entries) && $entries->length > 0) {
+
+ $entry = $entries->item(0);
+
+ $actor = ActivityUtils::child($entry, Activity::ACTOR, Activity::SPEC);
+
+ if (!empty($actor)) {
+ $actorObject = new ActivityObject($actor);
+ return self::ensureActivityObjectProfile($actorObject, $hints);
- $location = $this->getEntryLocation($activity->entry);
- if ($location) {
- $params['lat'] = $location->lat;
- $params['lon'] = $location->lon;
- if ($location->location_id) {
- $params['location_ns'] = $location->location_ns;
- $params['location_id'] = $location->location_id;
+ }
+
+ $author = ActivityUtils::child($entry, Activity::AUTHOR, Activity::ATOM);
+
+ if (!empty($author)) {
+ $authorObject = new ActivityObject($author);
+ return self::ensureActivityObjectProfile($authorObject, $hints);
}
}
- // @fixme save detailed ostatus source info
- // @fixme ensure that groups get handled correctly
+ // XXX: make some educated guesses here
- $saved = Notice::saveNew($oprofile->localProfile()->id,
- $content,
- 'ostatus',
- $params);
+ throw new FeedSubException("Can't find enough profile information to make a feed.");
}
/**
- * Parse location given as a GeoRSS-simple point, if provided.
- * http://www.georss.org/simple
*
- * @param feed item $entry
- * @return mixed Location or false
- */
- function getLocation($dom)
- {
- $points = $dom->getElementsByTagNameNS('http://www.georss.org/georss', 'point');
-
- for ($i = 0; $i < $points->length; $i++) {
- $point = $points->item(0)->textContent;
- $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
- $point = preg_replace('/\s+/', ' ', $point);
- $point = trim($point);
- $coords = explode(' ', $point);
- if (count($coords) == 2) {
- list($lat, $lon) = $coords;
- if (is_numeric($lat) && is_numeric($lon)) {
- common_log(LOG_INFO, "Looking up location for $lat $lon from georss");
- return Location::fromLatLon($lat, $lon);
+ * Download and update given avatar image
+ * @param string $url
+ * @throws Exception in various failure cases
+ */
+ protected function updateAvatar($url)
+ {
+ if ($url == $this->avatar) {
+ // We've already got this one.
+ return;
+ }
+
+ if ($this->isGroup()) {
+ $self = $this->localGroup();
+ } else {
+ $self = $this->localProfile();
+ }
+ if (!$self) {
+ throw new ServerException(sprintf(
+ _m("Tried to update avatar for unsaved remote profile %s"),
+ $this->uri));
+ }
+
+ // @fixme this should be better encapsulated
+ // ripped from oauthstore.php (for old OMB client)
+ $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
+ if (!copy($url, $temp_filename)) {
+ throw new ServerException(sprintf(_m("Unable to fetch avatar from %s"), $url));
+ }
+
+ if ($this->isGroup()) {
+ $id = $this->group_id;
+ } else {
+ $id = $this->profile_id;
+ }
+ // @fixme should we be using different ids?
+ $imagefile = new ImageFile($id, $temp_filename);
+ $filename = Avatar::filename($id,
+ image_type_to_extension($imagefile->type),
+ null,
+ common_timestamp());
+ rename($temp_filename, Avatar::path($filename));
+ $self->setOriginal($filename);
+
+ $orig = clone($this);
+ $this->avatar = $url;
+ $this->update($orig);
+ }
+
+ /**
+ * Pull avatar URL from ActivityObject or profile hints
+ *
+ * @param ActivityObject $object
+ * @param array $hints
+ * @return mixed URL string or false
+ */
+
+ protected static function getActivityObjectAvatar($object, $hints=array())
+ {
+ if ($object->avatarLinks) {
+ $best = false;
+ // Take the exact-size avatar, or the largest avatar, or the first avatar if all sizeless
+ foreach ($object->avatarLinks as $avatar) {
+ if ($avatar->width == AVATAR_PROFILE_SIZE && $avatar->height = AVATAR_PROFILE_SIZE) {
+ // Exact match!
+ $best = $avatar;
+ break;
+ }
+ if (!$best || $avatar->width > $best->width) {
+ $best = $avatar;
}
}
- common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
+ return $best->url;
+ } else if (array_key_exists('avatar', $hints)) {
+ return $hints['avatar'];
}
-
return false;
}
@@ -792,7 +861,8 @@ class Ostatus_profile extends Memcached_DataObject
* @param DOMElement $feed
* @return string
*/
- function getAvatar($actor, $feed)
+
+ protected static function getAvatar($actor, $feed)
{
$url = '';
$icon = '';
@@ -831,13 +901,27 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
- * @fixme move off of ostatus_profile or static?
+ * Fetch, or build if necessary, an Ostatus_profile for the actor
+ * in a given Activity Streams activity.
+ *
+ * @param Activity $activity
+ * @param string $feeduri if we already know the canonical feed URI!
+ * @param string $salmonuri if we already know the salmon return channel URI
+ * @return Ostatus_profile
*/
- function ensureActorProfile($activity)
+
+ public static function ensureActorProfile($activity, $hints=array())
{
- $profile = $this->getActorProfile($activity);
- if (!$profile) {
- $profile = $this->createActorProfile($activity);
+ return self::ensureActivityObjectProfile($activity->actor, $hints);
+ }
+
+ public static function ensureActivityObjectProfile($object, $hints=array())
+ {
+ $profile = self::getActivityObjectProfile($object);
+ if ($profile) {
+ $profile->updateFromActivityObject($object, $hints);
+ } else {
+ $profile = self::createActivityObjectProfile($object, $hints);
}
return $profile;
}
@@ -846,10 +930,20 @@ class Ostatus_profile extends Memcached_DataObject
* @param Activity $activity
* @return mixed matching Ostatus_profile or false if none known
*/
- function getActorProfile($activity)
+ public static function getActorProfile($activity)
+ {
+ return self::getActivityObjectProfile($activity->actor);
+ }
+
+ protected static function getActivityObjectProfile($object)
{
- $homeuri = $this->getActorProfileURI($activity);
- return Ostatus_profile::staticGet('homeuri', $homeuri);
+ $uri = self::getActivityObjectProfileURI($object);
+ return Ostatus_profile::staticGet('uri', $uri);
+ }
+
+ protected static function getActorProfileURI($activity)
+ {
+ return self::getActivityObjectProfileURI($activity->actor);
}
/**
@@ -857,56 +951,110 @@ class Ostatus_profile extends Memcached_DataObject
* @return string
* @throws ServerException
*/
- function getActorProfileURI($activity)
+ protected static function getActivityObjectProfileURI($object)
{
$opts = array('allowed_schemes' => array('http', 'https'));
- $actor = $activity->actor;
- if ($actor->id && Validate::uri($actor->id, $opts)) {
- return $actor->id;
+ if ($object->id && Validate::uri($object->id, $opts)) {
+ return $object->id;
}
- if ($actor->link && Validate::uri($actor->link, $opts)) {
- return $actor->link;
+ if ($object->link && Validate::uri($object->link, $opts)) {
+ return $object->link;
}
throw new ServerException("No author ID URI found");
}
/**
+ * @fixme validate stuff somewhere
+ */
+
+ /**
+ * Create local ostatus_profile and profile/user_group entries for
+ * the provided remote user or group.
*
+ * @param ActivityObject $object
+ * @param array $hints
+ *
+ * @return Ostatus_profile
*/
- function createActorProfile($activity)
+ protected static function createActivityObjectProfile($object, $hints=array())
{
- $actor = $activity->actor();
- $homeuri = $this->getActivityProfileURI($activity);
- $nickname = $this->getAuthorNick($activity);
- $avatar = $this->getAvatar($actor, $feed);
+ $homeuri = $object->id;
+ $discover = false;
- $profile = new Profile();
- $profile->nickname = $nickname;
- $profile->fullname = $actor->displayName;
- $profile->homepage = $actor->link; // @fixme
- $profile->profileurl = $homeuri;
- // @fixme bio
- // @fixme tags/categories
- // @fixme location?
- // @todo tags from categories
- // @todo lat/lon/location?
+ if (!$homeuri) {
+ common_log(LOG_DEBUG, __METHOD__ . " empty actor profile URI: " . var_export($activity, true));
+ throw new ServerException("No profile URI");
+ }
- $ok = $profile->insert();
- if ($ok) {
- $this->updateAvatar($profile, $avatar);
+ if (array_key_exists('feedurl', $hints)) {
+ $feeduri = $hints['feedurl'];
} else {
- throw new ServerException("Can't save local profile");
+ $discover = new FeedDiscovery();
+ $feeduri = $discover->discoverFromURL($homeuri);
+ }
+
+ if (array_key_exists('salmon', $hints)) {
+ $salmonuri = $hints['salmon'];
+ } else {
+ if (!$discover) {
+ $discover = new FeedDiscovery();
+ $discover->discoverFromFeedURL($hints['feedurl']);
+ }
+ $salmonuri = $discover->getAtomLink(Salmon::NS_REPLIES);
+ }
+
+ if (array_key_exists('hub', $hints)) {
+ $huburi = $hints['hub'];
+ } else {
+ if (!$discover) {
+ $discover = new FeedDiscovery();
+ $discover->discoverFromFeedURL($hints['feedurl']);
+ }
+ $huburi = $discover->getAtomLink('hub');
+ }
+
+ if (!$huburi) {
+ // We can only deal with folks with a PuSH hub
+ throw new FeedSubNoHubException();
}
- // @fixme either need to do feed discovery here
- // or need to split out some of the feed stuff
- // so we can leave it empty until later.
$oprofile = new Ostatus_profile();
- $oprofile->homeuri = $homeuri;
- $oprofile->profile_id = $profile->id;
+
+ $oprofile->uri = $homeuri;
+ $oprofile->feeduri = $feeduri;
+ $oprofile->salmonuri = $salmonuri;
+
+ $oprofile->created = common_sql_now();
+ $oprofile->modified = common_sql_now();
+
+ if ($object->type == ActivityObject::PERSON) {
+ $profile = new Profile();
+ $profile->created = common_sql_now();
+ self::updateProfile($profile, $object, $hints);
+
+ $oprofile->profile_id = $profile->insert();
+ if (!$oprofile->profile_id) {
+ throw new ServerException("Can't save local profile");
+ }
+ } else {
+ $group = new User_group();
+ $group->uri = $homeuri;
+ $group->created = common_sql_now();
+ self::updateGroup($group, $object, $hints);
+
+ $oprofile->group_id = $group->insert();
+ if (!$oprofile->group_id) {
+ throw new ServerException("Can't save local profile");
+ }
+ }
$ok = $oprofile->insert();
+
if ($ok) {
+ $avatar = self::getActivityObjectAvatar($object, $hints);
+ if ($avatar) {
+ $oprofile->updateAvatar($avatar);
+ }
return $oprofile;
} else {
throw new ServerException("Can't save OStatus profile");
@@ -914,23 +1062,455 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
- * @fixme move this into Activity?
- * @param Activity $activity
- * @return string
+ * Save any updated profile information to our local copy.
+ * @param ActivityObject $object
+ * @param array $hints
*/
- function getAuthorNick($activity)
+ public function updateFromActivityObject($object, $hints=array())
{
- // @fixme not technically part of the actor?
- foreach (array($activity->entry, $activity->feed) as $source) {
- $author = ActivityUtil::child($source, 'author', Activity::ATOM);
- if ($author) {
- $name = ActivityUtil::child($author, 'name', Activity::ATOM);
- if ($name) {
- return trim($name->textContent);
- }
+ if ($this->isGroup()) {
+ $group = $this->localGroup();
+ self::updateGroup($group, $object, $hints);
+ } else {
+ $profile = $this->localProfile();
+ self::updateProfile($profile, $object, $hints);
+ }
+ $avatar = self::getActivityObjectAvatar($object, $hints);
+ if ($avatar) {
+ $this->updateAvatar($avatar);
+ }
+ }
+
+ protected static function updateProfile($profile, $object, $hints=array())
+ {
+ $orig = clone($profile);
+
+ $profile->nickname = self::getActivityObjectNickname($object, $hints);
+
+ if (!empty($object->title)) {
+ $profile->fullname = $object->title;
+ } else if (array_key_exists('fullname', $hints)) {
+ $profile->fullname = $hints['fullname'];
+ }
+
+ if (!empty($object->link)) {
+ $profile->profileurl = $object->link;
+ } else if (array_key_exists('profileurl', $hints)) {
+ $profile->profileurl = $hints['profileurl'];
+ } else if (Validate::uri($object->id, array('allowed_schemes' => array('http', 'https')))) {
+ $profile->profileurl = $object->id;
+ }
+
+ $profile->bio = self::getActivityObjectBio($object, $hints);
+ $profile->location = self::getActivityObjectLocation($object, $hints);
+ $profile->homepage = self::getActivityObjectHomepage($object, $hints);
+
+ if (!empty($object->geopoint)) {
+ $location = ActivityContext::locationFromPoint($object->geopoint);
+ if (!empty($location)) {
+ $profile->lat = $location->lat;
+ $profile->lon = $location->lon;
}
}
- return false;
+
+ // @fixme tags/categories
+ // @todo tags from categories
+
+ if ($profile->id) {
+ common_log(LOG_DEBUG, "Updating OStatus profile $profile->id from remote info $object->id: " . var_export($object, true) . var_export($hints, true));
+ $profile->update($orig);
+ }
}
+ protected static function updateGroup($group, $object, $hints=array())
+ {
+ $orig = clone($group);
+
+ $group->nickname = self::getActivityObjectNickname($object, $hints);
+ $group->fullname = $object->title;
+
+ if (!empty($object->link)) {
+ $group->mainpage = $object->link;
+ } else if (array_key_exists('profileurl', $hints)) {
+ $group->mainpage = $hints['profileurl'];
+ }
+
+ // @todo tags from categories
+ $group->description = self::getActivityObjectBio($object, $hints);
+ $group->location = self::getActivityObjectLocation($object, $hints);
+ $group->homepage = self::getActivityObjectHomepage($object, $hints);
+
+ if ($group->id) {
+ common_log(LOG_DEBUG, "Updating OStatus group $group->id from remote info $object->id: " . var_export($object, true) . var_export($hints, true));
+ $group->update($orig);
+ }
+ }
+
+ protected static function getActivityObjectHomepage($object, $hints=array())
+ {
+ $homepage = null;
+ $poco = $object->poco;
+
+ if (!empty($poco)) {
+ $url = $poco->getPrimaryURL();
+ if ($url && $url->type == 'homepage') {
+ $homepage = $url->value;
+ }
+ }
+
+ // @todo Try for a another PoCo URL?
+
+ return $homepage;
+ }
+
+ protected static function getActivityObjectLocation($object, $hints=array())
+ {
+ $location = null;
+
+ if (!empty($object->poco) &&
+ isset($object->poco->address->formatted)) {
+ $location = $object->poco->address->formatted;
+ } else if (array_key_exists('location', $hints)) {
+ $location = $hints['location'];
+ }
+
+ if (!empty($location)) {
+ if (mb_strlen($location) > 255) {
+ $location = mb_substr($note, 0, 255 - 3) . ' … ';
+ }
+ }
+
+ // @todo Try to find location some othe way? Via goerss point?
+
+ return $location;
+ }
+
+ protected static function getActivityObjectBio($object, $hints=array())
+ {
+ $bio = null;
+
+ if (!empty($object->poco)) {
+ $note = $object->poco->note;
+ } else if (array_key_exists('bio', $hints)) {
+ $note = $hints['bio'];
+ }
+
+ if (!empty($note)) {
+ if (Profile::bioTooLong($note)) {
+ // XXX: truncate ok?
+ $bio = mb_substr($note, 0, Profile::maxBio() - 3) . ' … ';
+ } else {
+ $bio = $note;
+ }
+ }
+
+ // @todo Try to get bio info some other way?
+
+ return $bio;
+ }
+
+ protected static function getActivityObjectNickname($object, $hints=array())
+ {
+ if ($object->poco) {
+ if (!empty($object->poco->preferredUsername)) {
+ return common_nicknamize($object->poco->preferredUsername);
+ }
+ }
+
+ if (!empty($object->nickname)) {
+ return common_nicknamize($object->nickname);
+ }
+
+ if (array_key_exists('nickname', $hints)) {
+ return $hints['nickname'];
+ }
+
+ // Try the definitive ID
+
+ $nickname = self::nicknameFromURI($object->id);
+
+ // Try a Webfinger if one was passed (way) down
+
+ if (empty($nickname)) {
+ if (array_key_exists('webfinger', $hints)) {
+ $nickname = self::nicknameFromURI($hints['webfinger']);
+ }
+ }
+
+ // Try the name
+
+ if (empty($nickname)) {
+ $nickname = common_nicknamize($object->title);
+ }
+
+ return $nickname;
+ }
+
+ protected static function nicknameFromURI($uri)
+ {
+ preg_match('/(\w+):/', $uri, $matches);
+
+ $protocol = $matches[1];
+
+ switch ($protocol) {
+ case 'acct':
+ case 'mailto':
+ if (preg_match("/^$protocol:(.*)?@.*\$/", $uri, $matches)) {
+ return common_canonical_nickname($matches[1]);
+ }
+ return null;
+ case 'http':
+ return common_url_to_nickname($uri);
+ break;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * @param string $addr webfinger address
+ * @return Ostatus_profile
+ * @throws Exception on error conditions
+ */
+ public static function ensureWebfinger($addr)
+ {
+ // First, try the cache
+
+ $uri = self::cacheGet(sprintf('ostatus_profile:webfinger:%s', $addr));
+
+ if ($uri !== false) {
+ if (is_null($uri)) {
+ // Negative cache entry
+ throw new Exception('Not a valid webfinger address.');
+ }
+ $oprofile = Ostatus_profile::staticGet('uri', $uri);
+ if (!empty($oprofile)) {
+ return $oprofile;
+ }
+ }
+
+ // First, look it up
+
+ $oprofile = Ostatus_profile::staticGet('uri', 'acct:'.$addr);
+
+ if (!empty($oprofile)) {
+ self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
+ return $oprofile;
+ }
+
+ // Now, try some discovery
+
+ $disco = new Discovery();
+
+ try {
+ $result = $disco->lookup($addr);
+ } catch (Exception $e) {
+ // Save negative cache entry so we don't waste time looking it up again.
+ // @fixme distinguish temporary failures?
+ self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), null);
+ throw new Exception('Not a valid webfinger address.');
+ }
+
+ $hints = array('webfinger' => $addr);
+
+ foreach ($result->links as $link) {
+ switch ($link['rel']) {
+ case Discovery::PROFILEPAGE:
+ $hints['profileurl'] = $profileUrl = $link['href'];
+ break;
+ case Salmon::NS_REPLIES:
+ $hints['salmon'] = $salmonEndpoint = $link['href'];
+ break;
+ case Discovery::UPDATESFROM:
+ $hints['feedurl'] = $feedUrl = $link['href'];
+ break;
+ case Discovery::HCARD:
+ $hcardUrl = $link['href'];
+ break;
+ default:
+ common_log(LOG_NOTICE, "Don't know what to do with rel = '{$link['rel']}'");
+ break;
+ }
+ }
+
+ if (isset($hcardUrl)) {
+ $hcardHints = self::slurpHcard($hcardUrl);
+ // Note: Webfinger > hcard
+ $hints = array_merge($hcardHints, $hints);
+ }
+
+ // If we got a feed URL, try that
+
+ if (isset($feedUrl)) {
+ try {
+ common_log(LOG_INFO, "Discovery on acct:$addr with feed URL $feedUrl");
+ $oprofile = self::ensureProfile($feedUrl, $hints);
+ self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
+ return $oprofile;
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, "Failed creating profile from feed URL '$feedUrl': " . $e->getMessage());
+ // keep looking
+ }
+ }
+
+ // If we got a profile page, try that!
+
+ if (isset($profileUrl)) {
+ try {
+ common_log(LOG_INFO, "Discovery on acct:$addr with profile URL $profileUrl");
+ $oprofile = self::ensureProfile($profileUrl, $hints);
+ self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
+ return $oprofile;
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, "Failed creating profile from profile URL '$profileUrl': " . $e->getMessage());
+ // keep looking
+ }
+ }
+
+ // XXX: try hcard
+ // XXX: try FOAF
+
+ if (isset($salmonEndpoint)) {
+
+ // An account URL, a salmon endpoint, and a dream? Not much to go
+ // on, but let's give it a try
+
+ $uri = 'acct:'.$addr;
+
+ $profile = new Profile();
+
+ $profile->nickname = self::nicknameFromUri($uri);
+ $profile->created = common_sql_now();
+
+ if (isset($profileUrl)) {
+ $profile->profileurl = $profileUrl;
+ }
+
+ $profile_id = $profile->insert();
+
+ if (!$profile_id) {
+ common_log_db_error($profile, 'INSERT', __FILE__);
+ throw new Exception("Couldn't save profile for '$addr'");
+ }
+
+ $oprofile = new Ostatus_profile();
+
+ $oprofile->uri = $uri;
+ $oprofile->salmonuri = $salmonEndpoint;
+ $oprofile->profile_id = $profile_id;
+ $oprofile->created = common_sql_now();
+
+ if (isset($feedUrl)) {
+ $profile->feeduri = $feedUrl;
+ }
+
+ $result = $oprofile->insert();
+
+ if (!$result) {
+ common_log_db_error($oprofile, 'INSERT', __FILE__);
+ throw new Exception("Couldn't save ostatus_profile for '$addr'");
+ }
+
+ self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
+ return $oprofile;
+ }
+
+ throw new Exception("Couldn't find a valid profile for '$addr'");
+ }
+
+ function saveHTMLFile($title, $rendered)
+ {
+ $final = sprintf("<!DOCTYPE html>\n<html><head><title>%s</title></head>".
+ '<body><div>%s</div></body></html>',
+ htmlspecialchars($title),
+ $rendered);
+
+ $filename = File::filename($this->localProfile(),
+ 'ostatus', // ignored?
+ 'text/html');
+
+ $filepath = File::path($filename);
+
+ file_put_contents($filepath, $final);
+
+ $file = new File;
+
+ $file->filename = $filename;
+ $file->url = File::url($filename);
+ $file->size = filesize($filepath);
+ $file->date = time();
+ $file->mimetype = 'text/html';
+
+ $file_id = $file->insert();
+
+ if ($file_id === false) {
+ common_log_db_error($file, "INSERT", __FILE__);
+ throw new ServerException(_('Could not store HTML content of long post as file.'));
+ }
+
+ return $file;
+ }
+
+ protected static function slurpHcard($url)
+ {
+ set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/plugins/OStatus/extlib/hkit/');
+ require_once('hkit.class.php');
+
+ $h = new hKit;
+
+ // Google Buzz hcards need to be tidied. Probably others too.
+
+ $h->tidy_mode = 'proxy'; // 'proxy', 'exec', 'php' or 'none'
+
+ // Get by URL
+ $hcards = $h->getByURL('hcard', $url);
+
+ if (empty($hcards)) {
+ return array();
+ }
+
+ // @fixme more intelligent guess on multi-hcard pages
+ $hcard = $hcards[0];
+
+ $hints = array();
+
+ $hints['profileurl'] = $url;
+
+ if (array_key_exists('nickname', $hcard)) {
+ $hints['nickname'] = $hcard['nickname'];
+ }
+
+ if (array_key_exists('fn', $hcard)) {
+ $hints['fullname'] = $hcard['fn'];
+ } else if (array_key_exists('n', $hcard)) {
+ $hints['fullname'] = implode(' ', $hcard['n']);
+ }
+
+ if (array_key_exists('photo', $hcard)) {
+ $hints['avatar'] = $hcard['photo'];
+ }
+
+ if (array_key_exists('note', $hcard)) {
+ $hints['bio'] = $hcard['note'];
+ }
+
+ if (array_key_exists('adr', $hcard)) {
+ if (is_string($hcard['adr'])) {
+ $hints['location'] = $hcard['adr'];
+ } else if (is_array($hcard['adr'])) {
+ $hints['location'] = implode(' ', $hcard['adr']);
+ }
+ }
+
+ if (array_key_exists('url', $hcard)) {
+ if (is_string($hcard['url'])) {
+ $hints['homepage'] = $hcard['url'];
+ } else if (is_array($hcard['url'])) {
+ // HACK get the last one; that's how our hcards look
+ $hints['homepage'] = $hcard['url'][count($hcard['url'])-1];
+ }
+ }
+
+ return $hints;
+ }
}
diff --git a/plugins/OStatus/classes/Ostatus_source.php b/plugins/OStatus/classes/Ostatus_source.php
new file mode 100644
index 000000000..e6ce7d442
--- /dev/null
+++ b/plugins/OStatus/classes/Ostatus_source.php
@@ -0,0 +1,114 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+class Ostatus_source extends Memcached_DataObject
+{
+ public $__table = 'ostatus_source';
+
+ public $notice_id; // notice we're referring to
+ public $profile_uri; // uri of the ostatus_profile this came through -- may be a group feed
+ public $method; // push or salmon
+
+ public /*static*/ function staticGet($k, $v=null)
+ {
+ return parent::staticGet(__CLASS__, $k, $v);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * DB_DataObject needs to know something about the table to manipulate
+ * instances. This method provides all the DB_DataObject needs to know.
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'profile_uri' => DB_DATAOBJECT_STR,
+ 'method' => DB_DATAOBJECT_STR);
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('notice_id', 'integer',
+ null, false, 'PRI'),
+ new ColumnDef('profile_uri', 'varchar',
+ 255, false),
+ new ColumnDef('method', "ENUM('push','salmon')",
+ null, false));
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ /**
+ * return key definitions for Memcached_DataObject
+ *
+ * Our caching system uses the same key definitions, but uses a different
+ * method to get them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return array('notice_id' => 'K');
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ /**
+ * Save a remote notice source record; this helps indicate how trusted we are.
+ * @param string $method
+ */
+ public static function saveNew(Notice $notice, Ostatus_profile $oprofile, $method)
+ {
+ $osource = new Ostatus_source();
+ $osource->notice_id = $notice->id;
+ $osource->profile_uri = $oprofile->uri;
+ $osource->method = $method;
+ if ($osource->insert()) {
+ return true;
+ } else {
+ common_log_db_error($osource, 'INSERT', __FILE__);
+ return false;
+ }
+ }
+}
diff --git a/plugins/OStatus/extlib/Crypt/RSA.php b/plugins/OStatus/extlib/Crypt/RSA.php
new file mode 100644
index 000000000..16dfa54d4
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA.php
@@ -0,0 +1,524 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * helper class for mange single key
+ */
+require_once 'Crypt/RSA/Key.php';
+
+/**
+ * helper class for manage key pair
+ */
+require_once 'Crypt/RSA/KeyPair.php';
+
+/**
+ * Crypt_RSA class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - setParams($params) - sets parameters of current object
+ * - encrypt($plain_data, $key = null) - encrypts data
+ * - decrypt($enc_data, $key = null) - decrypts data
+ * - createSign($doc, $private_key = null) - signs document by private key
+ * - validateSign($doc, $signature, $public_key = null) - validates signature of document
+ *
+ * Example usage:
+ * // creating an error handler
+ * $error_handler = create_function('$obj', 'echo "error: ", $obj->getMessage(), "\n"');
+ *
+ * // 1024-bit key pair generation
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // check consistence of Crypt_RSA_KeyPair object
+ * $error_handler($key_pair);
+ *
+ * // creating Crypt_RSA object
+ * $rsa_obj = new Crypt_RSA;
+ *
+ * // check consistence of Crypt_RSA object
+ * $error_handler($rsa_obj);
+ *
+ * // set error handler on Crypt_RSA object ( see Crypt/RSA/ErrorHandler.php for details )
+ * $rsa_obj->setErrorHandler($error_handler);
+ *
+ * // encryption (usually using public key)
+ * $enc_data = $rsa_obj->encrypt($plain_data, $key_pair->getPublicKey());
+ *
+ * // decryption (usually using private key)
+ * $plain_data = $rsa_obj->decrypt($enc_data, $key_pair->getPrivateKey());
+ *
+ * // signing
+ * $signature = $rsa_obj->createSign($document, $key_pair->getPrivateKey());
+ *
+ * // signature checking
+ * $is_valid = $rsa_obj->validateSign($document, $signature, $key_pair->getPublicKey());
+ *
+ * // signing many documents by one private key
+ * $rsa_obj = new Crypt_RSA(array('private_key' => $key_pair->getPrivateKey()));
+ * // check consistence of Crypt_RSA object
+ * $error_handler($rsa_obj);
+ * // set error handler ( see Crypt/RSA/ErrorHandler.php for details )
+ * $rsa_obj->setErrorHandler($error_handler);
+ * // sign many documents
+ * $sign_1 = $rsa_obj->sign($doc_1);
+ * $sign_2 = $rsa_obj->sign($doc_2);
+ * //...
+ * $sign_n = $rsa_obj->sign($doc_n);
+ *
+ * // changing default hash function, which is used for sign
+ * // creating/validation
+ * $rsa_obj->setParams(array('hash_func' => 'md5'));
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA::factory();
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * key for encryption, which is used by encrypt() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_enc_key;
+
+ /**
+ * key for decryption, which is used by decrypt() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_dec_key;
+
+ /**
+ * public key, which is used by validateSign() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_public_key;
+
+ /**
+ * private key, which is used by createSign() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_private_key;
+
+ /**
+ * name of hash function, which is used by validateSign()
+ * and createSign() methods. Default hash function is SHA-1
+ *
+ * @var string
+ * @access private
+ */
+ var $_hash_func = 'sha1';
+
+ /**
+ * Crypt_RSA constructor.
+ *
+ * @param array $params
+ * Optional associative array of parameters, such as:
+ * enc_key, dec_key, private_key, public_key, hash_func.
+ * See setParams() method for more detailed description of
+ * these parameters.
+ * @param string $wrapper_name
+ * Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ * @param string $error_handler name of error handler function
+ *
+ * @access public
+ */
+ function Crypt_RSA($params = null, $wrapper_name = 'default', $error_handler = '')
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ // Crypt_RSA object is partially constructed.
+ $this->pushError($obj);
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ if (!is_null($params)) {
+ if (!$this->setParams($params)) {
+ // error in Crypt_RSA::setParams() function
+ return;
+ }
+ }
+ }
+
+ /**
+ * Crypt_RSA factory.
+ *
+ * @param array $params
+ * Optional associative array of parameters, such as:
+ * enc_key, dec_key, private_key, public_key, hash_func.
+ * See setParams() method for more detailed description of
+ * these parameters.
+ * @param string $wrapper_name
+ * Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ * @param string $error_handler name of error handler function
+ *
+ * @return object new Crypt_RSA object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function &factory($params = null, $wrapper_name = 'default', $error_handler = '')
+ {
+ $obj = &new Crypt_RSA($params, $wrapper_name, $error_handler);
+ if ($obj->isError()) {
+ // error during creating a new object. Retrurn PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Accepts any combination of available parameters as associative array:
+ * enc_key - encryption key for encrypt() method
+ * dec_key - decryption key for decrypt() method
+ * public_key - key for validateSign() method
+ * private_key - key for createSign() method
+ * hash_func - name of hash function, which will be used to create and validate sign
+ *
+ * @param array $params
+ * associative array of permitted parameters (see above)
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function setParams($params)
+ {
+ if (!is_array($params)) {
+ $this->pushError('parameters must be passed to function as associative array', CRYPT_RSA_ERROR_WRONG_PARAMS);
+ return false;
+ }
+
+ if (isset($params['enc_key'])) {
+ if (Crypt_RSA_Key::isValid($params['enc_key'])) {
+ $this->_enc_key = $params['enc_key'];
+ }
+ else {
+ $this->pushError('wrong encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['dec_key'])) {
+ if (Crypt_RSA_Key::isValid($params['dec_key'])) {
+ $this->_dec_key = $params['dec_key'];
+ }
+ else {
+ $this->pushError('wrong decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['private_key'])) {
+ if (Crypt_RSA_Key::isValid($params['private_key'])) {
+ if ($params['private_key']->getKeyType() != 'private') {
+ $this->pushError('private key must have "private" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return false;
+ }
+ $this->_private_key = $params['private_key'];
+ }
+ else {
+ $this->pushError('wrong private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['public_key'])) {
+ if (Crypt_RSA_Key::isValid($params['public_key'])) {
+ if ($params['public_key']->getKeyType() != 'public') {
+ $this->pushError('public key must have "public" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return false;
+ }
+ $this->_public_key = $params['public_key'];
+ }
+ else {
+ $this->pushError('wrong public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['hash_func'])) {
+ if (!function_exists($params['hash_func'])) {
+ $this->pushError('cannot find hash function with name [' . $params['hash_func'] . ']', CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return false;
+ }
+ $this->_hash_func = $params['hash_func'];
+ }
+ return true; // all ok
+ }
+
+ /**
+ * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ *
+ * @param string $plain_data data, which must be encrypted
+ * @param object $key encryption key (object of Crypt_RSA_Key class)
+ * @return mixed
+ * encrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function encrypt($plain_data, $key = null)
+ {
+ $enc_data = $this->encryptBinary($plain_data, $key);
+ if ($enc_data !== false) {
+ return base64_encode($enc_data);
+ }
+ // error during encripting data
+ return false;
+ }
+
+ /**
+ * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ *
+ * @param string $plain_data data, which must be encrypted
+ * @param object $key encryption key (object of Crypt_RSA_Key class)
+ * @return mixed
+ * encrypted data as binary string on success or false on error
+ *
+ * @access public
+ */
+ function encryptBinary($plain_data, $key = null)
+ {
+ if (is_null($key)) {
+ // use current encryption key
+ $key = $this->_enc_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($key)) {
+ $this->pushError('invalid encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+
+ // append tail \x01 to plain data. It needs for correctly decrypting of data
+ $plain_data .= "\x01";
+
+ $plain_data = $this->_math_obj->bin2int($plain_data);
+ $exp = $this->_math_obj->bin2int($key->getExponent());
+ $modulus = $this->_math_obj->bin2int($key->getModulus());
+
+ // divide plain data into chunks
+ $data_len = $this->_math_obj->bitLen($plain_data);
+ $chunk_len = $key->getKeyLength() - 1;
+ $block_len = (int) ceil($chunk_len / 8);
+ $curr_pos = 0;
+ $enc_data = '';
+ while ($curr_pos < $data_len) {
+ $tmp = $this->_math_obj->subint($plain_data, $curr_pos, $chunk_len);
+ $enc_data .= str_pad(
+ $this->_math_obj->int2bin($this->_math_obj->powmod($tmp, $exp, $modulus)),
+ $block_len,
+ "\0"
+ );
+ $curr_pos += $chunk_len;
+ }
+ return $enc_data;
+ }
+
+ /**
+ * Decrypts $enc_data by the key $this->_dec_key or $key.
+ *
+ * @param string $enc_data encrypted data as string
+ * @param object $key decryption key (object of RSA_Crypt_Key class)
+ * @return mixed
+ * decrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function decrypt($enc_data, $key = null)
+ {
+ $enc_data = base64_decode($enc_data);
+ return $this->decryptBinary($enc_data, $key);
+ }
+
+ /**
+ * Decrypts $enc_data by the key $this->_dec_key or $key.
+ *
+ * @param string $enc_data encrypted data as binary string
+ * @param object $key decryption key (object of RSA_Crypt_Key class)
+ * @return mixed
+ * decrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function decryptBinary($enc_data, $key = null)
+ {
+ if (is_null($key)) {
+ // use current decryption key
+ $key = $this->_dec_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($key)) {
+ $this->pushError('invalid decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+
+ $exp = $this->_math_obj->bin2int($key->getExponent());
+ $modulus = $this->_math_obj->bin2int($key->getModulus());
+
+ $data_len = strlen($enc_data);
+ $chunk_len = $key->getKeyLength() - 1;
+ $block_len = (int) ceil($chunk_len / 8);
+ $curr_pos = 0;
+ $bit_pos = 0;
+ $plain_data = $this->_math_obj->bin2int("\0");
+ while ($curr_pos < $data_len) {
+ $tmp = $this->_math_obj->bin2int(substr($enc_data, $curr_pos, $block_len));
+ $tmp = $this->_math_obj->powmod($tmp, $exp, $modulus);
+ $plain_data = $this->_math_obj->bitOr($plain_data, $tmp, $bit_pos);
+ $bit_pos += $chunk_len;
+ $curr_pos += $block_len;
+ }
+ $result = $this->_math_obj->int2bin($plain_data);
+
+ // delete tail, containing of \x01
+ $tail = ord($result{strlen($result) - 1});
+ if ($tail != 1) {
+ $this->pushError("Error tail of decrypted text = {$tail}. Expected 1", CRYPT_RSA_ERROR_WRONG_TAIL);
+ return false;
+ }
+ return substr($result, 0, -1);
+ }
+
+ /**
+ * Creates sign for document $document, using $this->_private_key or $private_key
+ * as private key and $this->_hash_func or $hash_func as hash function.
+ *
+ * @param string $document document, which must be signed
+ * @param object $private_key private key (object of Crypt_RSA_Key type)
+ * @param string $hash_func name of hash function, which will be used during signing
+ * @return mixed
+ * signature of $document as string on success or false on error
+ *
+ * @access public
+ */
+ function createSign($document, $private_key = null, $hash_func = null)
+ {
+ // check private key
+ if (is_null($private_key)) {
+ $private_key = $this->_private_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($private_key)) {
+ $this->pushError('invalid private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ if ($private_key->getKeyType() != 'private') {
+ $this->pushError('signing key must be private', CRYPT_RSA_ERROR_NEED_PRV_KEY);
+ return false;
+ }
+
+ // check hash_func
+ if (is_null($hash_func)) {
+ $hash_func = $this->_hash_func;
+ }
+ if (!function_exists($hash_func)) {
+ $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return false;
+ }
+
+ return $this->encrypt($hash_func($document), $private_key);
+ }
+
+ /**
+ * Validates $signature for document $document with public key $this->_public_key
+ * or $public_key and hash function $this->_hash_func or $hash_func.
+ *
+ * @param string $document document, signature of which must be validated
+ * @param string $signature signature, which must be validated
+ * @param object $public_key public key (object of Crypt_RSA_Key class)
+ * @param string $hash_func hash function, which will be used during validating signature
+ * @return mixed
+ * true, if signature of document is valid
+ * false, if signature of document is invalid
+ * null on error
+ *
+ * @access public
+ */
+ function validateSign($document, $signature, $public_key = null, $hash_func = null)
+ {
+ // check public key
+ if (is_null($public_key)) {
+ $public_key = $this->_public_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($public_key)) {
+ $this->pushError('invalid public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return null;
+ }
+ if ($public_key->getKeyType() != 'public') {
+ $this->pushError('validating key must be public', CRYPT_RSA_ERROR_NEED_PUB_KEY);
+ return null;
+ }
+
+ // check hash_func
+ if (is_null($hash_func)) {
+ $hash_func = $this->_hash_func;
+ }
+ if (!function_exists($hash_func)) {
+ $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return null;
+ }
+
+ return $hash_func($document) == $this->decrypt($signature, $public_key);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php b/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php
new file mode 100644
index 000000000..8f39741e0
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: ErrorHandler.php,v 1.4 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * uses PEAR's error handling
+ */
+require_once 'PEAR.php';
+
+/**
+ * cannot load required extension for math wrapper
+ */
+define('CRYPT_RSA_ERROR_NO_EXT', 1);
+
+/**
+ * cannot load any math wrappers.
+ * Possible reasons:
+ * - there is no any wrappers (they must exist in Crypt/RSA/Math folder )
+ * - all available wrappers are incorrect (read docs/Crypt_RSA/docs/math_wrappers.txt )
+ * - cannot load any extension, required by available wrappers
+ */
+define('CRYPT_RSA_ERROR_NO_WRAPPERS', 2);
+
+/**
+ * cannot find file, containing requested math wrapper
+ */
+define('CRYPT_RSA_ERROR_NO_FILE', 3);
+
+/**
+ * cannot find math wrapper class in the math wrapper file
+ */
+define('CRYPT_RSA_ERROR_NO_CLASS', 4);
+
+/**
+ * invalid key type passed to function (it must be 'public' or 'private')
+ */
+define('CRYPT_RSA_ERROR_WRONG_KEY_TYPE', 5);
+
+/**
+ * key modulus must be greater than key exponent
+ */
+define('CRYPT_RSA_ERROR_EXP_GE_MOD', 6);
+
+/**
+ * missing $key_len parameter in Crypt_RSA_KeyPair::generate($key_len) function
+ */
+define('CRYPT_RSA_ERROR_MISSING_KEY_LEN', 7);
+
+/**
+ * wrong key object passed to function (it must be an object of Crypt_RSA_Key class)
+ */
+define('CRYPT_RSA_ERROR_WRONG_KEY', 8);
+
+/**
+ * wrong name of hash function passed to Crypt_RSA::setParams() function
+ */
+define('CRYPT_RSA_ERROR_WRONG_HASH_FUNC', 9);
+
+/**
+ * key, used for signing, must be private
+ */
+define('CRYPT_RSA_ERROR_NEED_PRV_KEY', 10);
+
+/**
+ * key, used for sign validating, must be public
+ */
+define('CRYPT_RSA_ERROR_NEED_PUB_KEY', 11);
+
+/**
+ * parameters must be passed to function as associative array
+ */
+define('CRYPT_RSA_ERROR_WRONG_PARAMS', 12);
+
+/**
+ * error tail of decrypted text. Maybe, wrong decryption key?
+ */
+define('CRYPT_RSA_ERROR_WRONG_TAIL', 13);
+
+/**
+ * Crypt_RSA_ErrorHandler class.
+ *
+ * This class is used as base for Crypt_RSA, Crypt_RSA_Key
+ * and Crypt_RSA_KeyPair classes.
+ *
+ * It provides following functions:
+ * - isError() - returns true, if list contains errors, else returns false
+ * - getErrorList() - returns error list
+ * - getLastError() - returns last error from error list or false, if list is empty
+ * - pushError($errstr) - pushes $errstr into the error list
+ * - setErrorHandler($new_error_handler) - sets error handler function
+ * - getErrorHandler() - returns name of error handler function
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_ErrorHandler
+{
+ /**
+ * array of error objects, pushed by $this->pushError()
+ *
+ * @var array
+ * @access private
+ */
+ var $_errors = array();
+
+ /**
+ * name of error handler - function, which calls on $this->pushError() call
+ *
+ * @var string
+ * @access private
+ */
+ var $_error_handler = '';
+
+ /**
+ * Returns true if list of errors is not empty, else returns false
+ *
+ * @param mixed $err Check if the object is an error
+ *
+ * @return bool true, if list of errors is not empty or $err is PEAR_Error object, else false
+ * @access public
+ */
+ function isError($err = null)
+ {
+ return is_null($err) ? (sizeof($this->_errors) > 0) : PEAR::isError($err);
+ }
+
+ /**
+ * Returns list of all errors, pushed to error list by $this->pushError()
+ *
+ * @return array list of errors (usually it contains objects of PEAR_Error class)
+ * @access public
+ */
+ function getErrorList()
+ {
+ return $this->_errors;
+ }
+
+ /**
+ * Returns last error from errors list or false, if list is empty
+ *
+ * @return mixed
+ * last error from errors list (usually it is PEAR_Error object)
+ * or false, if list is empty.
+ *
+ * @access public
+ */
+ function getLastError()
+ {
+ $len = sizeof($this->_errors);
+ return $len ? $this->_errors[$len - 1] : false;
+ }
+
+ /**
+ * pushes error object $error to the error list
+ *
+ * @param string $errstr error string
+ * @param int $errno error number
+ *
+ * @return bool true on success, false on error
+ * @access public
+ */
+ function pushError($errstr, $errno = 0)
+ {
+ $this->_errors[] = PEAR::raiseError($errstr, $errno);
+
+ if ($this->_error_handler != '') {
+ // call user defined error handler
+ $func = $this->_error_handler;
+ $func($this);
+ }
+ return true;
+ }
+
+ /**
+ * sets error handler to function with name $func_name.
+ * Function $func_name must accept one parameter - current
+ * object, which triggered error.
+ *
+ * @param string $func_name name of error handler function
+ *
+ * @return bool true on success, false on error
+ * @access public
+ */
+ function setErrorHandler($func_name = '')
+ {
+ if ($func_name == '') {
+ $this->_error_handler = '';
+ }
+ if (!function_exists($func_name)) {
+ return false;
+ }
+ $this->_error_handler = $func_name;
+ return true;
+ }
+
+ /**
+ * returns name of current error handler, or null if there is no error handler
+ *
+ * @return mixed error handler name as string or null, if there is no error handler
+ * @access public
+ */
+ function getErrorHandler()
+ {
+ return $this->_error_handler;
+ }
+}
+
+?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Key.php b/plugins/OStatus/extlib/Crypt/RSA/Key.php
new file mode 100644
index 000000000..659530229
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/Key.php
@@ -0,0 +1,315 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: Key.php,v 1.6 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for RSA math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * Crypt_RSA_Key class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - getKeyLength() - returns bit key length
+ * - getExponent() - returns key exponent as binary string
+ * - getModulus() - returns key modulus as binary string
+ * - getKeyType() - returns type of the key (public or private)
+ * - toString() - returns serialized key as string
+ * - fromString($key_str) - static function; returns key, unserialized from string
+ * - isValid($key) - static function for validating of $key
+ *
+ * Example usage:
+ * // create new 1024-bit key pair
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // get public key (its class is Crypt_RSA_Key)
+ * $key = $key_pair->getPublicKey();
+ *
+ * // get key length
+ * $len = $key->getKeyLength();
+ *
+ * // get modulus as string
+ * $modulus = $key->getModulus();
+ *
+ * // get exponent as string
+ * $exponent = $key->getExponent();
+ *
+ * // get string represenation of key (use it instead of serialization of Crypt_RSA_Key object)
+ * $key_in_str = $key->toString();
+ *
+ * // restore key object from string using 'BigInt' math wrapper
+ * $key = Crypt_RSA_Key::fromString($key_in_str, 'BigInt');
+ *
+ * // error check
+ * if ($key->isError()) {
+ * echo "error while unserializing key object:\n";
+ * $erorr = $key->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // validate key
+ * if (Crypt_RSA_Key::isValid($key)) echo 'valid key';
+ * else echo 'invalid key';
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA_Key::factory($modulus, $exp, $key_type);
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_Key extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper object, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * shared modulus
+ *
+ * @var string
+ * @access private
+ */
+ var $_modulus;
+
+ /**
+ * exponent
+ *
+ * @var string
+ * @access private
+ */
+ var $_exp;
+
+ /**
+ * key type (private or public)
+ *
+ * @var string
+ * @access private
+ */
+ var $_key_type;
+
+ /**
+ * key length in bits
+ *
+ * @var int
+ * @access private
+ */
+ var $_key_len;
+
+ /**
+ * Crypt_RSA_Key constructor.
+ *
+ * You should pass in the name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param string $modulus key modulus
+ * @param string $exp key exponent
+ * @param string $key_type type of the key (public or private)
+ * @param string $wrapper_name wrapper to use
+ * @param string $error_handler name of error handler function
+ *
+ * @access public
+ */
+ function Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper $wrapper_name
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ $this->pushError($obj); // push error object into error list
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ $this->_modulus = $modulus;
+ $this->_exp = $exp;
+
+ if (!in_array($key_type, array('private', 'public'))) {
+ $this->pushError('invalid key type. It must be private or public', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return;
+ }
+ $this->_key_type = $key_type;
+
+ /* check length of modulus & exponent ( abs(modulus) > abs(exp) ) */
+ $mod_num = $this->_math_obj->bin2int($this->_modulus);
+ $exp_num = $this->_math_obj->bin2int($this->_exp);
+
+ if ($this->_math_obj->cmpAbs($mod_num, $exp_num) <= 0) {
+ $this->pushError('modulus must be greater than exponent', CRYPT_RSA_ERROR_EXP_GE_MOD);
+ return;
+ }
+
+ // determine key length
+ $this->_key_len = $this->_math_obj->bitLen($mod_num);
+ }
+
+ /**
+ * Crypt_RSA_Key factory.
+ *
+ * @param string $modulus key modulus
+ * @param string $exp key exponent
+ * @param string $key_type type of the key (public or private)
+ * @param string $wrapper_name wrapper to use
+ * @param string $error_handler name of error handler function
+ *
+ * @return object new Crypt_RSA_Key object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function factory($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
+ {
+ $obj = new Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name, $error_handler);
+ if ($obj->isError()) {
+ // error during creating a new object. Retrurn PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Calculates bit length of the key
+ *
+ * @return int bit length of key
+ * @access public
+ */
+ function getKeyLength()
+ {
+ return $this->_key_len;
+ }
+
+ /**
+ * Returns modulus part of the key as binary string,
+ * which can be used to construct new Crypt_RSA_Key object.
+ *
+ * @return string modulus as binary string
+ * @access public
+ */
+ function getModulus()
+ {
+ return $this->_modulus;
+ }
+
+ /**
+ * Returns exponent part of the key as binary string,
+ * which can be used to construct new Crypt_RSA_Key object.
+ *
+ * @return string exponent as binary string
+ * @access public
+ */
+ function getExponent()
+ {
+ return $this->_exp;
+ }
+
+ /**
+ * Returns key type (public, private)
+ *
+ * @return string key type (public, private)
+ * @access public
+ */
+ function getKeyType()
+ {
+ return $this->_key_type;
+ }
+
+ /**
+ * Returns string representation of key
+ *
+ * @return string key, serialized to string
+ * @access public
+ */
+ function toString()
+ {
+ return base64_encode(
+ serialize(
+ array($this->_modulus, $this->_exp, $this->_key_type)
+ )
+ );
+ }
+
+ /**
+ * Returns Crypt_RSA_Key object, unserialized from
+ * string representation of key.
+ *
+ * optional parameter $wrapper_name - is the name of math wrapper,
+ * which will be used during unserialization of this object.
+ *
+ * This function can be called statically:
+ * $key = Crypt_RSA_Key::fromString($key_in_string, 'BigInt');
+ *
+ * @param string $key_str RSA key, serialized into string
+ * @param string $wrapper_name optional math wrapper name
+ *
+ * @return object key as Crypt_RSA_Key object
+ * @access public
+ * @static
+ */
+ function fromString($key_str, $wrapper_name = 'default')
+ {
+ list($modulus, $exponent, $key_type) = unserialize(base64_decode($key_str));
+ $obj = new Crypt_RSA_Key($modulus, $exponent, $key_type, $wrapper_name);
+ return $obj;
+ }
+
+ /**
+ * Validates key
+ * This function can be called statically:
+ * $is_valid = Crypt_RSA_Key::isValid($key)
+ *
+ * Returns true, if $key is valid Crypt_RSA key, else returns false
+ *
+ * @param object $key Crypt_RSA_Key object for validating
+ *
+ * @return bool true if $key is valid, else false
+ * @access public
+ */
+ function isValid($key)
+ {
+ return (is_object($key) && strtolower(get_class($key)) === strtolower(__CLASS__));
+ }
+}
+
+?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php b/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php
new file mode 100644
index 000000000..ecc0b7dc7
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php
@@ -0,0 +1,804 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: KeyPair.php,v 1.7 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for RSA math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * helper class for single key managing
+ */
+require_once 'Crypt/RSA/Key.php';
+
+/**
+ * Crypt_RSA_KeyPair class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - generate($key) - generates new key pair
+ * - getPublicKey() - returns public key
+ * - getPrivateKey() - returns private key
+ * - getKeyLength() - returns bit key length
+ * - setRandomGenerator($func_name) - sets random generator to $func_name
+ * - fromPEMString($str) - retrieves keypair from PEM-encoded string
+ * - toPEMString() - stores keypair to PEM-encoded string
+ * - isEqual($keypair2) - compares current keypair to $keypair2
+ *
+ * Example usage:
+ * // create new 1024-bit key pair
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while initializing Crypt_RSA_KeyPair object:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // get public key
+ * $public_key = $key_pair->getPublicKey();
+ *
+ * // get private key
+ * $private_key = $key_pair->getPrivateKey();
+ *
+ * // generate new 512-bit key pair
+ * $key_pair->generate(512);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while generating key pair:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // get key pair length
+ * $length = $key_pair->getKeyLength();
+ *
+ * // set random generator to $func_name, where $func_name
+ * // consists name of random generator function. See comments
+ * // before setRandomGenerator() method for details
+ * $key_pair->setRandomGenerator($func_name);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while changing random generator:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA_KeyPair::factory($key_len);
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * // read key pair from PEM-encoded string:
+ * $str = "-----BEGIN RSA PRIVATE KEY-----"
+ * . "MCsCAQACBHr5LDkCAwEAAQIEBc6jbQIDAOCfAgMAjCcCAk3pAgJMawIDAL41"
+ * . "-----END RSA PRIVATE KEY-----";
+ * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
+ *
+ * // read key pair from .pem file 'private.pem':
+ * $str = file_get_contents('private.pem');
+ * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
+ *
+ * // generate and write 1024-bit key pair to .pem file 'private_new.pem'
+ * $keypair = new Crypt_RSA_KeyPair(1024);
+ * $str = $keypair->toPEMString();
+ * file_put_contents('private_new.pem', $str);
+ *
+ * // compare $keypair1 to $keypair2
+ * if ($keypair1->isEqual($keypair2)) {
+ * echo "keypair1 = keypair2\n";
+ * }
+ * else {
+ * echo "keypair1 != keypair2\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_KeyPair extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper object, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * length of each key in the key pair
+ *
+ * @var int
+ * @access private
+ */
+ var $_key_len;
+
+ /**
+ * public key
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_public_key;
+
+ /**
+ * private key
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_private_key;
+
+ /**
+ * name of function, which is used as random generator
+ *
+ * @var string
+ * @access private
+ */
+ var $_random_generator;
+
+ /**
+ * RSA keypair attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp] as associative array
+ *
+ * @var array
+ * @access private
+ */
+ var $_attrs;
+
+ /**
+ * Returns names of keypair attributes from $this->_attrs array
+ *
+ * @return array Array of keypair attributes names
+ * @access private
+ */
+ function _get_attr_names()
+ {
+ return array('version', 'n', 'e', 'd', 'p', 'q', 'dmp1', 'dmq1', 'iqmp');
+ }
+
+ /**
+ * Parses ASN.1 string [$str] starting form position [$pos].
+ * Returns tag and string value of parsed object.
+ *
+ * @param string $str
+ * @param int &$pos
+ * @param Crypt_RSA_ErrorHandler &$err_handler
+ *
+ * @return mixed Array('tag' => ..., 'str' => ...) on success, false on error
+ * @access private
+ */
+ function _ASN1Parse($str, &$pos, &$err_handler)
+ {
+ $max_pos = strlen($str);
+ if ($max_pos < 2) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get ASN.1 tag value
+ $tag = ord($str[$pos++]) & 0x1f;
+ if ($tag == 0x1f) {
+ $tag = 0;
+ do {
+ $n = ord($str[$pos++]);
+ $tag <<= 7;
+ $tag |= $n & 0x7f;
+ } while (($n & 0x80) && $pos < $max_pos);
+ }
+ if ($pos >= $max_pos) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get ASN.1 object length
+ $len = ord($str[$pos++]);
+ if ($len & 0x80) {
+ $n = $len & 0x1f;
+ $len = 0;
+ while ($n-- && $pos < $max_pos) {
+ $len <<= 8;
+ $len |= ord($str[$pos++]);
+ }
+ }
+ if ($pos >= $max_pos || $len > $max_pos - $pos) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get string value of ASN.1 object
+ $str = substr($str, $pos, $len);
+
+ return array(
+ 'tag' => $tag,
+ 'str' => $str,
+ );
+ }
+
+ /**
+ * Parses ASN.1 sting [$str] starting from position [$pos].
+ * Returns string representation of number, which can be passed
+ * in bin2int() function of math wrapper.
+ *
+ * @param string $str
+ * @param int &$pos
+ * @param Crypt_RSA_ErrorHandler &$err_handler
+ *
+ * @return mixed string representation of parsed number on success, false on error
+ * @access private
+ */
+ function _ASN1ParseInt($str, &$pos, &$err_handler)
+ {
+ $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return false;
+ }
+ if ($tmp['tag'] != 0x02) {
+ $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x02 (INTEGER)", $tmp['tag']);
+ $err_handler->pushError($errstr);
+ return false;
+ }
+ $pos += strlen($tmp['str']);
+
+ return strrev($tmp['str']);
+ }
+
+ /**
+ * Constructs ASN.1 string from tag $tag and object $str
+ *
+ * @param string $str ASN.1 object string
+ * @param int $tag ASN.1 tag value
+ * @param bool $is_constructed
+ * @param bool $is_private
+ *
+ * @return ASN.1-encoded string
+ * @access private
+ */
+ function _ASN1Store($str, $tag, $is_constructed = false, $is_private = false)
+ {
+ $out = '';
+
+ // encode ASN.1 tag value
+ $tag_ext = ($is_constructed ? 0x20 : 0) | ($is_private ? 0xc0 : 0);
+ if ($tag < 0x1f) {
+ $out .= chr($tag | $tag_ext);
+ } else {
+ $out .= chr($tag_ext | 0x1f);
+ $tmp = chr($tag & 0x7f);
+ $tag >>= 7;
+ while ($tag) {
+ $tmp .= chr(($tag & 0x7f) | 0x80);
+ $tag >>= 7;
+ }
+ $out .= strrev($tmp);
+ }
+
+ // encode ASN.1 object length
+ $len = strlen($str);
+ if ($len < 0x7f) {
+ $out .= chr($len);
+ } else {
+ $tmp = '';
+ $n = 0;
+ while ($len) {
+ $tmp .= chr($len & 0xff);
+ $len >>= 8;
+ $n++;
+ }
+ $out .= chr($n | 0x80);
+ $out .= strrev($tmp);
+ }
+
+ return $out . $str;
+ }
+
+ /**
+ * Constructs ASN.1 string from binary representation of big integer
+ *
+ * @param string $str binary representation of big integer
+ *
+ * @return ASN.1-encoded string
+ * @access private
+ */
+ function _ASN1StoreInt($str)
+ {
+ $str = strrev($str);
+ return Crypt_RSA_KeyPair::_ASN1Store($str, 0x02);
+ }
+
+ /**
+ * Crypt_RSA_KeyPair constructor.
+ *
+ * Wrapper: name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param int $key_len bit length of key pair, which will be generated in constructor
+ * @param string $wrapper_name wrapper name
+ * @param string $error_handler name of error handler function
+ * @param callback $random_generator function which will be used as random generator
+ *
+ * @access public
+ */
+ function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ $this->pushError($obj);
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ // set random generator
+ if (!$this->setRandomGenerator($random_generator)) {
+ // error in setRandomGenerator() function
+ return;
+ }
+
+ if (is_array($key_len)) {
+ // ugly BC hack - it is possible to pass RSA private key attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp]
+ // as associative array instead of key length to Crypt_RSA_KeyPair constructor
+ $rsa_attrs = $key_len;
+
+ // convert attributes to big integers
+ $attr_names = $this->_get_attr_names();
+ foreach ($attr_names as $attr) {
+ if (!isset($rsa_attrs[$attr])) {
+ $this->pushError("missing required RSA attribute [$attr]");
+ return;
+ }
+ ${$attr} = $this->_math_obj->bin2int($rsa_attrs[$attr]);
+ }
+
+ // check primality of p and q
+ if (!$this->_math_obj->isPrime($p)) {
+ $this->pushError("[p] must be prime");
+ return;
+ }
+ if (!$this->_math_obj->isPrime($q)) {
+ $this->pushError("[q] must be prime");
+ return;
+ }
+
+ // check n = p * q
+ $n1 = $this->_math_obj->mul($p, $q);
+ if ($this->_math_obj->cmpAbs($n, $n1)) {
+ $this->pushError("n != p * q");
+ return;
+ }
+
+ // check e * d = 1 mod (p-1) * (q-1)
+ $p1 = $this->_math_obj->dec($p);
+ $q1 = $this->_math_obj->dec($q);
+ $p1q1 = $this->_math_obj->mul($p1, $q1);
+ $ed = $this->_math_obj->mul($e, $d);
+ $one = $this->_math_obj->mod($ed, $p1q1);
+ if (!$this->_math_obj->isOne($one)) {
+ $this->pushError("e * d != 1 mod (p-1)*(q-1)");
+ return;
+ }
+
+ // check dmp1 = d mod (p-1)
+ $dmp = $this->_math_obj->mod($d, $p1);
+ if ($this->_math_obj->cmpAbs($dmp, $dmp1)) {
+ $this->pushError("dmp1 != d mod (p-1)");
+ return;
+ }
+
+ // check dmq1 = d mod (q-1)
+ $dmq = $this->_math_obj->mod($d, $q1);
+ if ($this->_math_obj->cmpAbs($dmq, $dmq1)) {
+ $this->pushError("dmq1 != d mod (q-1)");
+ return;
+ }
+
+ // check iqmp = 1/q mod p
+ $q1 = $this->_math_obj->invmod($iqmp, $p);
+ if ($this->_math_obj->cmpAbs($q, $q1)) {
+ $this->pushError("iqmp != 1/q mod p");
+ return;
+ }
+
+ // try to create public key object
+ $public_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['e'], 'public', $wrapper_name, $error_handler);
+ if ($public_key->isError()) {
+ // error during creating public object
+ $this->pushError($public_key->getLastError());
+ return;
+ }
+
+ // try to create private key object
+ $private_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['d'], 'private', $wrapper_name, $error_handler);
+ if ($private_key->isError()) {
+ // error during creating private key object
+ $this->pushError($private_key->getLastError());
+ return;
+ }
+
+ $this->_public_key = $public_key;
+ $this->_private_key = $private_key;
+ $this->_key_len = $public_key->getKeyLength();
+ $this->_attrs = $rsa_attrs;
+ } else {
+ // generate key pair
+ if (!$this->generate($key_len)) {
+ // error during generating key pair
+ return;
+ }
+ }
+ }
+
+ /**
+ * Crypt_RSA_KeyPair factory.
+ *
+ * Wrapper - Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param int $key_len bit length of key pair, which will be generated in constructor
+ * @param string $wrapper_name wrapper name
+ * @param string $error_handler name of error handler function
+ * @param callback $random_generator function which will be used as random generator
+ *
+ * @return object new Crypt_RSA_KeyPair object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function &factory($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
+ {
+ $obj = &new Crypt_RSA_KeyPair($key_len, $wrapper_name, $error_handler, $random_generator);
+ if ($obj->isError()) {
+ // error during creating a new object. Return PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Generates new Crypt_RSA key pair with length $key_len.
+ * If $key_len is missed, use an old key length from $this->_key_len
+ *
+ * @param int $key_len bit length of key pair, which will be generated
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function generate($key_len = null)
+ {
+ if (is_null($key_len)) {
+ // use an old key length
+ $key_len = $this->_key_len;
+ if (is_null($key_len)) {
+ $this->pushError('missing key_len parameter', CRYPT_RSA_ERROR_MISSING_KEY_LEN);
+ return false;
+ }
+ }
+
+ // minimal key length is 8 bit ;)
+ if ($key_len < 8) {
+ $key_len = 8;
+ }
+ // store key length in the _key_len property
+ $this->_key_len = $key_len;
+
+ // set [e] to 0x10001 (65537)
+ $e = $this->_math_obj->bin2int("\x01\x00\x01");
+
+ // generate [p], [q] and [n]
+ $p_len = intval(($key_len + 1) / 2);
+ $q_len = $key_len - $p_len;
+ $p1 = $q1 = 0;
+ do {
+ // generate prime number [$p] with length [$p_len] with the following condition:
+ // GCD($e, $p - 1) = 1
+ do {
+ $p = $this->_math_obj->getPrime($p_len, $this->_random_generator);
+ $p1 = $this->_math_obj->dec($p);
+ $tmp = $this->_math_obj->GCD($e, $p1);
+ } while (!$this->_math_obj->isOne($tmp));
+ // generate prime number [$q] with length [$q_len] with the following conditions:
+ // GCD($e, $q - 1) = 1
+ // $q != $p
+ do {
+ $q = $this->_math_obj->getPrime($q_len, $this->_random_generator);
+ $q1 = $this->_math_obj->dec($q);
+ $tmp = $this->_math_obj->GCD($e, $q1);
+ } while (!$this->_math_obj->isOne($tmp) && !$this->_math_obj->cmpAbs($q, $p));
+ // if (p < q), then exchange them
+ if ($this->_math_obj->cmpAbs($p, $q) < 0) {
+ $tmp = $p;
+ $p = $q;
+ $q = $tmp;
+ $tmp = $p1;
+ $p1 = $q1;
+ $q1 = $tmp;
+ }
+ // calculate n = p * q
+ $n = $this->_math_obj->mul($p, $q);
+ } while ($this->_math_obj->bitLen($n) != $key_len);
+
+ // calculate d = 1/e mod (p - 1) * (q - 1)
+ $pq = $this->_math_obj->mul($p1, $q1);
+ $d = $this->_math_obj->invmod($e, $pq);
+
+ // calculate dmp1 = d mod (p - 1)
+ $dmp1 = $this->_math_obj->mod($d, $p1);
+
+ // calculate dmq1 = d mod (q - 1)
+ $dmq1 = $this->_math_obj->mod($d, $q1);
+
+ // calculate iqmp = 1/q mod p
+ $iqmp = $this->_math_obj->invmod($q, $p);
+
+ // store RSA keypair attributes
+ $this->_attrs = array(
+ 'version' => "\x00",
+ 'n' => $this->_math_obj->int2bin($n),
+ 'e' => $this->_math_obj->int2bin($e),
+ 'd' => $this->_math_obj->int2bin($d),
+ 'p' => $this->_math_obj->int2bin($p),
+ 'q' => $this->_math_obj->int2bin($q),
+ 'dmp1' => $this->_math_obj->int2bin($dmp1),
+ 'dmq1' => $this->_math_obj->int2bin($dmq1),
+ 'iqmp' => $this->_math_obj->int2bin($iqmp),
+ );
+
+ $n = $this->_attrs['n'];
+ $e = $this->_attrs['e'];
+ $d = $this->_attrs['d'];
+
+ // try to create public key object
+ $obj = &new Crypt_RSA_Key($n, $e, 'public', $this->_math_obj->getWrapperName(), $this->_error_handler);
+ if ($obj->isError()) {
+ // error during creating public object
+ $this->pushError($obj->getLastError());
+ return false;
+ }
+ $this->_public_key = &$obj;
+
+ // try to create private key object
+ $obj = &new Crypt_RSA_Key($n, $d, 'private', $this->_math_obj->getWrapperName(), $this->_error_handler);
+ if ($obj->isError()) {
+ // error during creating private key object
+ $this->pushError($obj->getLastError());
+ return false;
+ }
+ $this->_private_key = &$obj;
+
+ return true; // key pair successfully generated
+ }
+
+ /**
+ * Returns public key from the pair
+ *
+ * @return object public key object of class Crypt_RSA_Key
+ * @access public
+ */
+ function getPublicKey()
+ {
+ return $this->_public_key;
+ }
+
+ /**
+ * Returns private key from the pair
+ *
+ * @return object private key object of class Crypt_RSA_Key
+ * @access public
+ */
+ function getPrivateKey()
+ {
+ return $this->_private_key;
+ }
+
+ /**
+ * Sets name of random generator function for key generation.
+ * If parameter is skipped, then sets to default random generator.
+ *
+ * Random generator function must return integer with at least 8 lower
+ * significant bits, which will be used as random values.
+ *
+ * @param string $random_generator name of random generator function
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function setRandomGenerator($random_generator = null)
+ {
+ static $default_random_generator = null;
+
+ if (is_string($random_generator)) {
+ // set user's random generator
+ if (!function_exists($random_generator)) {
+ $this->pushError("can't find random generator function with name [{$random_generator}]");
+ return false;
+ }
+ $this->_random_generator = $random_generator;
+ } else {
+ // set default random generator
+ $this->_random_generator = is_null($default_random_generator) ?
+ ($default_random_generator = create_function('', '$a=explode(" ",microtime());return(int)($a[0]*1000000);')) :
+ $default_random_generator;
+ }
+ return true;
+ }
+
+ /**
+ * Returns length of each key in the key pair
+ *
+ * @return int bit length of each key in key pair
+ * @access public
+ */
+ function getKeyLength()
+ {
+ return $this->_key_len;
+ }
+
+ /**
+ * Retrieves RSA keypair from PEM-encoded string, containing RSA private key.
+ * Example of such string:
+ * -----BEGIN RSA PRIVATE KEY-----
+ * MCsCAQACBHtvbSECAwEAAQIEeYrk3QIDAOF3AgMAjCcCAmdnAgJMawIDALEk
+ * -----END RSA PRIVATE KEY-----
+ *
+ * Wrapper: Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param string $str PEM-encoded string
+ * @param string $wrapper_name Wrapper name
+ * @param string $error_handler name of error handler function
+ *
+ * @return Crypt_RSA_KeyPair object on success, PEAR_Error object on error
+ * @access public
+ * @static
+ */
+ function &fromPEMString($str, $wrapper_name = 'default', $error_handler = '')
+ {
+ if (isset($this)) {
+ if ($wrapper_name == 'default') {
+ $wrapper_name = $this->_math_obj->getWrapperName();
+ }
+ if ($error_handler == '') {
+ $error_handler = $this->_error_handler;
+ }
+ }
+ $err_handler = &new Crypt_RSA_ErrorHandler;
+ $err_handler->setErrorHandler($error_handler);
+
+ // search for base64-encoded private key
+ if (!preg_match('/-----BEGIN RSA PRIVATE KEY-----([^-]+)-----END RSA PRIVATE KEY-----/', $str, $matches)) {
+ $err_handler->pushError("can't find RSA private key in the string [{$str}]");
+ return $err_handler->getLastError();
+ }
+
+ // parse private key. It is ASN.1-encoded
+ $str = base64_decode($matches[1]);
+ $pos = 0;
+ $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return $err_handler->getLastError();
+ }
+ if ($tmp['tag'] != 0x10) {
+ $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x10 (SEQUENCE)", $tmp['tag']);
+ $err_handler->pushError($errstr);
+ return $err_handler->getLastError();
+ }
+
+ // parse ASN.1 SEQUENCE for RSA private key
+ $attr_names = Crypt_RSA_KeyPair::_get_attr_names();
+ $n = sizeof($attr_names);
+ $rsa_attrs = array();
+ for ($i = 0; $i < $n; $i++) {
+ $tmp = Crypt_RSA_KeyPair::_ASN1ParseInt($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return $err_handler->getLastError();
+ }
+ $attr = $attr_names[$i];
+ $rsa_attrs[$attr] = $tmp;
+ }
+
+ // create Crypt_RSA_KeyPair object.
+ $keypair = &new Crypt_RSA_KeyPair($rsa_attrs, $wrapper_name, $error_handler);
+ if ($keypair->isError()) {
+ return $keypair->getLastError();
+ }
+
+ return $keypair;
+ }
+
+ /**
+ * converts keypair to PEM-encoded string, which can be stroed in
+ * .pem compatible files, contianing RSA private key.
+ *
+ * @return string PEM-encoded keypair on success, false on error
+ * @access public
+ */
+ function toPEMString()
+ {
+ // store RSA private key attributes into ASN.1 string
+ $str = '';
+ $attr_names = $this->_get_attr_names();
+ $n = sizeof($attr_names);
+ $rsa_attrs = $this->_attrs;
+ for ($i = 0; $i < $n; $i++) {
+ $attr = $attr_names[$i];
+ if (!isset($rsa_attrs[$attr])) {
+ $this->pushError("Cannot find value for ASN.1 attribute [$attr]");
+ return false;
+ }
+ $tmp = $rsa_attrs[$attr];
+ $str .= Crypt_RSA_KeyPair::_ASN1StoreInt($tmp);
+ }
+
+ // prepend $str by ASN.1 SEQUENCE (0x10) header
+ $str = Crypt_RSA_KeyPair::_ASN1Store($str, 0x10, true);
+
+ // encode and format PEM string
+ $str = base64_encode($str);
+ $str = chunk_split($str, 64, "\n");
+ return "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
+ }
+
+ /**
+ * Compares keypairs in Crypt_RSA_KeyPair objects $this and $key_pair
+ *
+ * @param Crypt_RSA_KeyPair $key_pair keypair to compare
+ *
+ * @return bool true, if keypair stored in $this equal to keypair stored in $key_pair
+ * @access public
+ */
+ function isEqual($key_pair)
+ {
+ $attr_names = $this->_get_attr_names();
+ foreach ($attr_names as $attr) {
+ if ($this->_attrs[$attr] != $key_pair->_attrs[$attr]) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php
new file mode 100644
index 000000000..646ff6710
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php
@@ -0,0 +1,482 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_BCMath class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for PHP BCMath extension.
+ * See http://php.net/manual/en/ref.bc.php for details.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_BCMath
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Performs Miller-Rabin primality test for number $num
+ * with base $base. Returns true, if $num is strong pseudoprime
+ * by base $base. Else returns false.
+ *
+ * @param string $num
+ * @param string $base
+ * @return bool
+ * @access private
+ */
+ function _millerTest($num, $base)
+ {
+ if (!bccomp($num, '1')) {
+ // 1 is not prime ;)
+ return false;
+ }
+ $tmp = bcsub($num, '1');
+
+ $zero_bits = 0;
+ while (!bccomp(bcmod($tmp, '2'), '0')) {
+ $zero_bits++;
+ $tmp = bcdiv($tmp, '2');
+ }
+
+ $tmp = $this->powmod($base, $tmp, $num);
+ if (!bccomp($tmp, '1')) {
+ // $num is probably prime
+ return true;
+ }
+
+ while ($zero_bits--) {
+ if (!bccomp(bcadd($tmp, '1'), $num)) {
+ // $num is probably prime
+ return true;
+ }
+ $tmp = $this->powmod($tmp, '2', $num);
+ }
+ // $num is composite
+ return false;
+ }
+
+ /**
+ * Crypt_RSA_Math_BCMath constructor.
+ * Checks an existance of PHP BCMath extension.
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_BCMath()
+ {
+ if (!extension_loaded('bcmath')) {
+ if (!@dl('bcmath.' . PHP_SHLIB_SUFFIX) && !@dl('php_bcmath.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load BCMath extension. Set error string
+ $this->errstr = 'Crypt_RSA package requires the BCMath extension. See http://php.net/manual/en/ref.bc.php for details';
+ return;
+ }
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return string
+ * @access public
+ */
+ function bin2int($str)
+ {
+ $result = '0';
+ $n = strlen($str);
+ do {
+ $result = bcadd(bcmul($result, '256'), ord($str{--$n}));
+ } while ($n > 0);
+ return $result;
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param string $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ $result = '';
+ do {
+ $result .= chr(bcmod($num, '256'));
+ $num = bcdiv($num, '256');
+ } while (bccomp($num, '0'));
+ return $result;
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param string $num
+ * @param string $pow
+ * @param string $mod
+ * @return string
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ if (function_exists('bcpowmod')) {
+ // bcpowmod is only available under PHP5
+ return bcpowmod($num, $pow, $mod);
+ }
+
+ // emulate bcpowmod
+ $result = '1';
+ do {
+ if (!bccomp(bcmod($pow, '2'), '1')) {
+ $result = bcmod(bcmul($result, $num), $mod);
+ }
+ $num = bcmod(bcpow($num, '2'), $mod);
+ $pow = bcdiv($pow, '2');
+ } while (bccomp($pow, '0'));
+ return $result;
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return bcmul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return bcmod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return bccomp($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ static $primes = null;
+ static $primes_cnt = 0;
+ if (is_null($primes)) {
+ // generate all primes up to 10000
+ $primes = array();
+ for ($i = 0; $i < 10000; $i++) {
+ $primes[] = $i;
+ }
+ $primes[0] = $primes[1] = 0;
+ for ($i = 2; $i < 100; $i++) {
+ while (!$primes[$i]) {
+ $i++;
+ }
+ $j = $i;
+ for ($j += $i; $j < 10000; $j += $i) {
+ $primes[$j] = 0;
+ }
+ }
+ $j = 0;
+ for ($i = 0; $i < 10000; $i++) {
+ if ($primes[$i]) {
+ $primes[$j++] = $primes[$i];
+ }
+ }
+ $primes_cnt = $j;
+ }
+
+ // try to divide number by small primes
+ for ($i = 0; $i < $primes_cnt; $i++) {
+ if (bccomp($num, $primes[$i]) <= 0) {
+ // number is prime
+ return true;
+ }
+ if (!bccomp(bcmod($num, $primes[$i]), '0')) {
+ // number divides by $primes[$i]
+ return false;
+ }
+ }
+
+ /*
+ try Miller-Rabin's probable-primality test for first
+ 7 primes as bases
+ */
+ for ($i = 0; $i < 7; $i++) {
+ if (!$this->_millerTest($num, $primes[$i])) {
+ // $num is composite
+ return false;
+ }
+ }
+ // $num is strong pseudoprime
+ return true;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ if (!bccomp(bcmod($num, '2'), '0')) {
+ $num = bcadd($num, '1');
+ }
+ while (!$this->isPrime($num)) {
+ $num = bcadd($num, '2');
+ }
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param string $num
+ * @return string
+ * @access public
+ */
+ function dec($num)
+ {
+ return bcsub($num, '1');
+ }
+
+ /**
+ * Returns true, if $num is equal to one. Else returns false
+ *
+ * @param string $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return !bccomp($num, '1');
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ do {
+ $tmp = bcmod($num1, $num2);
+ $num1 = $num2;
+ $num2 = $tmp;
+ } while (bccomp($num2, '0'));
+ return $num1;
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param string $num
+ * @param string $mod
+ * @return string
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ $x = '1';
+ $y = '0';
+ $num1 = $mod;
+ do {
+ $tmp = bcmod($num, $num1);
+ $q = bcdiv($num, $num1);
+ $num = $num1;
+ $num1 = $tmp;
+
+ $tmp = bcsub($x, bcmul($y, $q));
+ $x = $y;
+ $y = $tmp;
+ } while (bccomp($num1, '0'));
+ if (bccomp($x, '0') < 0) {
+ $x = bcadd($x, $mod);
+ }
+ return $x;
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param string $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ $tmp = $this->int2bin($num);
+ $bit_len = strlen($tmp) * 8;
+ $tmp = ord($tmp{strlen($tmp) - 1});
+ if (!$tmp) {
+ $bit_len -= 8;
+ }
+ else {
+ while (!($tmp & 0x80)) {
+ $bit_len--;
+ $tmp <<= 1;
+ }
+ }
+ return $bit_len;
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param string $num1
+ * @param string $num2
+ * @param int $start_pos
+ * @return string
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ $start_byte = intval($start_pos / 8);
+ $start_bit = $start_pos % 8;
+ $tmp1 = $this->int2bin($num1);
+
+ $num2 = bcmul($num2, 1 << $start_bit);
+ $tmp2 = $this->int2bin($num2);
+ if ($start_byte < strlen($tmp1)) {
+ $tmp2 |= substr($tmp1, $start_byte);
+ $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
+ }
+ else {
+ $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
+ }
+ return $this->bin2int($tmp1);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param string $num
+ * @param int start
+ * @param int length
+ * @return string
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ $start_byte = intval($start / 8);
+ $start_bit = $start % 8;
+ $byte_length = intval($length / 8);
+ $bit_length = $length % 8;
+ if ($bit_length) {
+ $byte_length++;
+ }
+ $num = bcdiv($num, 1 << $start_bit);
+ $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
+ $tmp = str_pad($tmp, $byte_length, "\0");
+ $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
+ return $this->bin2int($tmp);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'BCMath';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php
new file mode 100644
index 000000000..b7ac24cb6
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php
@@ -0,0 +1,313 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_BigInt class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for big_int PECL extension,
+ * which could be loaded from http://pecl.php.net/packages/big_int
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_BigInt
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Crypt_RSA_Math_BigInt constructor.
+ * Checks an existance of big_int PECL math package.
+ * This package is available at http://pecl.php.net/packages/big_int
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_BigInt()
+ {
+ if (!extension_loaded('big_int')) {
+ if (!@dl('big_int.' . PHP_SHLIB_SUFFIX) && !@dl('php_big_int.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load big_int extension
+ $this->errstr = 'Crypt_RSA package requires big_int PECL package. ' .
+ 'It is available at http://pecl.php.net/packages/big_int';
+ return;
+ }
+ }
+
+ // check version of big_int extension ( Crypt_RSA requires version 1.0.2 and higher )
+ if (!in_array('bi_info', get_extension_funcs('big_int'))) {
+ // there is no bi_info() function in versions, older than 1.0.2
+ $this->errstr = 'Crypt_RSA package requires big_int package version 1.0.2 and higher';
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return big_int resource
+ * @access public
+ */
+ function bin2int($str)
+ {
+ return bi_unserialize($str);
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param big_int resource $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ return bi_serialize($num);
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param big_int resource $num
+ * @param big_int resource $pow
+ * @param big_int resource $mod
+ * @return big_int resource
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ return bi_powmod($num, $pow, $mod);
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return big_int resource
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return bi_mul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return bi_mod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return bi_cmp_abs($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ return bi_is_prime($num) ? true : false;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ $num = bi_next_prime($num);
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param big_int resource $num
+ * @return big_int resource
+ * @access public
+ */
+ function dec($num)
+ {
+ return bi_dec($num);
+ }
+
+ /**
+ * Returns true, if $num is equal to 1. Else returns false
+ *
+ * @param big_int resource $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return bi_is_one($num);
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return big_int resource
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ return bi_gcd($num1, $num2);
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param big_int resource $num
+ * @param big_int resource $mod
+ * @return big_int resource
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ return bi_invmod($num, $mod);
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param big_int resource $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ return bi_bit_len($num);
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @param int $start_pos
+ * @return big_int resource
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ return bi_or($num1, $num2, $start_pos);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param big_int resource $num
+ * @param int start
+ * @param int length
+ * @return big_int resource
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ return bi_subint($num, $start, $length);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'BigInt';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php b/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php
new file mode 100644
index 000000000..54e4c34fc
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php
@@ -0,0 +1,361 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_GMP class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for PHP GMP extension.
+ * See http://php.net/gmp for details.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_GMP
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Crypt_RSA_Math_GMP constructor.
+ * Checks an existance of PHP GMP package.
+ * See http://php.net/gmp for details.
+ *
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_GMP()
+ {
+ if (!extension_loaded('gmp')) {
+ if (!@dl('gmp.' . PHP_SHLIB_SUFFIX) && !@dl('php_gmp.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load GMP extension
+ $this->errstr = 'Crypt_RSA package requires PHP GMP package. ' .
+ 'See http://php.net/gmp for details';
+ return;
+ }
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return gmp resource
+ * @access public
+ */
+ function bin2int($str)
+ {
+ $result = 0;
+ $n = strlen($str);
+ do {
+ // dirty hack: GMP returns FALSE, when second argument equals to int(0).
+ // so, it must be converted to string '0'
+ $result = gmp_add(gmp_mul($result, 256), strval(ord($str{--$n})));
+ } while ($n > 0);
+ return $result;
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param gmp resource $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ $result = '';
+ do {
+ $result .= chr(gmp_intval(gmp_mod($num, 256)));
+ $num = gmp_div($num, 256);
+ } while (gmp_cmp($num, 0));
+ return $result;
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param gmp resource $num
+ * @param gmp resource $pow
+ * @param gmp resource $mod
+ * @return gmp resource
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ return gmp_powm($num, $pow, $mod);
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return gmp resource
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return gmp_mul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return gmp_mod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return gmp_cmp($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ return gmp_prob_prime($num) ? true : false;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ if (!gmp_cmp(gmp_mod($num, '2'), '0')) {
+ $num = gmp_add($num, '1');
+ }
+ while (!gmp_prob_prime($num)) {
+ $num = gmp_add($num, '2');
+ }
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param gmp resource $num
+ * @return gmp resource
+ * @access public
+ */
+ function dec($num)
+ {
+ return gmp_sub($num, 1);
+ }
+
+ /**
+ * Returns true, if $num is equal to one. Else returns false
+ *
+ * @param gmp resource $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return !gmp_cmp($num, 1);
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return gmp resource
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ return gmp_gcd($num1, $num2);
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param gmp resource $num
+ * @param gmp resource $mod
+ * @return gmp resource
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ return gmp_invert($num, $mod);
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param gmp resource $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ $tmp = $this->int2bin($num);
+ $bit_len = strlen($tmp) * 8;
+ $tmp = ord($tmp{strlen($tmp) - 1});
+ if (!$tmp) {
+ $bit_len -= 8;
+ }
+ else {
+ while (!($tmp & 0x80)) {
+ $bit_len--;
+ $tmp <<= 1;
+ }
+ }
+ return $bit_len;
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @param int $start_pos
+ * @return gmp resource
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ $start_byte = intval($start_pos / 8);
+ $start_bit = $start_pos % 8;
+ $tmp1 = $this->int2bin($num1);
+
+ $num2 = gmp_mul($num2, 1 << $start_bit);
+ $tmp2 = $this->int2bin($num2);
+ if ($start_byte < strlen($tmp1)) {
+ $tmp2 |= substr($tmp1, $start_byte);
+ $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
+ }
+ else {
+ $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
+ }
+ return $this->bin2int($tmp1);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param gmp resource $num
+ * @param int start
+ * @param int length
+ * @return gmp resource
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ $start_byte = intval($start / 8);
+ $start_bit = $start % 8;
+ $byte_length = intval($length / 8);
+ $bit_length = $length % 8;
+ if ($bit_length) {
+ $byte_length++;
+ }
+ $num = gmp_div($num, 1 << $start_bit);
+ $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
+ $tmp = str_pad($tmp, $byte_length, "\0");
+ $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
+ return $this->bin2int($tmp);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'GMP';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php b/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php
new file mode 100644
index 000000000..de6c94642
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright Alexander Valyalkin 2005
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: MathLoader.php,v 1.5 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * Crypt_RSA_MathLoader class.
+ *
+ * Provides static function:
+ * - loadWrapper($wrapper_name) - loads RSA math wrapper with name $wrapper_name
+ * or most suitable wrapper if $wrapper_name == 'default'
+ *
+ * Example usage:
+ * // load BigInt wrapper
+ * $big_int_wrapper = Crypt_RSA_MathLoader::loadWrapper('BigInt');
+ *
+ * // load BCMath wrapper
+ * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper('BCMath');
+ *
+ * // load the most suitable wrapper
+ * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper();
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright Alexander Valyalkin 2005
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_MathLoader
+{
+ /**
+ * Loads RSA math wrapper with name $wrapper_name.
+ * Implemented wrappers can be found at Crypt/RSA/Math folder.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details
+ *
+ * This is a static function:
+ * // load BigInt wrapper
+ * $big_int_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BigInt');
+ *
+ * // load BCMath wrapper
+ * $bcmath_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BCMath');
+ *
+ * @param string $wrapper_name Name of wrapper
+ *
+ * @return object
+ * Reference to object of wrapper with name $wrapper_name on success
+ * or PEAR_Error object on error
+ *
+ * @access public
+ */
+ function loadWrapper($wrapper_name = 'default')
+ {
+ static $math_objects = array();
+ // ordered by performance. GMP is the fastest math library, BCMath - the slowest.
+ static $math_wrappers = array('GMP', 'BigInt', 'BCMath',);
+
+ if (isset($math_objects[$wrapper_name])) {
+ /*
+ wrapper with name $wrapper_name is already loaded and created.
+ Return reference to existing copy of wrapper
+ */
+ return $math_objects[$wrapper_name];
+ }
+
+ $err_handler = new Crypt_RSA_ErrorHandler();
+
+ if ($wrapper_name === 'default') {
+ // try to load the most suitable wrapper
+ $n = sizeof($math_wrappers);
+ for ($i = 0; $i < $n; $i++) {
+ $obj = Crypt_RSA_MathLoader::loadWrapper($math_wrappers[$i]);
+ if (!$err_handler->isError($obj)) {
+ // wrapper for $math_wrappers[$i] successfully loaded
+ // register it as default wrapper and return reference to it
+ return $math_objects['default'] = $obj;
+ }
+ }
+ // can't load any wrapper
+ $err_handler->pushError("can't load any wrapper for existing math libraries", CRYPT_RSA_ERROR_NO_WRAPPERS);
+ return $err_handler->getLastError();
+ }
+
+ $class_name = 'Crypt_RSA_Math_' . $wrapper_name;
+ $class_filename = dirname(__FILE__) . '/Math/' . $wrapper_name . '.php';
+
+ if (!is_file($class_filename)) {
+ $err_handler->pushError("can't find file [{$class_filename}] for RSA math wrapper [{$wrapper_name}]", CRYPT_RSA_ERROR_NO_FILE);
+ return $err_handler->getLastError();
+ }
+
+ include_once $class_filename;
+ if (!class_exists($class_name)) {
+ $err_handler->pushError("can't find class [{$class_name}] in file [{$class_filename}]", CRYPT_RSA_ERROR_NO_CLASS);
+ return $err_handler->getLastError();
+ }
+
+ // create and return wrapper object on success or PEAR_Error object on error
+ $obj = new $class_name;
+ if ($obj->errstr) {
+ // cannot load required extension for math wrapper
+ $err_handler->pushError($obj->errstr, CRYPT_RSA_ERROR_NO_EXT);
+ return $err_handler->getLastError();
+ }
+ return $math_objects[$wrapper_name] = $obj;
+ }
+}
+
+?>
diff --git a/plugins/OStatus/extlib/README b/plugins/OStatus/extlib/README
deleted file mode 100644
index 799b40c47..000000000
--- a/plugins/OStatus/extlib/README
+++ /dev/null
@@ -1,9 +0,0 @@
-XML_Feed_Parser 1.0.3 is not currently actively maintained, and has
-a nasty bug which breaks getting the feed target link from WordPress
-feeds and possibly others that are RSS2-formatted but include an
-<atom:link> self-link element as well.
-
-Patch from this bug report is included:
-http://pear.php.net/bugs/bug.php?id=16416
-
-If upgrading, be sure that fix is included with the future upgrade!
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser.php b/plugins/OStatus/extlib/XML/Feed/Parser.php
deleted file mode 100755
index ffe8220a5..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser.php
+++ /dev/null
@@ -1,351 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Key gateway class for XML_Feed_Parser package
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL
- * @version CVS: $Id: Parser.php,v 1.24 2006/08/15 13:04:00 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * XML_Feed_Parser_Type is an abstract class required by all of our
- * feed types. It makes sense to load it here to keep the other files
- * clean.
- */
-require_once 'XML/Feed/Parser/Type.php';
-
-/**
- * We will throw exceptions when errors occur.
- */
-require_once 'XML/Feed/Parser/Exception.php';
-
-/**
- * This is the core of the XML_Feed_Parser package. It identifies feed types
- * and abstracts access to them. It is an iterator, allowing for easy access
- * to the entire feed.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser implements Iterator
-{
- /**
- * This is where we hold the feed object
- * @var Object
- */
- private $feed;
-
- /**
- * To allow for extensions, we make a public reference to the feed model
- * @var DOMDocument
- */
- public $model;
-
- /**
- * A map between entry ID and offset
- * @var array
- */
- protected $idMappings = array();
-
- /**
- * A storage space for Namespace URIs.
- * @var array
- */
- private $feedNamespaces = array(
- 'rss2' => array(
- 'http://backend.userland.com/rss',
- 'http://backend.userland.com/rss2',
- 'http://blogs.law.harvard.edu/tech/rss'));
- /**
- * Detects feed types and instantiate appropriate objects.
- *
- * Our constructor takes care of detecting feed types and instantiating
- * appropriate classes. For now we're going to treat Atom 0.3 as Atom 1.0
- * but raise a warning. I do not intend to introduce full support for
- * Atom 0.3 as it has been deprecated, but others are welcome to.
- *
- * @param string $feed XML serialization of the feed
- * @param bool $strict Whether or not to validate the feed
- * @param bool $suppressWarnings Trigger errors for deprecated feed types?
- * @param bool $tidy Whether or not to try and use the tidy library on input
- */
- function __construct($feed, $strict = false, $suppressWarnings = false, $tidy = false)
- {
- $this->model = new DOMDocument;
- if (! $this->model->loadXML($feed)) {
- if (extension_loaded('tidy') && $tidy) {
- $tidy = new tidy;
- $tidy->parseString($feed,
- array('input-xml' => true, 'output-xml' => true));
- $tidy->cleanRepair();
- if (! $this->model->loadXML((string) $tidy)) {
- throw new XML_Feed_Parser_Exception('Invalid input: this is not ' .
- 'valid XML');
- }
- } else {
- throw new XML_Feed_Parser_Exception('Invalid input: this is not valid XML');
- }
-
- }
-
- /* detect feed type */
- $doc_element = $this->model->documentElement;
- $error = false;
-
- switch (true) {
- case ($doc_element->namespaceURI == 'http://www.w3.org/2005/Atom'):
- require_once 'XML/Feed/Parser/Atom.php';
- require_once 'XML/Feed/Parser/AtomElement.php';
- $class = 'XML_Feed_Parser_Atom';
- break;
- case ($doc_element->namespaceURI == 'http://purl.org/atom/ns#'):
- require_once 'XML/Feed/Parser/Atom.php';
- require_once 'XML/Feed/Parser/AtomElement.php';
- $class = 'XML_Feed_Parser_Atom';
- $error = 'Atom 0.3 deprecated, using 1.0 parser which won\'t provide ' .
- 'all options';
- break;
- case ($doc_element->namespaceURI == 'http://purl.org/rss/1.0/' ||
- ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1
- && $doc_element->childNodes->item(1)->namespaceURI ==
- 'http://purl.org/rss/1.0/')):
- require_once 'XML/Feed/Parser/RSS1.php';
- require_once 'XML/Feed/Parser/RSS1Element.php';
- $class = 'XML_Feed_Parser_RSS1';
- break;
- case ($doc_element->namespaceURI == 'http://purl.org/rss/1.1/' ||
- ($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1
- && $doc_element->childNodes->item(1)->namespaceURI ==
- 'http://purl.org/rss/1.1/')):
- require_once 'XML/Feed/Parser/RSS11.php';
- require_once 'XML/Feed/Parser/RSS11Element.php';
- $class = 'XML_Feed_Parser_RSS11';
- break;
- case (($doc_element->hasChildNodes() && $doc_element->childNodes->length > 1
- && $doc_element->childNodes->item(1)->namespaceURI ==
- 'http://my.netscape.com/rdf/simple/0.9/') ||
- $doc_element->namespaceURI == 'http://my.netscape.com/rdf/simple/0.9/'):
- require_once 'XML/Feed/Parser/RSS09.php';
- require_once 'XML/Feed/Parser/RSS09Element.php';
- $class = 'XML_Feed_Parser_RSS09';
- break;
- case ($doc_element->tagName == 'rss' and
- $doc_element->hasAttribute('version') &&
- $doc_element->getAttribute('version') == 0.91):
- $error = 'RSS 0.91 has been superceded by RSS2.0. Using RSS2.0 parser.';
- require_once 'XML/Feed/Parser/RSS2.php';
- require_once 'XML/Feed/Parser/RSS2Element.php';
- $class = 'XML_Feed_Parser_RSS2';
- break;
- case ($doc_element->tagName == 'rss' and
- $doc_element->hasAttribute('version') &&
- $doc_element->getAttribute('version') == 0.92):
- $error = 'RSS 0.92 has been superceded by RSS2.0. Using RSS2.0 parser.';
- require_once 'XML/Feed/Parser/RSS2.php';
- require_once 'XML/Feed/Parser/RSS2Element.php';
- $class = 'XML_Feed_Parser_RSS2';
- break;
- case (in_array($doc_element->namespaceURI, $this->feedNamespaces['rss2'])
- || $doc_element->tagName == 'rss'):
- if (! $doc_element->hasAttribute('version') ||
- $doc_element->getAttribute('version') != 2) {
- $error = 'RSS version not specified. Parsing as RSS2.0';
- }
- require_once 'XML/Feed/Parser/RSS2.php';
- require_once 'XML/Feed/Parser/RSS2Element.php';
- $class = 'XML_Feed_Parser_RSS2';
- break;
- default:
- throw new XML_Feed_Parser_Exception('Feed type unknown');
- break;
- }
-
- if (! $suppressWarnings && ! empty($error)) {
- trigger_error($error, E_USER_WARNING);
- }
-
- /* Instantiate feed object */
- $this->feed = new $class($this->model, $strict);
- }
-
- /**
- * Proxy to allow feed element names to be used as method names
- *
- * For top-level feed elements we will provide access using methods or
- * attributes. This function simply passes on a request to the appropriate
- * feed type object.
- *
- * @param string $call - the method being called
- * @param array $attributes
- */
- function __call($call, $attributes)
- {
- $attributes = array_pad($attributes, 5, false);
- list($a, $b, $c, $d, $e) = $attributes;
- return $this->feed->$call($a, $b, $c, $d, $e);
- }
-
- /**
- * Proxy to allow feed element names to be used as attribute names
- *
- * To allow variable-like access to feed-level data we use this
- * method. It simply passes along to __call() which in turn passes
- * along to the relevant object.
- *
- * @param string $val - the name of the variable required
- */
- function __get($val)
- {
- return $this->feed->$val;
- }
-
- /**
- * Provides iteration functionality.
- *
- * Of course we must be able to iterate... This function simply increases
- * our internal counter.
- */
- function next()
- {
- if (isset($this->current_item) &&
- $this->current_item <= $this->feed->numberEntries - 1) {
- ++$this->current_item;
- } else if (! isset($this->current_item)) {
- $this->current_item = 0;
- } else {
- return false;
- }
- }
-
- /**
- * Return XML_Feed_Type object for current element
- *
- * @return XML_Feed_Parser_Type Object
- */
- function current()
- {
- return $this->getEntryByOffset($this->current_item);
- }
-
- /**
- * For iteration -- returns the key for the current stage in the array.
- *
- * @return int
- */
- function key()
- {
- return $this->current_item;
- }
-
- /**
- * For iteration -- tells whether we have reached the
- * end.
- *
- * @return bool
- */
- function valid()
- {
- return $this->current_item < $this->feed->numberEntries;
- }
-
- /**
- * For iteration -- resets the internal counter to the beginning.
- */
- function rewind()
- {
- $this->current_item = 0;
- }
-
- /**
- * Provides access to entries by ID if one is specified in the source feed.
- *
- * As well as allowing the items to be iterated over we want to allow
- * users to be able to access a specific entry. This is one of two ways of
- * doing that, the other being by offset. This method can be quite slow
- * if dealing with a large feed that hasn't yet been processed as it
- * instantiates objects for every entry until it finds the one needed.
- *
- * @param string $id Valid ID for the given feed format
- * @return XML_Feed_Parser_Type|false
- */
- function getEntryById($id)
- {
- if (isset($this->idMappings[$id])) {
- return $this->getEntryByOffset($this->idMappings[$id]);
- }
-
- /*
- * Since we have not yet encountered that ID, let's go through all the
- * remaining entries in order till we find it.
- * This is a fairly slow implementation, but it should work.
- */
- return $this->feed->getEntryById($id);
- }
-
- /**
- * Retrieve entry by numeric offset, starting from zero.
- *
- * As well as allowing the items to be iterated over we want to allow
- * users to be able to access a specific entry. This is one of two ways of
- * doing that, the other being by ID.
- *
- * @param int $offset The position of the entry within the feed, starting from 0
- * @return XML_Feed_Parser_Type|false
- */
- function getEntryByOffset($offset)
- {
- if ($offset < $this->feed->numberEntries) {
- if (isset($this->feed->entries[$offset])) {
- return $this->feed->entries[$offset];
- } else {
- try {
- $this->feed->getEntryByOffset($offset);
- } catch (Exception $e) {
- return false;
- }
- $id = $this->feed->entries[$offset]->getID();
- $this->idMappings[$id] = $offset;
- return $this->feed->entries[$offset];
- }
- } else {
- return false;
- }
- }
-
- /**
- * Retrieve version details from feed type class.
- *
- * @return void
- * @author James Stewart
- */
- function version()
- {
- return $this->feed->version;
- }
-
- /**
- * Returns a string representation of the feed.
- *
- * @return String
- **/
- function __toString()
- {
- return $this->feed->__toString();
- }
-}
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php b/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php
deleted file mode 100644
index c7e218a1e..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/Atom.php
+++ /dev/null
@@ -1,365 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Atom feed class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: Atom.php,v 1.29 2008/03/30 22:00:36 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
-*/
-
-/**
- * This is the class that determines how we manage Atom 1.0 feeds
- *
- * How we deal with constructs:
- * date - return as unix datetime for use with the 'date' function unless specified otherwise
- * text - return as is. optional parameter will give access to attributes
- * person - defaults to name, but parameter based access
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_Atom extends XML_Feed_Parser_Type
-{
- /**
- * The URI of the RelaxNG schema used to (optionally) validate the feed
- * @var string
- */
- private $relax = 'atom.rnc';
-
- /**
- * We're likely to use XPath, so let's keep it global
- * @var DOMXPath
- */
- public $xpath;
-
- /**
- * When performing XPath queries we will use this prefix
- * @var string
- */
- private $xpathPrefix = '//';
-
- /**
- * The feed type we are parsing
- * @var string
- */
- public $version = 'Atom 1.0';
-
- /**
- * The class used to represent individual items
- * @var string
- */
- protected $itemClass = 'XML_Feed_Parser_AtomElement';
-
- /**
- * The element containing entries
- * @var string
- */
- protected $itemElement = 'entry';
-
- /**
- * Here we map those elements we're not going to handle individually
- * to the constructs they are. The optional second parameter in the array
- * tells the parser whether to 'fall back' (not apt. at the feed level) or
- * fail if the element is missing. If the parameter is not set, the function
- * will simply return false and leave it to the client to decide what to do.
- * @var array
- */
- protected $map = array(
- 'author' => array('Person'),
- 'contributor' => array('Person'),
- 'icon' => array('Text'),
- 'logo' => array('Text'),
- 'id' => array('Text', 'fail'),
- 'rights' => array('Text'),
- 'subtitle' => array('Text'),
- 'title' => array('Text', 'fail'),
- 'updated' => array('Date', 'fail'),
- 'link' => array('Link'),
- 'generator' => array('Text'),
- 'category' => array('Category'));
-
- /**
- * Here we provide a few mappings for those very special circumstances in
- * which it makes sense to map back to the RSS2 spec. Key is RSS2 version
- * value is an array consisting of the equivalent in atom and any attributes
- * needed to make the mapping.
- * @var array
- */
- protected $compatMap = array(
- 'guid' => array('id'),
- 'links' => array('link'),
- 'tags' => array('category'),
- 'contributors' => array('contributor'));
-
- /**
- * Our constructor does nothing more than its parent.
- *
- * @param DOMDocument $xml A DOM object representing the feed
- * @param bool (optional) $string Whether or not to validate this feed
- */
- function __construct(DOMDocument $model, $strict = false)
- {
- $this->model = $model;
-
- if ($strict) {
- if (! $this->model->relaxNGValidateSource($this->relax)) {
- throw new XML_Feed_Parser_Exception('Failed required validation');
- }
- }
-
- $this->xpath = new DOMXPath($this->model);
- $this->xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
- $this->numberEntries = $this->count('entry');
- }
-
- /**
- * Implement retrieval of an entry based on its ID for atom feeds.
- *
- * This function uses XPath to get the entry based on its ID. If DOMXPath::evaluate
- * is available, we also use that to store a reference to the entry in the array
- * used by getEntryByOffset so that method does not have to seek out the entry
- * if it's requested that way.
- *
- * @param string $id any valid Atom ID.
- * @return XML_Feed_Parser_AtomElement
- */
- function getEntryById($id)
- {
- if (isset($this->idMappings[$id])) {
- return $this->entries[$this->idMappings[$id]];
- }
-
- $entries = $this->xpath->query("//atom:entry[atom:id='$id']");
-
- if ($entries->length > 0) {
- $xmlBase = $entries->item(0)->baseURI;
- $entry = new $this->itemClass($entries->item(0), $this, $xmlBase);
-
- if (in_array('evaluate', get_class_methods($this->xpath))) {
- $offset = $this->xpath->evaluate("count(preceding-sibling::atom:entry)", $entries->item(0));
- $this->entries[$offset] = $entry;
- }
-
- $this->idMappings[$id] = $entry;
-
- return $entry;
- }
-
- }
-
- /**
- * Retrieves data from a person construct.
- *
- * Get a person construct. We default to the 'name' element but allow
- * access to any of the elements.
- *
- * @param string $method The name of the person construct we want
- * @param array $arguments An array which we hope gives a 'param'
- * @return string|false
- */
- protected function getPerson($method, $arguments)
- {
- $offset = empty($arguments[0]) ? 0 : $arguments[0];
- $parameter = empty($arguments[1]['param']) ? 'name' : $arguments[1]['param'];
- $section = $this->model->getElementsByTagName($method);
-
- if ($parameter == 'url') {
- $parameter = 'uri';
- }
-
- if ($section->length <= $offset) {
- return false;
- }
-
- $param = $section->item($offset)->getElementsByTagName($parameter);
- if ($param->length == 0) {
- return false;
- }
- return $param->item(0)->nodeValue;
- }
-
- /**
- * Retrieves an element's content where that content is a text construct.
- *
- * Get a text construct. When calling this method, the two arguments
- * allowed are 'offset' and 'attribute', so $parser->subtitle() would
- * return the content of the element, while $parser->subtitle(false, 'type')
- * would return the value of the type attribute.
- *
- * @todo Clarify overlap with getContent()
- * @param string $method The name of the text construct we want
- * @param array $arguments An array which we hope gives a 'param'
- * @return string
- */
- protected function getText($method, $arguments)
- {
- $offset = empty($arguments[0]) ? 0: $arguments[0];
- $attribute = empty($arguments[1]) ? false : $arguments[1];
- $tags = $this->model->getElementsByTagName($method);
-
- if ($tags->length <= $offset) {
- return false;
- }
-
- $content = $tags->item($offset);
-
- if (! $content->hasAttribute('type')) {
- $content->setAttribute('type', 'text');
- }
- $type = $content->getAttribute('type');
-
- if (! empty($attribute) and
- ! ($method == 'generator' and $attribute == 'name')) {
- if ($content->hasAttribute($attribute)) {
- return $content->getAttribute($attribute);
- } else if ($attribute == 'href' and $content->hasAttribute('uri')) {
- return $content->getAttribute('uri');
- }
- return false;
- }
-
- return $this->parseTextConstruct($content);
- }
-
- /**
- * Extract content appropriately from atom text constructs
- *
- * Because of different rules applied to the content element and other text
- * constructs, they are deployed as separate functions, but they share quite
- * a bit of processing. This method performs the core common process, which is
- * to apply the rules for different mime types in order to extract the content.
- *
- * @param DOMNode $content the text construct node to be parsed
- * @return String
- * @author James Stewart
- **/
- protected function parseTextConstruct(DOMNode $content)
- {
- if ($content->hasAttribute('type')) {
- $type = $content->getAttribute('type');
- } else {
- $type = 'text';
- }
-
- if (strpos($type, 'text/') === 0) {
- $type = 'text';
- }
-
- switch ($type) {
- case 'text':
- case 'html':
- return $content->textContent;
- break;
- case 'xhtml':
- $container = $content->getElementsByTagName('div');
- if ($container->length == 0) {
- return false;
- }
- $contents = $container->item(0);
- if ($contents->hasChildNodes()) {
- /* Iterate through, applying xml:base and store the result */
- $result = '';
- foreach ($contents->childNodes as $node) {
- $result .= $this->traverseNode($node);
- }
- return $result;
- }
- break;
- case preg_match('@^[a-zA-Z]+/[a-zA-Z+]*xml@i', $type) > 0:
- return $content;
- break;
- case 'application/octet-stream':
- default:
- return base64_decode(trim($content->nodeValue));
- break;
- }
- return false;
- }
- /**
- * Get a category from the entry.
- *
- * A feed or entry can have any number of categories. A category can have the
- * attributes term, scheme and label.
- *
- * @param string $method The name of the text construct we want
- * @param array $arguments An array which we hope gives a 'param'
- * @return string
- */
- function getCategory($method, $arguments)
- {
- $offset = empty($arguments[0]) ? 0: $arguments[0];
- $attribute = empty($arguments[1]) ? 'term' : $arguments[1];
- $categories = $this->model->getElementsByTagName('category');
- if ($categories->length <= $offset) {
- $category = $categories->item($offset);
- if ($category->hasAttribute($attribute)) {
- return $category->getAttribute($attribute);
- }
- }
- return false;
- }
-
- /**
- * This element must be present at least once with rel="feed". This element may be
- * present any number of further times so long as there is no clash. If no 'rel' is
- * present and we're asked for one, we follow the example of the Universal Feed
- * Parser and presume 'alternate'.
- *
- * @param int $offset the position of the link within the container
- * @param string $attribute the attribute name required
- * @param array an array of attributes to search by
- * @return string the value of the attribute
- */
- function getLink($offset = 0, $attribute = 'href', $params = false)
- {
- if (is_array($params) and !empty($params)) {
- $terms = array();
- $alt_predicate = '';
- $other_predicate = '';
-
- foreach ($params as $key => $value) {
- if ($key == 'rel' && $value == 'alternate') {
- $alt_predicate = '[not(@rel) or @rel="alternate"]';
- } else {
- $terms[] = "@$key='$value'";
- }
- }
- if (!empty($terms)) {
- $other_predicate = '[' . join(' and ', $terms) . ']';
- }
- $query = $this->xpathPrefix . 'atom:link' . $alt_predicate . $other_predicate;
- $links = $this->xpath->query($query);
- } else {
- $links = $this->model->getElementsByTagName('link');
- }
- if ($links->length > $offset) {
- if ($links->item($offset)->hasAttribute($attribute)) {
- $value = $links->item($offset)->getAttribute($attribute);
- if ($attribute == 'href') {
- $value = $this->addBase($value, $links->item($offset));
- }
- return $value;
- } else if ($attribute == 'rel') {
- return 'alternate';
- }
- }
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php b/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php
deleted file mode 100755
index 063ecb617..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/AtomElement.php
+++ /dev/null
@@ -1,261 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * AtomElement class for XML_Feed_Parser package
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: AtomElement.php,v 1.19 2007/03/26 12:43:11 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class provides support for atom entries. It will usually be called by
- * XML_Feed_Parser_Atom with which it shares many methods.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_AtomElement extends XML_Feed_Parser_Atom
-{
- /**
- * This will be a reference to the parent object for when we want
- * to use a 'fallback' rule
- * @var XML_Feed_Parser_Atom
- */
- protected $parent;
-
- /**
- * When performing XPath queries we will use this prefix
- * @var string
- */
- private $xpathPrefix = '';
-
- /**
- * xml:base values inherited by the element
- * @var string
- */
- protected $xmlBase;
-
- /**
- * Here we provide a few mappings for those very special circumstances in
- * which it makes sense to map back to the RSS2 spec or to manage other
- * compatibilities (eg. with the Univeral Feed Parser). Key is the other version's
- * name for the command, value is an array consisting of the equivalent in our atom
- * api and any attributes needed to make the mapping.
- * @var array
- */
- protected $compatMap = array(
- 'guid' => array('id'),
- 'links' => array('link'),
- 'tags' => array('category'),
- 'contributors' => array('contributor'));
-
- /**
- * Our specific element map
- * @var array
- */
- protected $map = array(
- 'author' => array('Person', 'fallback'),
- 'contributor' => array('Person'),
- 'id' => array('Text', 'fail'),
- 'published' => array('Date'),
- 'updated' => array('Date', 'fail'),
- 'title' => array('Text', 'fail'),
- 'rights' => array('Text', 'fallback'),
- 'summary' => array('Text'),
- 'content' => array('Content'),
- 'link' => array('Link'),
- 'enclosure' => array('Enclosure'),
- 'category' => array('Category'));
-
- /**
- * Store useful information for later.
- *
- * @param DOMElement $element - this item as a DOM element
- * @param XML_Feed_Parser_Atom $parent - the feed of which this is a member
- */
- function __construct(DOMElement $element, $parent, $xmlBase = '')
- {
- $this->model = $element;
- $this->parent = $parent;
- $this->xmlBase = $xmlBase;
- $this->xpathPrefix = "//atom:entry[atom:id='" . $this->id . "']/";
- $this->xpath = $this->parent->xpath;
- }
-
- /**
- * Provides access to specific aspects of the author data for an atom entry
- *
- * Author data at the entry level is more complex than at the feed level.
- * If atom:author is not present for the entry we need to look for it in
- * an atom:source child of the atom:entry. If it's not there either, then
- * we look to the parent for data.
- *
- * @param array
- * @return string
- */
- function getAuthor($arguments)
- {
- /* Find out which part of the author data we're looking for */
- if (isset($arguments['param'])) {
- $parameter = $arguments['param'];
- } else {
- $parameter = 'name';
- }
-
- $test = $this->model->getElementsByTagName('author');
- if ($test->length > 0) {
- $item = $test->item(0);
- return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
- }
-
- $source = $this->model->getElementsByTagName('source');
- if ($source->length > 0) {
- $test = $this->model->getElementsByTagName('author');
- if ($test->length > 0) {
- $item = $test->item(0);
- return $item->getElementsByTagName($parameter)->item(0)->nodeValue;
- }
- }
- return $this->parent->getAuthor($arguments);
- }
-
- /**
- * Returns the content of the content element or info on a specific attribute
- *
- * This element may or may not be present. It cannot be present more than
- * once. It may have a 'src' attribute, in which case there's no content
- * If not present, then the entry must have link with rel="alternate".
- * If there is content we return it, if not and there's a 'src' attribute
- * we return the value of that instead. The method can take an 'attribute'
- * argument, in which case we return the value of that attribute if present.
- * eg. $item->content("type") will return the type of the content. It is
- * recommended that all users check the type before getting the content to
- * ensure that their script is capable of handling the type of returned data.
- * (data carried in the content element can be either 'text', 'html', 'xhtml',
- * or any standard MIME type).
- *
- * @return string|false
- */
- protected function getContent($method, $arguments = array())
- {
- $attribute = empty($arguments[0]) ? false : $arguments[0];
- $tags = $this->model->getElementsByTagName('content');
-
- if ($tags->length == 0) {
- return false;
- }
-
- $content = $tags->item(0);
-
- if (! $content->hasAttribute('type')) {
- $content->setAttribute('type', 'text');
- }
- if (! empty($attribute)) {
- return $content->getAttribute($attribute);
- }
-
- $type = $content->getAttribute('type');
-
- if (! empty($attribute)) {
- if ($content->hasAttribute($attribute))
- {
- return $content->getAttribute($attribute);
- }
- return false;
- }
-
- if ($content->hasAttribute('src')) {
- return $content->getAttribute('src');
- }
-
- return $this->parseTextConstruct($content);
- }
-
- /**
- * For compatibility, this method provides a mapping to access enclosures.
- *
- * The Atom spec doesn't provide for an enclosure element, but it is
- * generally supported using the link element with rel='enclosure'.
- *
- * @param string $method - for compatibility with our __call usage
- * @param array $arguments - for compatibility with our __call usage
- * @return array|false
- */
- function getEnclosure($method, $arguments = array())
- {
- $offset = isset($arguments[0]) ? $arguments[0] : 0;
- $query = "//atom:entry[atom:id='" . $this->getText('id', false) .
- "']/atom:link[@rel='enclosure']";
-
- $encs = $this->parent->xpath->query($query);
- if ($encs->length > $offset) {
- try {
- if (! $encs->item($offset)->hasAttribute('href')) {
- return false;
- }
- $attrs = $encs->item($offset)->attributes;
- $length = $encs->item($offset)->hasAttribute('length') ?
- $encs->item($offset)->getAttribute('length') : false;
- return array(
- 'url' => $attrs->getNamedItem('href')->value,
- 'type' => $attrs->getNamedItem('type')->value,
- 'length' => $length);
- } catch (Exception $e) {
- return false;
- }
- }
- return false;
- }
-
- /**
- * Get details of this entry's source, if available/relevant
- *
- * Where an atom:entry is taken from another feed then the aggregator
- * is supposed to include an atom:source element which replicates at least
- * the atom:id, atom:title, and atom:updated metadata from the original
- * feed. Atom:source therefore has a very similar structure to atom:feed
- * and if we find it we will return it as an XML_Feed_Parser_Atom object.
- *
- * @return XML_Feed_Parser_Atom|false
- */
- function getSource()
- {
- $test = $this->model->getElementsByTagName('source');
- if ($test->length == 0) {
- return false;
- }
- $source = new XML_Feed_Parser_Atom($test->item(0));
- }
-
- /**
- * Get the entry as an XML string
- *
- * Return an XML serialization of the feed, should it be required. Most
- * users however, will already have a serialization that they used when
- * instantiating the object.
- *
- * @return string XML serialization of element
- */
- function __toString()
- {
- $simple = simplexml_import_dom($this->model);
- return $simple->asXML();
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php b/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php
deleted file mode 100755
index 1e76e3f85..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/Exception.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Keeps the exception class for XML_Feed_Parser.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL
- * @version CVS: $Id: Exception.php,v 1.3 2005/11/07 01:52:35 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * We are extending PEAR_Exception
- */
-require_once 'PEAR/Exception.php';
-
-/**
- * XML_Feed_Parser_Exception is a simple extension of PEAR_Exception, existing
- * to help with identification of the source of exceptions.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_Exception extends PEAR_Exception
-{
-
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php
deleted file mode 100755
index 07f38f911..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09.php
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS0.9 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS09.php,v 1.5 2006/07/26 21:18:46 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS0.9 feeds.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo Find a Relax NG URI we can use
- */
-class XML_Feed_Parser_RSS09 extends XML_Feed_Parser_Type
-{
- /**
- * The URI of the RelaxNG schema used to (optionally) validate the feed
- * @var string
- */
- private $relax = '';
-
- /**
- * We're likely to use XPath, so let's keep it global
- * @var DOMXPath
- */
- protected $xpath;
-
- /**
- * The feed type we are parsing
- * @var string
- */
- public $version = 'RSS 0.9';
-
- /**
- * The class used to represent individual items
- * @var string
- */
- protected $itemClass = 'XML_Feed_Parser_RSS09Element';
-
- /**
- * The element containing entries
- * @var string
- */
- protected $itemElement = 'item';
-
- /**
- * Here we map those elements we're not going to handle individually
- * to the constructs they are. The optional second parameter in the array
- * tells the parser whether to 'fall back' (not apt. at the feed level) or
- * fail if the element is missing. If the parameter is not set, the function
- * will simply return false and leave it to the client to decide what to do.
- * @var array
- */
- protected $map = array(
- 'title' => array('Text'),
- 'link' => array('Text'),
- 'description' => array('Text'),
- 'image' => array('Image'),
- 'textinput' => array('TextInput'));
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS2.
- * @var array
- */
- protected $compatMap = array(
- 'title' => array('title'),
- 'link' => array('link'),
- 'subtitle' => array('description'));
-
- /**
- * We will be working with multiple namespaces and it is useful to
- * keep them together
- * @var array
- */
- protected $namespaces = array(
- 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
-
- /**
- * Our constructor does nothing more than its parent.
- *
- * @todo RelaxNG validation
- * @param DOMDocument $xml A DOM object representing the feed
- * @param bool (optional) $string Whether or not to validate this feed
- */
- function __construct(DOMDocument $model, $strict = false)
- {
- $this->model = $model;
-
- $this->xpath = new DOMXPath($model);
- foreach ($this->namespaces as $key => $value) {
- $this->xpath->registerNamespace($key, $value);
- }
- $this->numberEntries = $this->count('item');
- }
-
- /**
- * Included for compatibility -- will not work with RSS 0.9
- *
- * This is not something that will work with RSS0.9 as it does not have
- * clear restrictions on the global uniqueness of IDs.
- *
- * @param string $id any valid ID.
- * @return false
- */
- function getEntryById($id)
- {
- return false;
- }
-
- /**
- * Get details of the image associated with the feed.
- *
- * @return array|false an array simply containing the child elements
- */
- protected function getImage()
- {
- $images = $this->model->getElementsByTagName('image');
- if ($images->length > 0) {
- $image = $images->item(0);
- $details = array();
- if ($image->hasChildNodes()) {
- $details = array(
- 'title' => $image->getElementsByTagName('title')->item(0)->value,
- 'link' => $image->getElementsByTagName('link')->item(0)->value,
- 'url' => $image->getElementsByTagName('url')->item(0)->value);
- } else {
- $details = array('title' => false,
- 'link' => false,
- 'url' => $image->attributes->getNamedItem('resource')->nodeValue);
- }
- $details = array_merge($details,
- array('description' => false, 'height' => false, 'width' => false));
- if (! empty($details)) {
- return $details;
- }
- }
- return false;
- }
-
- /**
- * The textinput element is little used, but in the interests of
- * completeness we will support it.
- *
- * @return array|false
- */
- protected function getTextInput()
- {
- $inputs = $this->model->getElementsByTagName('textinput');
- if ($inputs->length > 0) {
- $input = $inputs->item(0);
- $results = array();
- $results['title'] = isset(
- $input->getElementsByTagName('title')->item(0)->value) ?
- $input->getElementsByTagName('title')->item(0)->value : null;
- $results['description'] = isset(
- $input->getElementsByTagName('description')->item(0)->value) ?
- $input->getElementsByTagName('description')->item(0)->value : null;
- $results['name'] = isset(
- $input->getElementsByTagName('name')->item(0)->value) ?
- $input->getElementsByTagName('name')->item(0)->value : null;
- $results['link'] = isset(
- $input->getElementsByTagName('link')->item(0)->value) ?
- $input->getElementsByTagName('link')->item(0)->value : null;
- if (empty($results['link']) &&
- $input->attributes->getNamedItem('resource')) {
- $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
- }
- if (! empty($results)) {
- return $results;
- }
- }
- return false;
- }
-
- /**
- * Get details of a link from the feed.
- *
- * In RSS1 a link is a text element but in order to ensure that we resolve
- * URLs properly we have a special function for them.
- *
- * @return string
- */
- function getLink($offset = 0, $attribute = 'href', $params = false)
- {
- $links = $this->model->getElementsByTagName('link');
- if ($links->length <= $offset) {
- return false;
- }
- $link = $links->item($offset);
- return $this->addBase($link->nodeValue, $link);
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php
deleted file mode 100755
index d41f36e8d..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS09Element.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS0.9 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS09Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 0.9 entries. It will usually be called by
- * XML_Feed_Parser_RSS09 with which it shares many methods.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS09Element extends XML_Feed_Parser_RSS09
-{
- /**
- * This will be a reference to the parent object for when we want
- * to use a 'fallback' rule
- * @var XML_Feed_Parser_RSS09
- */
- protected $parent;
-
- /**
- * Our specific element map
- * @var array
- */
- protected $map = array(
- 'title' => array('Text'),
- 'link' => array('Link'));
-
- /**
- * Store useful information for later.
- *
- * @param DOMElement $element - this item as a DOM element
- * @param XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
- */
- function __construct(DOMElement $element, $parent, $xmlBase = '')
- {
- $this->model = $element;
- $this->parent = $parent;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php
deleted file mode 100755
index 60c9938ba..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS1.php,v 1.10 2006/07/27 13:52:05 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS1.0 feeds.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo Find a Relax NG URI we can use
- */
-class XML_Feed_Parser_RSS1 extends XML_Feed_Parser_Type
-{
- /**
- * The URI of the RelaxNG schema used to (optionally) validate the feed
- * @var string
- */
- private $relax = 'rss10.rnc';
-
- /**
- * We're likely to use XPath, so let's keep it global
- * @var DOMXPath
- */
- protected $xpath;
-
- /**
- * The feed type we are parsing
- * @var string
- */
- public $version = 'RSS 1.0';
-
- /**
- * The class used to represent individual items
- * @var string
- */
- protected $itemClass = 'XML_Feed_Parser_RSS1Element';
-
- /**
- * The element containing entries
- * @var string
- */
- protected $itemElement = 'item';
-
- /**
- * Here we map those elements we're not going to handle individually
- * to the constructs they are. The optional second parameter in the array
- * tells the parser whether to 'fall back' (not apt. at the feed level) or
- * fail if the element is missing. If the parameter is not set, the function
- * will simply return false and leave it to the client to decide what to do.
- * @var array
- */
- protected $map = array(
- 'title' => array('Text'),
- 'link' => array('Text'),
- 'description' => array('Text'),
- 'image' => array('Image'),
- 'textinput' => array('TextInput'),
- 'updatePeriod' => array('Text'),
- 'updateFrequency' => array('Text'),
- 'updateBase' => array('Date'),
- 'rights' => array('Text'), # dc:rights
- 'description' => array('Text'), # dc:description
- 'creator' => array('Text'), # dc:creator
- 'publisher' => array('Text'), # dc:publisher
- 'contributor' => array('Text'), # dc:contributor
- 'date' => array('Date') # dc:contributor
- );
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS2.
- * @var array
- */
- protected $compatMap = array(
- 'title' => array('title'),
- 'link' => array('link'),
- 'subtitle' => array('description'),
- 'author' => array('creator'),
- 'updated' => array('date'));
-
- /**
- * We will be working with multiple namespaces and it is useful to
- * keep them together
- * @var array
- */
- protected $namespaces = array(
- 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
- 'rss' => 'http://purl.org/rss/1.0/',
- 'dc' => 'http://purl.org/rss/1.0/modules/dc/',
- 'content' => 'http://purl.org/rss/1.0/modules/content/',
- 'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
-
- /**
- * Our constructor does nothing more than its parent.
- *
- * @param DOMDocument $xml A DOM object representing the feed
- * @param bool (optional) $string Whether or not to validate this feed
- */
- function __construct(DOMDocument $model, $strict = false)
- {
- $this->model = $model;
- if ($strict) {
- $validate = $this->model->relaxNGValidate(self::getSchemaDir .
- DIRECTORY_SEPARATOR . $this->relax);
- if (! $validate) {
- throw new XML_Feed_Parser_Exception('Failed required validation');
- }
- }
-
- $this->xpath = new DOMXPath($model);
- foreach ($this->namespaces as $key => $value) {
- $this->xpath->registerNamespace($key, $value);
- }
- $this->numberEntries = $this->count('item');
- }
-
- /**
- * Allows retrieval of an entry by ID where the rdf:about attribute is used
- *
- * This is not really something that will work with RSS1 as it does not have
- * clear restrictions on the global uniqueness of IDs. We will employ the
- * _very_ hit and miss method of selecting entries based on the rdf:about
- * attribute. If DOMXPath::evaluate is available, we also use that to store
- * a reference to the entry in the array used by getEntryByOffset so that
- * method does not have to seek out the entry if it's requested that way.
- *
- * @param string $id any valid ID.
- * @return XML_Feed_Parser_RSS1Element
- */
- function getEntryById($id)
- {
- if (isset($this->idMappings[$id])) {
- return $this->entries[$this->idMappings[$id]];
- }
-
- $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
- if ($entries->length > 0) {
- $classname = $this->itemClass;
- $entry = new $classname($entries->item(0), $this);
- if (in_array('evaluate', get_class_methods($this->xpath))) {
- $offset = $this->xpath->evaluate("count(preceding-sibling::rss:item)", $entries->item(0));
- $this->entries[$offset] = $entry;
- }
- $this->idMappings[$id] = $entry;
- return $entry;
- }
- return false;
- }
-
- /**
- * Get details of the image associated with the feed.
- *
- * @return array|false an array simply containing the child elements
- */
- protected function getImage()
- {
- $images = $this->model->getElementsByTagName('image');
- if ($images->length > 0) {
- $image = $images->item(0);
- $details = array();
- if ($image->hasChildNodes()) {
- $details = array(
- 'title' => $image->getElementsByTagName('title')->item(0)->value,
- 'link' => $image->getElementsByTagName('link')->item(0)->value,
- 'url' => $image->getElementsByTagName('url')->item(0)->value);
- } else {
- $details = array('title' => false,
- 'link' => false,
- 'url' => $image->attributes->getNamedItem('resource')->nodeValue);
- }
- $details = array_merge($details, array('description' => false, 'height' => false, 'width' => false));
- if (! empty($details)) {
- return $details;
- }
- }
- return false;
- }
-
- /**
- * The textinput element is little used, but in the interests of
- * completeness we will support it.
- *
- * @return array|false
- */
- protected function getTextInput()
- {
- $inputs = $this->model->getElementsByTagName('textinput');
- if ($inputs->length > 0) {
- $input = $inputs->item(0);
- $results = array();
- $results['title'] = isset(
- $input->getElementsByTagName('title')->item(0)->value) ?
- $input->getElementsByTagName('title')->item(0)->value : null;
- $results['description'] = isset(
- $input->getElementsByTagName('description')->item(0)->value) ?
- $input->getElementsByTagName('description')->item(0)->value : null;
- $results['name'] = isset(
- $input->getElementsByTagName('name')->item(0)->value) ?
- $input->getElementsByTagName('name')->item(0)->value : null;
- $results['link'] = isset(
- $input->getElementsByTagName('link')->item(0)->value) ?
- $input->getElementsByTagName('link')->item(0)->value : null;
- if (empty($results['link']) and
- $input->attributes->getNamedItem('resource')) {
- $results['link'] =
- $input->attributes->getNamedItem('resource')->nodeValue;
- }
- if (! empty($results)) {
- return $results;
- }
- }
- return false;
- }
-
- /**
- * Employs various techniques to identify the author
- *
- * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
- * elements for defining authorship in RSS1. We will try each of those in
- * turn in order to simulate the atom author element and will return it
- * as text.
- *
- * @return array|false
- */
- function getAuthor()
- {
- $options = array('creator', 'contributor', 'publisher');
- foreach ($options as $element) {
- $test = $this->model->getElementsByTagName($element);
- if ($test->length > 0) {
- return $test->item(0)->value;
- }
- }
- return false;
- }
-
- /**
- * Retrieve a link
- *
- * In RSS1 a link is a text element but in order to ensure that we resolve
- * URLs properly we have a special function for them.
- *
- * @return string
- */
- function getLink($offset = 0, $attribute = 'href', $params = false)
- {
- $links = $this->model->getElementsByTagName('link');
- if ($links->length <= $offset) {
- return false;
- }
- $link = $links->item($offset);
- return $this->addBase($link->nodeValue, $link);
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php
deleted file mode 100755
index 3cd1ef15d..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1.1 class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS11.php,v 1.6 2006/07/27 13:52:05 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS1.1 feeds. RSS1.1 is documented at:
- * http://inamidst.com/rss1.1/
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- * @todo Support for RDF:List
- * @todo Ensure xml:lang is accessible to users
- */
-class XML_Feed_Parser_RSS11 extends XML_Feed_Parser_Type
-{
- /**
- * The URI of the RelaxNG schema used to (optionally) validate the feed
- * @var string
- */
- private $relax = 'rss11.rnc';
-
- /**
- * We're likely to use XPath, so let's keep it global
- * @var DOMXPath
- */
- protected $xpath;
-
- /**
- * The feed type we are parsing
- * @var string
- */
- public $version = 'RSS 1.0';
-
- /**
- * The class used to represent individual items
- * @var string
- */
- protected $itemClass = 'XML_Feed_Parser_RSS1Element';
-
- /**
- * The element containing entries
- * @var string
- */
- protected $itemElement = 'item';
-
- /**
- * Here we map those elements we're not going to handle individually
- * to the constructs they are. The optional second parameter in the array
- * tells the parser whether to 'fall back' (not apt. at the feed level) or
- * fail if the element is missing. If the parameter is not set, the function
- * will simply return false and leave it to the client to decide what to do.
- * @var array
- */
- protected $map = array(
- 'title' => array('Text'),
- 'link' => array('Text'),
- 'description' => array('Text'),
- 'image' => array('Image'),
- 'updatePeriod' => array('Text'),
- 'updateFrequency' => array('Text'),
- 'updateBase' => array('Date'),
- 'rights' => array('Text'), # dc:rights
- 'description' => array('Text'), # dc:description
- 'creator' => array('Text'), # dc:creator
- 'publisher' => array('Text'), # dc:publisher
- 'contributor' => array('Text'), # dc:contributor
- 'date' => array('Date') # dc:contributor
- );
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS2.
- * @var array
- */
- protected $compatMap = array(
- 'title' => array('title'),
- 'link' => array('link'),
- 'subtitle' => array('description'),
- 'author' => array('creator'),
- 'updated' => array('date'));
-
- /**
- * We will be working with multiple namespaces and it is useful to
- * keep them together. We will retain support for some common RSS1.0 modules
- * @var array
- */
- protected $namespaces = array(
- 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
- 'rss' => 'http://purl.org/net/rss1.1#',
- 'dc' => 'http://purl.org/rss/1.0/modules/dc/',
- 'content' => 'http://purl.org/rss/1.0/modules/content/',
- 'sy' => 'http://web.resource.org/rss/1.0/modules/syndication/');
-
- /**
- * Our constructor does nothing more than its parent.
- *
- * @param DOMDocument $xml A DOM object representing the feed
- * @param bool (optional) $string Whether or not to validate this feed
- */
- function __construct(DOMDocument $model, $strict = false)
- {
- $this->model = $model;
-
- if ($strict) {
- $validate = $this->model->relaxNGValidate(self::getSchemaDir .
- DIRECTORY_SEPARATOR . $this->relax);
- if (! $validate) {
- throw new XML_Feed_Parser_Exception('Failed required validation');
- }
- }
-
- $this->xpath = new DOMXPath($model);
- foreach ($this->namespaces as $key => $value) {
- $this->xpath->registerNamespace($key, $value);
- }
- $this->numberEntries = $this->count('item');
- }
-
- /**
- * Attempts to identify an element by ID given by the rdf:about attribute
- *
- * This is not really something that will work with RSS1.1 as it does not have
- * clear restrictions on the global uniqueness of IDs. We will employ the
- * _very_ hit and miss method of selecting entries based on the rdf:about
- * attribute. Please note that this is even more hit and miss with RSS1.1 than
- * with RSS1.0 since RSS1.1 does not require the rdf:about attribute for items.
- *
- * @param string $id any valid ID.
- * @return XML_Feed_Parser_RSS1Element
- */
- function getEntryById($id)
- {
- if (isset($this->idMappings[$id])) {
- return $this->entries[$this->idMappings[$id]];
- }
-
- $entries = $this->xpath->query("//rss:item[@rdf:about='$id']");
- if ($entries->length > 0) {
- $classname = $this->itemClass;
- $entry = new $classname($entries->item(0), $this);
- return $entry;
- }
- return false;
- }
-
- /**
- * Get details of the image associated with the feed.
- *
- * @return array|false an array simply containing the child elements
- */
- protected function getImage()
- {
- $images = $this->model->getElementsByTagName('image');
- if ($images->length > 0) {
- $image = $images->item(0);
- $details = array();
- if ($image->hasChildNodes()) {
- $details = array(
- 'title' => $image->getElementsByTagName('title')->item(0)->value,
- 'url' => $image->getElementsByTagName('url')->item(0)->value);
- if ($image->getElementsByTagName('link')->length > 0) {
- $details['link'] =
- $image->getElementsByTagName('link')->item(0)->value;
- }
- } else {
- $details = array('title' => false,
- 'link' => false,
- 'url' => $image->attributes->getNamedItem('resource')->nodeValue);
- }
- $details = array_merge($details,
- array('description' => false, 'height' => false, 'width' => false));
- if (! empty($details)) {
- return $details;
- }
- }
- return false;
- }
-
- /**
- * The textinput element is little used, but in the interests of
- * completeness we will support it.
- *
- * @return array|false
- */
- protected function getTextInput()
- {
- $inputs = $this->model->getElementsByTagName('textinput');
- if ($inputs->length > 0) {
- $input = $inputs->item(0);
- $results = array();
- $results['title'] = isset(
- $input->getElementsByTagName('title')->item(0)->value) ?
- $input->getElementsByTagName('title')->item(0)->value : null;
- $results['description'] = isset(
- $input->getElementsByTagName('description')->item(0)->value) ?
- $input->getElementsByTagName('description')->item(0)->value : null;
- $results['name'] = isset(
- $input->getElementsByTagName('name')->item(0)->value) ?
- $input->getElementsByTagName('name')->item(0)->value : null;
- $results['link'] = isset(
- $input->getElementsByTagName('link')->item(0)->value) ?
- $input->getElementsByTagName('link')->item(0)->value : null;
- if (empty($results['link']) and
- $input->attributes->getNamedItem('resource')) {
- $results['link'] = $input->attributes->getNamedItem('resource')->nodeValue;
- }
- if (! empty($results)) {
- return $results;
- }
- }
- return false;
- }
-
- /**
- * Attempts to discern authorship
- *
- * Dublin Core provides the dc:creator, dc:contributor, and dc:publisher
- * elements for defining authorship in RSS1. We will try each of those in
- * turn in order to simulate the atom author element and will return it
- * as text.
- *
- * @return array|false
- */
- function getAuthor()
- {
- $options = array('creator', 'contributor', 'publisher');
- foreach ($options as $element) {
- $test = $this->model->getElementsByTagName($element);
- if ($test->length > 0) {
- return $test->item(0)->value;
- }
- }
- return false;
- }
-
- /**
- * Retrieve a link
- *
- * In RSS1 a link is a text element but in order to ensure that we resolve
- * URLs properly we have a special function for them.
- *
- * @return string
- */
- function getLink($offset = 0, $attribute = 'href', $params = false)
- {
- $links = $this->model->getElementsByTagName('link');
- if ($links->length <= $offset) {
- return false;
- }
- $link = $links->item($offset);
- return $this->addBase($link->nodeValue, $link);
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php
deleted file mode 100755
index 75918beda..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS11Element.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS11Element.php,v 1.4 2006/06/30 17:41:56 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 1.1 entries. It will usually be called by
- * XML_Feed_Parser_RSS11 with which it shares many methods.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS11Element extends XML_Feed_Parser_RSS11
-{
- /**
- * This will be a reference to the parent object for when we want
- * to use a 'fallback' rule
- * @var XML_Feed_Parser_RSS1
- */
- protected $parent;
-
- /**
- * Our specific element map
- * @var array
- */
- protected $map = array(
- 'id' => array('Id'),
- 'title' => array('Text'),
- 'link' => array('Link'),
- 'description' => array('Text'), # or dc:description
- 'category' => array('Category'),
- 'rights' => array('Text'), # dc:rights
- 'creator' => array('Text'), # dc:creator
- 'publisher' => array('Text'), # dc:publisher
- 'contributor' => array('Text'), # dc:contributor
- 'date' => array('Date'), # dc:date
- 'content' => array('Content')
- );
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS1.
- * @var array
- */
- protected $compatMap = array(
- 'content' => array('content'),
- 'updated' => array('lastBuildDate'),
- 'published' => array('pubdate'),
- 'subtitle' => array('description'),
- 'updated' => array('date'),
- 'author' => array('creator'),
- 'contributor' => array('contributor')
- );
-
- /**
- * Store useful information for later.
- *
- * @param DOMElement $element - this item as a DOM element
- * @param XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
- */
- function __construct(DOMElement $element, $parent, $xmlBase = '')
- {
- $this->model = $element;
- $this->parent = $parent;
- }
-
- /**
- * If an rdf:about attribute is specified, return that as an ID
- *
- * There is no established way of showing an ID for an RSS1 entry. We will
- * simulate it using the rdf:about attribute of the entry element. This cannot
- * be relied upon for unique IDs but may prove useful.
- *
- * @return string|false
- */
- function getId()
- {
- if ($this->model->attributes->getNamedItem('about')) {
- return $this->model->attributes->getNamedItem('about')->nodeValue;
- }
- return false;
- }
-
- /**
- * Return the entry's content
- *
- * The official way to include full content in an RSS1 entry is to use
- * the content module's element 'encoded'. Often, however, the 'description'
- * element is used instead. We will offer that as a fallback.
- *
- * @return string|false
- */
- function getContent()
- {
- $options = array('encoded', 'description');
- foreach ($options as $element) {
- $test = $this->model->getElementsByTagName($element);
- if ($test->length == 0) {
- continue;
- }
- if ($test->item(0)->hasChildNodes()) {
- $value = '';
- foreach ($test->item(0)->childNodes as $child) {
- if ($child instanceof DOMText) {
- $value .= $child->nodeValue;
- } else {
- $simple = simplexml_import_dom($child);
- $value .= $simple->asXML();
- }
- }
- return $value;
- } else if ($test->length > 0) {
- return $test->item(0)->nodeValue;
- }
- }
- return false;
- }
-
- /**
- * How RSS1.1 should support for enclosures is not clear. For now we will return
- * false.
- *
- * @return false
- */
- function getEnclosure()
- {
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php
deleted file mode 100755
index 8e36d5a9b..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS1Element.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * RSS1 Element class for XML_Feed_Parser
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS1Element.php,v 1.6 2006/06/30 17:41:56 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/*
- * This class provides support for RSS 1.0 entries. It will usually be called by
- * XML_Feed_Parser_RSS1 with which it shares many methods.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS1Element extends XML_Feed_Parser_RSS1
-{
- /**
- * This will be a reference to the parent object for when we want
- * to use a 'fallback' rule
- * @var XML_Feed_Parser_RSS1
- */
- protected $parent;
-
- /**
- * Our specific element map
- * @var array
- */
- protected $map = array(
- 'id' => array('Id'),
- 'title' => array('Text'),
- 'link' => array('Link'),
- 'description' => array('Text'), # or dc:description
- 'category' => array('Category'),
- 'rights' => array('Text'), # dc:rights
- 'creator' => array('Text'), # dc:creator
- 'publisher' => array('Text'), # dc:publisher
- 'contributor' => array('Text'), # dc:contributor
- 'date' => array('Date'), # dc:date
- 'content' => array('Content')
- );
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS1.
- * @var array
- */
- protected $compatMap = array(
- 'content' => array('content'),
- 'updated' => array('lastBuildDate'),
- 'published' => array('pubdate'),
- 'subtitle' => array('description'),
- 'updated' => array('date'),
- 'author' => array('creator'),
- 'contributor' => array('contributor')
- );
-
- /**
- * Store useful information for later.
- *
- * @param DOMElement $element - this item as a DOM element
- * @param XML_Feed_Parser_RSS1 $parent - the feed of which this is a member
- */
- function __construct(DOMElement $element, $parent, $xmlBase = '')
- {
- $this->model = $element;
- $this->parent = $parent;
- }
-
- /**
- * If an rdf:about attribute is specified, return it as an ID
- *
- * There is no established way of showing an ID for an RSS1 entry. We will
- * simulate it using the rdf:about attribute of the entry element. This cannot
- * be relied upon for unique IDs but may prove useful.
- *
- * @return string|false
- */
- function getId()
- {
- if ($this->model->attributes->getNamedItem('about')) {
- return $this->model->attributes->getNamedItem('about')->nodeValue;
- }
- return false;
- }
-
- /**
- * How RSS1 should support for enclosures is not clear. For now we will return
- * false.
- *
- * @return false
- */
- function getEnclosure()
- {
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php
deleted file mode 100644
index 0936bd2f5..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Class representing feed-level data for an RSS2 feed
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS2.php,v 1.12 2008/03/08 18:16:45 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class handles RSS2 feeds.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
-{
- /**
- * The URI of the RelaxNG schema used to (optionally) validate the feed
- * @var string
- */
- private $relax = 'rss20.rnc';
-
- /**
- * We're likely to use XPath, so let's keep it global
- * @var DOMXPath
- */
- protected $xpath;
-
- /**
- * The feed type we are parsing
- * @var string
- */
- public $version = 'RSS 2.0';
-
- /**
- * The class used to represent individual items
- * @var string
- */
- protected $itemClass = 'XML_Feed_Parser_RSS2Element';
-
- /**
- * The element containing entries
- * @var string
- */
- protected $itemElement = 'item';
-
- /**
- * Here we map those elements we're not going to handle individually
- * to the constructs they are. The optional second parameter in the array
- * tells the parser whether to 'fall back' (not apt. at the feed level) or
- * fail if the element is missing. If the parameter is not set, the function
- * will simply return false and leave it to the client to decide what to do.
- * @var array
- */
- protected $map = array(
- 'ttl' => array('Text'),
- 'pubDate' => array('Date'),
- 'lastBuildDate' => array('Date'),
- 'title' => array('Text'),
- 'link' => array('Link'),
- 'description' => array('Text'),
- 'language' => array('Text'),
- 'copyright' => array('Text'),
- 'managingEditor' => array('Text'),
- 'webMaster' => array('Text'),
- 'category' => array('Text'),
- 'generator' => array('Text'),
- 'docs' => array('Text'),
- 'ttl' => array('Text'),
- 'image' => array('Image'),
- 'skipDays' => array('skipDays'),
- 'skipHours' => array('skipHours'));
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS2.
- * @var array
- */
- protected $compatMap = array(
- 'title' => array('title'),
- 'rights' => array('copyright'),
- 'updated' => array('lastBuildDate'),
- 'subtitle' => array('description'),
- 'date' => array('pubDate'),
- 'author' => array('managingEditor'));
-
- protected $namespaces = array(
- 'dc' => 'http://purl.org/rss/1.0/modules/dc/',
- 'content' => 'http://purl.org/rss/1.0/modules/content/');
-
- /**
- * Our constructor does nothing more than its parent.
- *
- * @param DOMDocument $xml A DOM object representing the feed
- * @param bool (optional) $string Whether or not to validate this feed
- */
- function __construct(DOMDocument $model, $strict = false)
- {
- $this->model = $model;
-
- if ($strict) {
- if (! $this->model->relaxNGValidate($this->relax)) {
- throw new XML_Feed_Parser_Exception('Failed required validation');
- }
- }
-
- $this->xpath = new DOMXPath($this->model);
- foreach ($this->namespaces as $key => $value) {
- $this->xpath->registerNamespace($key, $value);
- }
- $this->numberEntries = $this->count('item');
- }
-
- /**
- * Retrieves an entry by ID, if the ID is specified with the guid element
- *
- * This is not really something that will work with RSS2 as it does not have
- * clear restrictions on the global uniqueness of IDs. But we can emulate
- * it by allowing access based on the 'guid' element. If DOMXPath::evaluate
- * is available, we also use that to store a reference to the entry in the array
- * used by getEntryByOffset so that method does not have to seek out the entry
- * if it's requested that way.
- *
- * @param string $id any valid ID.
- * @return XML_Feed_Parser_RSS2Element
- */
- function getEntryById($id)
- {
- if (isset($this->idMappings[$id])) {
- return $this->entries[$this->idMappings[$id]];
- }
-
- $entries = $this->xpath->query("//item[guid='$id']");
- if ($entries->length > 0) {
- $entry = new $this->itemElement($entries->item(0), $this);
- if (in_array('evaluate', get_class_methods($this->xpath))) {
- $offset = $this->xpath->evaluate("count(preceding-sibling::item)", $entries->item(0));
- $this->entries[$offset] = $entry;
- }
- $this->idMappings[$id] = $entry;
- return $entry;
- }
- }
-
- /**
- * Get a category from the element
- *
- * The category element is a simple text construct which can occur any number
- * of times. We allow access by offset or access to an array of results.
- *
- * @param string $call for compatibility with our overloading
- * @param array $arguments - arg 0 is the offset, arg 1 is whether to return as array
- * @return string|array|false
- */
- function getCategory($call, $arguments = array())
- {
- $categories = $this->model->getElementsByTagName('category');
- $offset = empty($arguments[0]) ? 0 : $arguments[0];
- $array = empty($arguments[1]) ? false : true;
- if ($categories->length <= $offset) {
- return false;
- }
- if ($array) {
- $list = array();
- foreach ($categories as $category) {
- array_push($list, $category->nodeValue);
- }
- return $list;
- }
- return $categories->item($offset)->nodeValue;
- }
-
- /**
- * Get details of the image associated with the feed.
- *
- * @return array|false an array simply containing the child elements
- */
- protected function getImage()
- {
- $images = $this->xpath->query("//image");
- if ($images->length > 0) {
- $image = $images->item(0);
- $desc = $image->getElementsByTagName('description');
- $description = $desc->length ? $desc->item(0)->nodeValue : false;
- $heigh = $image->getElementsByTagName('height');
- $height = $heigh->length ? $heigh->item(0)->nodeValue : false;
- $widt = $image->getElementsByTagName('width');
- $width = $widt->length ? $widt->item(0)->nodeValue : false;
- return array(
- 'title' => $image->getElementsByTagName('title')->item(0)->nodeValue,
- 'link' => $image->getElementsByTagName('link')->item(0)->nodeValue,
- 'url' => $image->getElementsByTagName('url')->item(0)->nodeValue,
- 'description' => $description,
- 'height' => $height,
- 'width' => $width);
- }
- return false;
- }
-
- /**
- * The textinput element is little used, but in the interests of
- * completeness...
- *
- * @return array|false
- */
- function getTextInput()
- {
- $inputs = $this->model->getElementsByTagName('input');
- if ($inputs->length > 0) {
- $input = $inputs->item(0);
- return array(
- 'title' => $input->getElementsByTagName('title')->item(0)->value,
- 'description' =>
- $input->getElementsByTagName('description')->item(0)->value,
- 'name' => $input->getElementsByTagName('name')->item(0)->value,
- 'link' => $input->getElementsByTagName('link')->item(0)->value);
- }
- return false;
- }
-
- /**
- * Utility function for getSkipDays and getSkipHours
- *
- * This is a general function used by both getSkipDays and getSkipHours. It simply
- * returns an array of the values of the children of the appropriate tag.
- *
- * @param string $tagName The tag name (getSkipDays or getSkipHours)
- * @return array|false
- */
- protected function getSkips($tagName)
- {
- $hours = $this->model->getElementsByTagName($tagName);
- if ($hours->length == 0) {
- return false;
- }
- $skipHours = array();
- foreach($hours->item(0)->childNodes as $hour) {
- if ($hour instanceof DOMElement) {
- array_push($skipHours, $hour->nodeValue);
- }
- }
- return $skipHours;
- }
-
- /**
- * Retrieve skipHours data
- *
- * The skiphours element provides a list of hours on which this feed should
- * not be checked. We return an array of those hours (integers, 24 hour clock)
- *
- * @return array
- */
- function getSkipHours()
- {
- return $this->getSkips('skipHours');
- }
-
- /**
- * Retrieve skipDays data
- *
- * The skipdays element provides a list of days on which this feed should
- * not be checked. We return an array of those days.
- *
- * @return array
- */
- function getSkipDays()
- {
- return $this->getSkips('skipDays');
- }
-
- /**
- * Return content of the little-used 'cloud' element
- *
- * The cloud element is rarely used. It is designed to provide some details
- * of a location to update the feed.
- *
- * @return array an array of the attributes of the element
- */
- function getCloud()
- {
- $cloud = $this->model->getElementsByTagName('cloud');
- if ($cloud->length == 0) {
- return false;
- }
- $cloudData = array();
- foreach ($cloud->item(0)->attributes as $attribute) {
- $cloudData[$attribute->name] = $attribute->value;
- }
- return $cloudData;
- }
-
- /**
- * Get link URL
- *
- * In RSS2 a link is a text element but in order to ensure that we resolve
- * URLs properly we have a special function for them. We maintain the
- * parameter used by the atom getLink method, though we only use the offset
- * parameter.
- *
- * @param int $offset The position of the link within the feed. Starts from 0
- * @param string $attribute The attribute of the link element required
- * @param array $params An array of other parameters. Not used.
- * @return string
- */
- function getLink($offset, $attribute = 'href', $params = array())
- {
- $xPath = new DOMXPath($this->model);
- $links = $xPath->query('//link');
-
- if ($links->length <= $offset) {
- return false;
- }
- $link = $links->item($offset);
- return $this->addBase($link->nodeValue, $link);
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php b/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php
deleted file mode 100755
index 6edf910dc..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/RSS2Element.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Class representing entries in an RSS2 feed.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: RSS2Element.php,v 1.11 2006/07/26 21:18:47 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This class provides support for RSS 2.0 entries. It will usually be
- * called by XML_Feed_Parser_RSS2 with which it shares many methods.
- *
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- * @package XML_Feed_Parser
- */
-class XML_Feed_Parser_RSS2Element extends XML_Feed_Parser_RSS2
-{
- /**
- * This will be a reference to the parent object for when we want
- * to use a 'fallback' rule
- * @var XML_Feed_Parser_RSS2
- */
- protected $parent;
-
- /**
- * Our specific element map
- * @var array
- */
- protected $map = array(
- 'title' => array('Text'),
- 'guid' => array('Guid'),
- 'description' => array('Text'),
- 'author' => array('Text'),
- 'comments' => array('Text'),
- 'enclosure' => array('Enclosure'),
- 'pubDate' => array('Date'),
- 'source' => array('Source'),
- 'link' => array('Text'),
- 'content' => array('Content'));
-
- /**
- * Here we map some elements to their atom equivalents. This is going to be
- * quite tricky to pull off effectively (and some users' methods may vary)
- * but is worth trying. The key is the atom version, the value is RSS2.
- * @var array
- */
- protected $compatMap = array(
- 'id' => array('guid'),
- 'updated' => array('lastBuildDate'),
- 'published' => array('pubdate'),
- 'guidislink' => array('guid', 'ispermalink'),
- 'summary' => array('description'));
-
- /**
- * Store useful information for later.
- *
- * @param DOMElement $element - this item as a DOM element
- * @param XML_Feed_Parser_RSS2 $parent - the feed of which this is a member
- */
- function __construct(DOMElement $element, $parent, $xmlBase = '')
- {
- $this->model = $element;
- $this->parent = $parent;
- }
-
- /**
- * Get the value of the guid element, if specified
- *
- * guid is the closest RSS2 has to atom's ID. It is usually but not always a
- * URI. The one attribute that RSS2 can posess is 'ispermalink' which specifies
- * whether the guid is itself dereferencable. Use of guid is not obligatory,
- * but is advisable. To get the guid you would call $item->id() (for atom
- * compatibility) or $item->guid(). To check if this guid is a permalink call
- * $item->guid("ispermalink").
- *
- * @param string $method - the method name being called
- * @param array $params - parameters required
- * @return string the guid or value of ispermalink
- */
- protected function getGuid($method, $params)
- {
- $attribute = (isset($params[0]) and $params[0] == 'ispermalink') ?
- true : false;
- $tag = $this->model->getElementsByTagName('guid');
- if ($tag->length > 0) {
- if ($attribute) {
- if ($tag->hasAttribute("ispermalink")) {
- return $tag->getAttribute("ispermalink");
- }
- }
- return $tag->item(0)->nodeValue;
- }
- return false;
- }
-
- /**
- * Access details of file enclosures
- *
- * The RSS2 spec is ambiguous as to whether an enclosure element must be
- * unique in a given entry. For now we will assume it needn't, and allow
- * for an offset.
- *
- * @param string $method - the method being called
- * @param array $parameters - we expect the first of these to be our offset
- * @return array|false
- */
- protected function getEnclosure($method, $parameters)
- {
- $encs = $this->model->getElementsByTagName('enclosure');
- $offset = isset($parameters[0]) ? $parameters[0] : 0;
- if ($encs->length > $offset) {
- try {
- if (! $encs->item($offset)->hasAttribute('url')) {
- return false;
- }
- $attrs = $encs->item($offset)->attributes;
- return array(
- 'url' => $attrs->getNamedItem('url')->value,
- 'length' => $attrs->getNamedItem('length')->value,
- 'type' => $attrs->getNamedItem('type')->value);
- } catch (Exception $e) {
- return false;
- }
- }
- return false;
- }
-
- /**
- * Get the entry source if specified
- *
- * source is an optional sub-element of item. Like atom:source it tells
- * us about where the entry came from (eg. if it's been copied from another
- * feed). It is not a rich source of metadata in the same way as atom:source
- * and while it would be good to maintain compatibility by returning an
- * XML_Feed_Parser_RSS2 element, it makes a lot more sense to return an array.
- *
- * @return array|false
- */
- protected function getSource()
- {
- $get = $this->model->getElementsByTagName('source');
- if ($get->length) {
- $source = $get->item(0);
- $array = array(
- 'content' => $source->nodeValue);
- foreach ($source->attributes as $attribute) {
- $array[$attribute->name] = $attribute->value;
- }
- return $array;
- }
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/Parser/Type.php b/plugins/OStatus/extlib/XML/Feed/Parser/Type.php
deleted file mode 100644
index 75052619b..000000000
--- a/plugins/OStatus/extlib/XML/Feed/Parser/Type.php
+++ /dev/null
@@ -1,467 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Abstract class providing common methods for XML_Feed_Parser feeds.
- *
- * PHP versions 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category XML
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @copyright 2005 James Stewart <james@jystewart.net>
- * @license http://www.gnu.org/copyleft/lesser.html GNU LGPL 2.1
- * @version CVS: $Id: Type.php,v 1.25 2008/03/08 18:39:09 jystewart Exp $
- * @link http://pear.php.net/package/XML_Feed_Parser/
- */
-
-/**
- * This abstract class provides some general methods that are likely to be
- * implemented exactly the same way for all feed types.
- *
- * @package XML_Feed_Parser
- * @author James Stewart <james@jystewart.net>
- * @version Release: 1.0.3
- */
-abstract class XML_Feed_Parser_Type
-{
- /**
- * Where we store our DOM object for this feed
- * @var DOMDocument
- */
- public $model;
-
- /**
- * For iteration we'll want a count of the number of entries
- * @var int
- */
- public $numberEntries;
-
- /**
- * Where we store our entry objects once instantiated
- * @var array
- */
- public $entries = array();
-
- /**
- * Store mappings between entry IDs and their position in the feed
- */
- public $idMappings = array();
-
- /**
- * Proxy to allow use of element names as method names
- *
- * We are not going to provide methods for every entry type so this
- * function will allow for a lot of mapping. We rely pretty heavily
- * on this to handle our mappings between other feed types and atom.
- *
- * @param string $call - the method attempted
- * @param array $arguments - arguments to that method
- * @return mixed
- */
- function __call($call, $arguments = array())
- {
- if (! is_array($arguments)) {
- $arguments = array();
- }
-
- if (isset($this->compatMap[$call])) {
- $tempMap = $this->compatMap;
- $tempcall = array_pop($tempMap[$call]);
- if (! empty($tempMap)) {
- $arguments = array_merge($arguments, $tempMap[$call]);
- }
- $call = $tempcall;
- }
-
- /* To be helpful, we allow a case-insensitive search for this method */
- if (! isset($this->map[$call])) {
- foreach (array_keys($this->map) as $key) {
- if (strtoupper($key) == strtoupper($call)) {
- $call = $key;
- break;
- }
- }
- }
-
- if (empty($this->map[$call])) {
- return false;
- }
-
- $method = 'get' . $this->map[$call][0];
- if ($method == 'getLink') {
- $offset = empty($arguments[0]) ? 0 : $arguments[0];
- $attribute = empty($arguments[1]) ? 'href' : $arguments[1];
- $params = isset($arguments[2]) ? $arguments[2] : array();
- return $this->getLink($offset, $attribute, $params);
- }
- if (method_exists($this, $method)) {
- return $this->$method($call, $arguments);
- }
-
- return false;
- }
-
- /**
- * Proxy to allow use of element names as attribute names
- *
- * For many elements variable-style access will be desirable. This function
- * provides for that.
- *
- * @param string $value - the variable required
- * @return mixed
- */
- function __get($value)
- {
- return $this->__call($value, array());
- }
-
- /**
- * Utility function to help us resolve xml:base values
- *
- * We have other methods which will traverse the DOM and work out the different
- * xml:base declarations we need to be aware of. We then need to combine them.
- * If a declaration starts with a protocol then we restart the string. If it
- * starts with a / then we add on to the domain name. Otherwise we simply tag
- * it on to the end.
- *
- * @param string $base - the base to add the link to
- * @param string $link
- */
- function combineBases($base, $link)
- {
- if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
- return $link;
- } else if (preg_match('/^\//', $link)) {
- /* Extract domain and suffix link to that */
- preg_match('/^([A-Za-z]+:\/\/.*)?\/*/', $base, $results);
- $firstLayer = $results[0];
- return $firstLayer . "/" . $link;
- } else if (preg_match('/^\.\.\//', $base)) {
- /* Step up link to find place to be */
- preg_match('/^((\.\.\/)+)(.*)$/', $link, $bases);
- $suffix = $bases[3];
- $count = preg_match_all('/\.\.\//', $bases[1], $steps);
- $url = explode("/", $base);
- for ($i = 0; $i <= $count; $i++) {
- array_pop($url);
- }
- return implode("/", $url) . "/" . $suffix;
- } else if (preg_match('/^(?!\/$)/', $base)) {
- $base = preg_replace('/(.*\/).*$/', '$1', $base) ;
- return $base . $link;
- } else {
- /* Just stick it on the end */
- return $base . $link;
- }
- }
-
- /**
- * Determine whether we need to apply our xml:base rules
- *
- * Gets us the xml:base data and then processes that with regard
- * to our current link.
- *
- * @param string
- * @param DOMElement
- * @return string
- */
- function addBase($link, $element)
- {
- if (preg_match('/^[A-Za-z]+:\/\//', $link)) {
- return $link;
- }
-
- return $this->combineBases($element->baseURI, $link);
- }
-
- /**
- * Get an entry by its position in the feed, starting from zero
- *
- * As well as allowing the items to be iterated over we want to allow
- * users to be able to access a specific entry. This is one of two ways of
- * doing that, the other being by ID.
- *
- * @param int $offset
- * @return XML_Feed_Parser_RSS1Element
- */
- function getEntryByOffset($offset)
- {
- if (! isset($this->entries[$offset])) {
- $entries = $this->model->getElementsByTagName($this->itemElement);
- if ($entries->length > $offset) {
- $xmlBase = $entries->item($offset)->baseURI;
- $this->entries[$offset] = new $this->itemClass(
- $entries->item($offset), $this, $xmlBase);
- if ($id = $this->entries[$offset]->id) {
- $this->idMappings[$id] = $this->entries[$offset];
- }
- } else {
- throw new XML_Feed_Parser_Exception('No entries found');
- }
- }
-
- return $this->entries[$offset];
- }
-
- /**
- * Return a date in seconds since epoch.
- *
- * Get a date construct. We use PHP's strtotime to return it as a unix datetime, which
- * is the number of seconds since 1970-01-01 00:00:00.
- *
- * @link http://php.net/strtotime
- * @param string $method The name of the date construct we want
- * @param array $arguments Included for compatibility with our __call usage
- * @return int|false datetime
- */
- protected function getDate($method, $arguments)
- {
- $time = $this->model->getElementsByTagName($method);
- if ($time->length == 0 || empty($time->item(0)->nodeValue)) {
- return false;
- }
- return strtotime($time->item(0)->nodeValue);
- }
-
- /**
- * Get a text construct.
- *
- * @param string $method The name of the text construct we want
- * @param array $arguments Included for compatibility with our __call usage
- * @return string
- */
- protected function getText($method, $arguments = array())
- {
- $tags = $this->model->getElementsByTagName($method);
- if ($tags->length > 0) {
- $value = $tags->item(0)->nodeValue;
- return $value;
- }
- return false;
- }
-
- /**
- * Apply various rules to retrieve category data.
- *
- * There is no single way of declaring a category in RSS1/1.1 as there is in RSS2
- * and Atom. Instead the usual approach is to use the dublin core namespace to
- * declare categories. For example delicious use both:
- * <dc:subject>PEAR</dc:subject> and: <taxo:topics><rdf:Bag>
- * <rdf:li resource="http://del.icio.us/tag/PEAR" /></rdf:Bag></taxo:topics>
- * to declare a categorisation of 'PEAR'.
- *
- * We need to be sensitive to this where possible.
- *
- * @param string $call for compatibility with our overloading
- * @param array $arguments - arg 0 is the offset, arg 1 is whether to return as array
- * @return string|array|false
- */
- protected function getCategory($call, $arguments)
- {
- $categories = $this->model->getElementsByTagName('subject');
- $offset = empty($arguments[0]) ? 0 : $arguments[0];
- $array = empty($arguments[1]) ? false : true;
- if ($categories->length <= $offset) {
- return false;
- }
- if ($array) {
- $list = array();
- foreach ($categories as $category) {
- array_push($list, $category->nodeValue);
- }
- return $list;
- }
- return $categories->item($offset)->nodeValue;
- }
-
- /**
- * Count occurrences of an element
- *
- * This function will tell us how many times the element $type
- * appears at this level of the feed.
- *
- * @param string $type the element we want to get a count of
- * @return int
- */
- protected function count($type)
- {
- if ($tags = $this->model->getElementsByTagName($type)) {
- return $tags->length;
- }
- return 0;
- }
-
- /**
- * Part of our xml:base processing code
- *
- * We need a couple of methods to access XHTML content stored in feeds.
- * This is because we dereference all xml:base references before returning
- * the element. This method handles the attributes.
- *
- * @param DOMElement $node The DOM node we are iterating over
- * @return string
- */
- function processXHTMLAttributes($node) {
- $return = '';
- foreach ($node->attributes as $attribute) {
- if ($attribute->name == 'src' or $attribute->name == 'href') {
- $attribute->value = $this->addBase(htmlentities($attribute->value, NULL, 'utf-8'), $attribute);
- }
- if ($attribute->name == 'base') {
- continue;
- }
- $return .= $attribute->name . '="' . htmlentities($attribute->value, NULL, 'utf-8') .'" ';
- }
- if (! empty($return)) {
- return ' ' . trim($return);
- }
- return '';
- }
-
- /**
- * Convert HTML entities based on the current character set.
- *
- * @param String
- * @return String
- */
- function processEntitiesForNodeValue($node)
- {
- if (function_exists('iconv')) {
- $current_encoding = $node->ownerDocument->encoding;
- $value = iconv($current_encoding, 'UTF-8', $node->nodeValue);
- } else if ($current_encoding == 'iso-8859-1') {
- $value = utf8_encode($node->nodeValue);
- } else {
- $value = $node->nodeValue;
- }
-
- $decoded = html_entity_decode($value, NULL, 'UTF-8');
- return htmlentities($decoded, NULL, 'UTF-8');
- }
-
- /**
- * Part of our xml:base processing code
- *
- * We need a couple of methods to access XHTML content stored in feeds.
- * This is because we dereference all xml:base references before returning
- * the element. This method recurs through the tree descending from the node
- * and builds our string.
- *
- * @param DOMElement $node The DOM node we are processing
- * @return string
- */
- function traverseNode($node)
- {
- $content = '';
-
- /* Add the opening of this node to the content */
- if ($node instanceof DOMElement) {
- $content .= '<' . $node->tagName .
- $this->processXHTMLAttributes($node) . '>';
- }
-
- /* Process children */
- if ($node->hasChildNodes()) {
- foreach ($node->childNodes as $child) {
- $content .= $this->traverseNode($child);
- }
- }
-
- if ($node instanceof DOMText) {
- $content .= $this->processEntitiesForNodeValue($node);
- }
-
- /* Add the closing of this node to the content */
- if ($node instanceof DOMElement) {
- $content .= '</' . $node->tagName . '>';
- }
-
- return $content;
- }
-
- /**
- * Get content from RSS feeds (atom has its own implementation)
- *
- * The official way to include full content in an RSS1 entry is to use
- * the content module's element 'encoded', and RSS2 feeds often duplicate that.
- * Often, however, the 'description' element is used instead. We will offer that
- * as a fallback. Atom uses its own approach and overrides this method.
- *
- * @return string|false
- */
- protected function getContent()
- {
- $options = array('encoded', 'description');
- foreach ($options as $element) {
- $test = $this->model->getElementsByTagName($element);
- if ($test->length == 0) {
- continue;
- }
- if ($test->item(0)->hasChildNodes()) {
- $value = '';
- foreach ($test->item(0)->childNodes as $child) {
- if ($child instanceof DOMText) {
- $value .= $child->nodeValue;
- } else {
- $simple = simplexml_import_dom($child);
- $value .= $simple->asXML();
- }
- }
- return $value;
- } else if ($test->length > 0) {
- return $test->item(0)->nodeValue;
- }
- }
- return false;
- }
-
- /**
- * Checks if this element has a particular child element.
- *
- * @param String
- * @param Integer
- * @return bool
- **/
- function hasKey($name, $offset = 0)
- {
- $search = $this->model->getElementsByTagName($name);
- return $search->length > $offset;
- }
-
- /**
- * Return an XML serialization of the feed, should it be required. Most
- * users however, will already have a serialization that they used when
- * instantiating the object.
- *
- * @return string XML serialization of element
- */
- function __toString()
- {
- $simple = simplexml_import_dom($this->model);
- return $simple->asXML();
- }
-
- /**
- * Get directory holding RNG schemas. Method is based on that
- * found in Contact_AddressBook.
- *
- * @return string PEAR data directory.
- * @access public
- * @static
- */
- static function getSchemaDir()
- {
- require_once 'PEAR/Config.php';
- $config = new PEAR_Config;
- return $config->get('data_dir') . '/XML_Feed_Parser/schemas';
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml
deleted file mode 100755
index 02e1c5800..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/atom10-entryonly.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<entry xmlns="http://www.w3.org/2005/Atom">
- <title>Atom draft-07 snapshot</title>
- <link rel="alternate" type="text/html"
- href="http://example.org/2005/04/02/atom"/>
- <link rel='enclosure' type="audio/mpeg" length="1337"
- href="http://example.org/audio/ph34r_my_podcast.mp3"/>
- <id>tag:example.org,2003:3.2397</id>
- <updated>2005-07-10T12:29:29Z</updated>
- <published>2003-12-13T08:29:29-04:00</published>
- <author>
- <name>Mark Pilgrim</name>
- <uri>http://example.org/</uri>
- <email>f8dy@example.com</email>
- </author>
- <contributor>
- <name>Sam Ruby</name>
- </contributor>
- <contributor>
- <name>Joe Gregorio</name>
- </contributor>
- <content type="xhtml" xml:lang="en"
- xml:base="http://diveintomark.org/">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <p><i>[Update: The Atom draft is finished.]</i></p>
- </div>
- </content>
- </entry> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml
deleted file mode 100755
index d181d2b6f..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example1.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
-
- <title>Example Feed</title>
- <link href="http://example.org/"/>
- <updated>2003-12-13T18:30:02Z</updated>
- <author>
- <name>John Doe</name>
- </author>
- <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
-
- <entry>
- <title>Atom-Powered Robots Run Amok</title>
- <link href="http://example.org/2003/12/13/atom03"/>
- <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
- <updated>2003-12-13T18:30:02Z</updated>
- <summary>Some text.</summary>
- </entry>
-
-</feed> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml
deleted file mode 100755
index 98abf9d54..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/atom10-example2.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
- <feed xmlns="http://www.w3.org/2005/Atom">
- <title type="text">dive into mark</title>
- <subtitle type="html">
- A &lt;em&gt;lot&lt;/em&gt; of effort
- went into making this effortless
- </subtitle>
- <updated>2005-07-31T12:29:29Z</updated>
- <id>tag:example.org,2003:3</id>
- <link rel="alternate" type="text/html"
- hreflang="en" href="http://example.org/"/>
- <link rel="self" type="application/atom+xml"
- href="http://example.org/feed.atom"/>
- <rights>Copyright (c) 2003, Mark Pilgrim</rights>
- <generator uri="http://www.example.com/" version="1.0">
- Example Toolkit
- </generator>
- <entry>
- <title>Atom draft-07 snapshot</title>
- <link rel="alternate" type="text/html"
- href="http://example.org/2005/04/02/atom"/>
- <link rel='enclosure' type="audio/mpeg" length="1337"
- href="http://example.org/audio/ph34r_my_podcast.mp3"/>
- <id>tag:example.org,2003:3.2397</id>
- <updated>2005-07-31T12:29:29Z</updated>
- <published>2003-12-13T08:29:29-04:00</published>
- <author>
- <name>Mark Pilgrim</name>
- <uri>http://example.org/</uri>
- <email>f8dy@example.com</email>
- </author>
- <contributor>
- <name>Sam Ruby</name>
- </contributor>
- <contributor>
- <name>Joe Gregorio</name>
- </contributor>
- <content type="xhtml" xml:lang="en"
- xml:base="http://diveintomark.org/">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <p><i>[Update: The Atom draft is finished.]</i></p>
- </div>
- </content>
- </entry>
- </feed> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed b/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed
deleted file mode 100755
index 32f9fa493..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/delicious.feed
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns="http://purl.org/rss/1.0/"
- xmlns:cc="http://web.resource.org/cc/"
- xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
- xmlns:admin="http://webns.net/mvcb/"
->
-<channel rdf:about="http://del.icio.us/tag/greenbelt">
-<title>del.icio.us/tag/greenbelt</title>
-<link>http://del.icio.us/tag/greenbelt</link>
-<description>Text</description>
-<items>
- <rdf:Seq>
- <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
- <rdf:li rdf:resource="http://www.greenbelt.org.uk/" />
- <rdf:li rdf:resource="http://www.natuerlichwien.at/rundumadum/dergruenguertel/" />
- <rdf:li rdf:resource="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars" />
- <rdf:li rdf:resource="http://www.greenbelt.ca/home.htm" />
- <rdf:li rdf:resource="http://pipwilsonbhp.blogspot.com/" />
- <rdf:li rdf:resource="http://maggidawn.typepad.com/maggidawn/" />
- <rdf:li rdf:resource="http://www.johndavies.org/" />
- <rdf:li rdf:resource="http://jonnybaker.blogs.com/" />
- </rdf:Seq>
-</items>
-</channel>
-
-<item rdf:about="http://www.greenbelt.org.uk/">
-<dc:title>Greenbelt - Homepage Section</dc:title>
-<link>http://www.greenbelt.org.uk/</link>
-<dc:creator>jonnybaker</dc:creator>
-<dc:date>2005-05-16T16:30:38Z</dc:date>
-<dc:subject>greenbelt</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/greenbelt" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.greenbelt.org.uk/">
-<title>Greenbelt festival (uk)</title>
-<link>http://www.greenbelt.org.uk/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2005-05-14T18:19:40Z</dc:date>
-<dc:subject>audiology festival gigs greenbelt</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/gigs" />
- <rdf:li resource="http://del.icio.us/tag/audiology" />
- <rdf:li resource="http://del.icio.us/tag/festival" />
- <rdf:li resource="http://del.icio.us/tag/greenbelt" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.natuerlichwien.at/rundumadum/dergruenguertel/">
-<title>Natuerlichwien.at - Rundumadum</title>
-<link>http://www.natuerlichwien.at/rundumadum/dergruenguertel/</link>
-<dc:creator>egmilman47</dc:creator>
-<dc:date>2005-05-06T21:33:41Z</dc:date>
-<dc:subject>Austria Vienna Wien greenbelt nature walking</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/Vienna" />
- <rdf:li resource="http://del.icio.us/tag/Wien" />
- <rdf:li resource="http://del.icio.us/tag/Austria" />
- <rdf:li resource="http://del.icio.us/tag/walking" />
- <rdf:li resource="http://del.icio.us/tag/nature" />
- <rdf:li resource="http://del.icio.us/tag/greenbelt" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars">
-<title>Tank - GBMediaWiki</title>
-<link>http://www.flickerweb.co.uk/wiki/index.php/Tank#Seminars</link>
-<dc:creator>jystewart</dc:creator>
-<dc:date>2005-03-21T22:44:11Z</dc:date>
-<dc:subject>greenbelt</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/greenbelt" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.greenbelt.ca/home.htm">
-<title>Greenbelt homepage</title>
-<link>http://www.greenbelt.ca/home.htm</link>
-<dc:creator>Gooberoo</dc:creator>
-<dc:date>2005-03-01T22:43:17Z</dc:date>
-<dc:subject>greenbelt ontario</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/ontario" />
- <rdf:li resource="http://del.icio.us/tag/greenbelt" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://pipwilsonbhp.blogspot.com/">
-<title>Pip Wilson bhp ...... blog</title>
-<link>http://pipwilsonbhp.blogspot.com/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:20:51Z</dc:date>
-<dc:subject>Greenbelt friend ideas links thinking weblog</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
- <rdf:li resource="http://del.icio.us/tag/thinking" />
- <rdf:li resource="http://del.icio.us/tag/ideas" />
- <rdf:li resource="http://del.icio.us/tag/links" />
- <rdf:li resource="http://del.icio.us/tag/friend" />
- <rdf:li resource="http://del.icio.us/tag/weblog" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://maggidawn.typepad.com/maggidawn/">
-<title>maggi dawn</title>
-<link>http://maggidawn.typepad.com/maggidawn/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:20:11Z</dc:date>
-<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
- <rdf:li resource="http://del.icio.us/tag/thinking" />
- <rdf:li resource="http://del.icio.us/tag/ideas" />
- <rdf:li resource="http://del.icio.us/tag/links" />
- <rdf:li resource="http://del.icio.us/tag/weblog" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://www.johndavies.org/">
-<title>John Davies</title>
-<link>http://www.johndavies.org/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:18:37Z</dc:date>
-<dc:subject>Greenbelt ideas links thinking weblog</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
- <rdf:li resource="http://del.icio.us/tag/thinking" />
- <rdf:li resource="http://del.icio.us/tag/ideas" />
- <rdf:li resource="http://del.icio.us/tag/links" />
- <rdf:li resource="http://del.icio.us/tag/weblog" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-<item rdf:about="http://jonnybaker.blogs.com/">
-<title>jonnybaker</title>
-<link>http://jonnybaker.blogs.com/</link>
-<dc:creator>sssshhhh</dc:creator>
-<dc:date>2004-12-27T11:18:17Z</dc:date>
-<dc:subject>Greenbelt event ideas links resources thinking weblog youth</dc:subject>
-<taxo:topics>
- <rdf:Bag>
- <rdf:li resource="http://del.icio.us/tag/Greenbelt" />
- <rdf:li resource="http://del.icio.us/tag/thinking" />
- <rdf:li resource="http://del.icio.us/tag/ideas" />
- <rdf:li resource="http://del.icio.us/tag/links" />
- <rdf:li resource="http://del.icio.us/tag/weblog" />
- <rdf:li resource="http://del.icio.us/tag/youth" />
- <rdf:li resource="http://del.icio.us/tag/event" />
- <rdf:li resource="http://del.icio.us/tag/resources" />
- </rdf:Bag>
-</taxo:topics>
-</item>
-
-</rdf:RDF>
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed b/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed
deleted file mode 100755
index 57e83af57..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/flickr.feed
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<feed version="0.3" xmlns="http://purl.org/atom/ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
-
- <title>jamesstewart - Everyone's Tagged Photos</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/tags/jamesstewart/"/>
- <link rel="icon" type="image/jpeg" href="http://www.flickr.com/images/buddyicon.jpg"/>
- <info type="text/html" mode="escaped">A feed of jamesstewart - Everyone's Tagged Photos</info>
- <modified>2005-08-01T18:50:26Z</modified>
- <generator url="http://www.flickr.com/">Flickr</generator>
-
- <entry>
- <title>Oma and James</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/30484029@N00/30367516/"/>
- <link rel='enclosure' type="application/xml" href="http://james.anthropiccollective.org" />
- <id>tag:flickr.com,2004:/photo/30367516</id>
- <issued>2005-08-01T18:50:26Z</issued>
- <modified>2005-08-01T18:50:26Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/30484029@N00/&quot;&gt;kstewart&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/30484029@N00/30367516/&quot; title=&quot;Oma and James&quot;&gt;&lt;img src=&quot;http://photos23.flickr.com/30367516_1f685a16e8_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Oma and James&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-&lt;p&gt;I have a beautiful Oma and a gorgeous husband.&lt;/p&gt;</content>
- <author>
- <name>kstewart</name>
- <url>http://www.flickr.com/people/30484029@N00/</url>
- </author>
- <dc:subject>jamesstewart oma stoelfamily</dc:subject>
- </entry>
- <entry>
- <title></title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21376174/"/>
- <id>tag:flickr.com,2004:/photo/21376174</id>
- <issued>2005-06-25T02:00:35Z</issued>
- <modified>2005-06-25T02:00:35Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21376174/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos17.flickr.com/21376174_4314fd8d5c_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-&lt;p&gt;AMA Motocross Championship 2005, Budds Creek, Maryland&lt;/p&gt;</content>
- <author>
- <name>Lan Rover</name>
- <url>http://www.flickr.com/people/buddscreek/</url>
- </author>
- <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational rickycarmichael 259 jamesstewart 4</dc:subject>
- </entry>
- <entry>
- <title></title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375650/"/>
- <id>tag:flickr.com,2004:/photo/21375650</id>
- <issued>2005-06-25T01:56:24Z</issued>
- <modified>2005-06-25T01:56:24Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375650/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos16.flickr.com/21375650_5c60e0dab1_m.jpg&quot; width=&quot;240&quot; height=&quot;160&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>Lan Rover</name>
- <url>http://www.flickr.com/people/buddscreek/</url>
- </author>
- <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>
- </entry>
- <entry>
- <title></title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/buddscreek/21375345/"/>
- <id>tag:flickr.com,2004:/photo/21375345</id>
- <issued>2005-06-25T01:54:11Z</issued>
- <modified>2005-06-25T01:54:11Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/buddscreek/&quot;&gt;Lan Rover&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/buddscreek/21375345/&quot; title=&quot;&quot;&gt;&lt;img src=&quot;http://photos15.flickr.com/21375345_4205fdd22b_m.jpg&quot; width=&quot;160&quot; height=&quot;240&quot; alt=&quot;&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>Lan Rover</name>
- <url>http://www.flickr.com/people/buddscreek/</url>
- </author>
- <dc:subject>amamotocrosschampionship buddscreek maryland 2005 fathersday motocrossnational 259 jamesstewart</dc:subject>
- </entry>
- <entry>
- <title>Lunch with Kari &amp; James, café in the crypt of St Martin in the fields</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/16516618/"/>
- <id>tag:flickr.com,2004:/photo/16516618</id>
- <issued>2005-05-30T21:56:39Z</issued>
- <modified>2005-05-30T21:56:39Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/16516618/&quot; title=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot;&gt;&lt;img src=&quot;http://photos14.flickr.com/16516618_afaa4a395e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Lunch with Kari &amp;amp; James, café in the crypt of St Martin in the fields&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>fidothe</name>
- <url>http://www.flickr.com/people/fidothe/</url>
- </author>
- <dc:subject>nokia7610 london stmartininthefields clarepatterson jamesstewart parvinstewart jimstewart susanstewart</dc:subject>
- </entry>
- <entry>
- <title>Stewart keeping it low over the obstacle.</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/pqbon/10224728/"/>
- <id>tag:flickr.com,2004:/photo/10224728</id>
- <issued>2005-04-21T07:30:29Z</issued>
- <modified>2005-04-21T07:30:29Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/pqbon/&quot;&gt;pqbon&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/pqbon/10224728/&quot; title=&quot;Stewart keeping it low over the obstacle.&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/10224728_b756341957_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;Stewart keeping it low over the obstacle.&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>pqbon</name>
- <url>http://www.flickr.com/people/pqbon/</url>
- </author>
- <dc:subject>ama hangtown motocross jamesstewart bubba</dc:subject>
- </entry>
- <entry>
- <title>king james stewart</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/jjlook/7152910/"/>
- <id>tag:flickr.com,2004:/photo/7152910</id>
- <issued>2005-03-22T21:53:37Z</issued>
- <modified>2005-03-22T21:53:37Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/jjlook/&quot;&gt;jj look&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/jjlook/7152910/&quot; title=&quot;king james stewart&quot;&gt;&lt;img src=&quot;http://photos7.flickr.com/7152910_a02ab5a750_m.jpg&quot; width=&quot;180&quot; height=&quot;240&quot; alt=&quot;king james stewart&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-&lt;p&gt;11th&lt;/p&gt;</content>
- <author>
- <name>jj look</name>
- <url>http://www.flickr.com/people/jjlook/</url>
- </author>
- <dc:subject>dilomar05 eastside austin texas 78702 kingjames stewart jamesstewart borrowed</dc:subject>
- </entry>
- <entry>
- <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586562/"/>
- <id>tag:flickr.com,2004:/photo/1586562</id>
- <issued>2004-11-20T09:34:28Z</issued>
- <modified>2004-11-20T09:34:28Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586562/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586562_0bc5313a3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>fidothe</name>
- <url>http://www.flickr.com/people/fidothe/</url>
- </author>
- <dc:subject>holiday grandrapids jamesstewart</dc:subject>
- </entry>
- <entry>
- <title>It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586539/"/>
- <id>tag:flickr.com,2004:/photo/1586539</id>
- <issued>2004-11-20T09:28:16Z</issued>
- <modified>2004-11-20T09:28:16Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586539/&quot; title=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586539_c51e5f2e7a_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, downtown Grand Rapids (James, Susan, Jim, Harv, Lawson)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>fidothe</name>
- <url>http://www.flickr.com/people/fidothe/</url>
- </author>
- <dc:subject>holiday grandrapids jamesstewart</dc:subject>
- </entry>
- <entry>
- <title>It's a Grind, James and Jim can't decide)</title>
- <link rel="alternate" type="text/html" href="http://www.flickr.com/photos/fidothe/1586514/"/>
- <id>tag:flickr.com,2004:/photo/1586514</id>
- <issued>2004-11-20T09:25:05Z</issued>
- <modified>2004-11-20T09:25:05Z</modified>
- <content type="text/html" mode="escaped">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/fidothe/&quot;&gt;fidothe&lt;/a&gt; posted a photo:&lt;/p&gt;
-
-&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/fidothe/1586514/&quot; title=&quot;It's a Grind, James and Jim can't decide)&quot;&gt;&lt;img src=&quot;http://photos2.flickr.com/1586514_733c2dfa3e_m.jpg&quot; width=&quot;240&quot; height=&quot;180&quot; alt=&quot;It's a Grind, James and Jim can't decide)&quot; style=&quot;border: 1px solid #000000;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
-
-</content>
- <author>
- <name>fidothe</name>
- <url>http://www.flickr.com/people/fidothe/</url>
- </author>
- <dc:subject>holiday grandrapids jamesstewart johnkentish</dc:subject>
- </entry>
-
-</feed> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml b/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml
deleted file mode 100755
index c351d3c16..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/grwifi-atom.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"> <title>Updates to Grand Rapids WiFi hotspot details</title> <link rel="alternate" type="text/html" href="http://grwifi.net/"/> <link rel="self" type="application/atom+xml" href="http://grwifi.net/atom/locations"/> <updated>2005-09-01T15:43:01-05:00</updated> <subtitle>WiFi Hotspots in Grand Rapids, MI</subtitle> <id>http://grwifi.net/atom/locations</id> <rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ </rights> <entry> <title>Hotspot Details Updated: Sweetwaters</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/sweetwaters"/> <id>http://grwifi.net/location/sweetwaters</id> <updated>2005-09-01T15:43:01-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: Sweetwaters have been updated. Find out more at:
-http://grwifi.net/location/sweetwaters </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> <entry> <title>Hotspot Details Updated: Common Ground Coffee Shop</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/common-ground"/> <id>http://grwifi.net/location/common-ground</id> <updated>2005-09-01T15:42:39-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: Common Ground Coffee Shop have been updated. Find out more at:
-http://grwifi.net/location/common-ground </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> <entry> <title>Hotspot Details Updated: Grand Rapids Public Library, Main Branch</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/grpl-main-branch"/> <id>http://grwifi.net/location/grpl-main-branch</id> <updated>2005-09-01T15:42:20-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: Grand Rapids Public Library, Main Branch have been updated. Find out more at:
-http://grwifi.net/location/grpl-main-branch </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> <entry> <title>Hotspot Details Updated: Four Friends Coffee House</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/four-friends"/> <id>http://grwifi.net/location/four-friends</id> <updated>2005-09-01T15:41:35-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: Four Friends Coffee House have been updated. Find out more at:
-http://grwifi.net/location/four-friends </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> <entry> <title>Hotspot Details Updated: Barnes and Noble, Rivertown Crossings</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/barnes-noble-rivertown"/> <id>http://grwifi.net/location/barnes-noble-rivertown</id> <updated>2005-09-01T15:40:41-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: Barnes and Noble, Rivertown Crossings have been updated. Find out more at:
-http://grwifi.net/location/barnes-noble-rivertown </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> <entry> <title>Hotspot Details Updated: The Boss Sports Bar &amp; Grille</title> <link rel="alternate" type="text/html" href="http://grwifi.net/location/boss-sports-bar"/> <id>http://grwifi.net/location/boss-sports-bar</id> <updated>2005-09-01T15:40:19-05:00</updated> <summary type="html"> The details of the WiFi hotspot at: The Boss Sports Bar &amp; Grille have been updated. Find out more at:
-http://grwifi.net/location/boss-sports-bar </summary> <author> <name>James</name> <uri>http://jystewart.net</uri> <email>james@jystewart.net</email> </author> <dc:subject>wifi hotspot</dc:subject> </entry> </feed> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml b/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml
deleted file mode 100755
index 099463570..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/hoder.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
- xmlns:admin="http://webns.net/mvcb/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-
-<channel>
-<title>Editor: Myself (Persian)</title>
-<link>http://editormyself.info</link>
-<description>This is a Persian (Farsi) weblog, written by Hossein Derakhshan (aka, Hoder), an Iranian Multimedia designer and a journalist who lives in Toronto since Dec 2000. He also keeps an English weblog with the same name.</description>
-<dc:language>en-us</dc:language>
-<dc:creator>hoder@hotmail.com</dc:creator>
-<dc:date>2005-10-12T19:45:32-05:00</dc:date>
-<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.15" />
-<sy:updatePeriod>hourly</sy:updatePeriod>
-<sy:updateFrequency>1</sy:updateFrequency>
-<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
-
-
-<item>
-<title>لينکدونی‌ | جلسه‌ی امریکن انترپرایز برای تقسیم قومی ایران</title>
-<link>http://www.aei.org/events/type.upcoming,eventID.1166,filter.all/event_detail.asp</link>
-<description>چطور بعضی‌ها Ùکر می‌کنند دست راستی‌های آمریکا از خامنه‌ای ملی‌گراترند</description>
-<guid isPermaLink="false">14645@http://i.hoder.com/</guid>
-<dc:subject>iran</dc:subject>
-<dc:date>2005-10-12T19:45:32-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | به صبحانه آگهی بدهید</title>
-<link>http://www.adbrite.com/mb/commerce/purchase_form.php?opid=24346&amp;afsid=1</link>
-<description>خیلی ارزان و راحت است</description>
-<guid isPermaLink="false">14644@http://i.hoder.com/</guid>
-<dc:subject>media/journalism</dc:subject>
-<dc:date>2005-10-12T17:23:15-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | نیروی انتظامی چگونه تابوهای هم‌جنس‌گرایانه را می‌شکند؛ Ùرنگوپولیس</title>
-<link>http://farangeopolis.blogspot.com/2005/10/blog-post_08.html</link>
-<description>از پس و پیش و حاشیه‌ی این ماجرا می‌توان یک مستند بی‌نظیر ساخت</description>
-<guid isPermaLink="false">14643@http://i.hoder.com/</guid>
-<dc:subject>soc_popculture</dc:subject>
-<dc:date>2005-10-12T17:06:40-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | بازتاب توقی٠شد</title>
-<link>http://www.baztab.com/news/30201.php</link>
-<description>اگر Ú¯Ùتید یک وب‌سایت را چطور توقی٠می‌کنند؟ لابد ماوس‌شان را قایم می‌کنند.</description>
-<guid isPermaLink="false">14642@http://i.hoder.com/</guid>
-<dc:subject>media/journalism</dc:subject>
-<dc:date>2005-10-12T14:41:57-05:00</dc:date>
-</item>
-
-<item>
-<title>لينکدونی‌ | رشد وب در سال 2005 از همیشه بیشتر بوده است&quot; بی.بی.سی</title>
-<link>http://news.bbc.co.uk/2/hi/technology/4325918.stm</link>
-<description></description>
-<guid isPermaLink="false">14640@http://i.hoder.com/</guid>
-<dc:subject>tech</dc:subject>
-<dc:date>2005-10-12T13:04:46-05:00</dc:date>
-</item>
-
-
-
-<item>
-<title>==قرعه کشی گرین کارد به زودی شروع می‌شود==</title>
-<link>http://nice.newsxphotos.biz/05/09/2007_dv_lottery_registration_to_begin_oct_5_14589.php</link>
-<description></description>
-<guid isPermaLink="false">14613@http://vagrantly.com</guid>
-<dc:subject>ads03</dc:subject>
-<dc:date>2005-09-27T04:49:22-05:00</dc:date>
-</item>
-
-
-
-
-
-
-<item>
-<title>پروژه‌ی هاروارد، قدم دوم</title>
-<link>http://editormyself.info/archives/2005/10/051012_014641.shtml</link>
-<description><![CDATA[<p>اگر یادتان باشد <a href="/archives/2005/09/050906_014504.shtml">چند وقت پیش نوشتم</a> که دانشگاه هاروارد پروژه‌ای دارد با نام آواهای جهانی که در آن به وبلاگ‌های غیر انگلیسی‌زبان می‌پردازد. خواشتم که اگر کسی علاقه دارد ایمیل بزند. تعداد زیادی جواب دادند و ابراز علاقه کردند. حالا وقت قدم دوم است.</p>
-
-<p>قدم دوم این است که برای اینکه مسوولین پروژه بتوانند تصمیم بگیرند که با چه کسی کار کنند، می‌خواهند نمونه‌ی کارهای علاقمندان مشارکت در این پرزو‌ه را ببینند.</p>
-
-<p>برای همین از همه‌ی علاقماندان، حتی کسانی Ú©Ù‡ قبلا اعلام آمادگی نکرده بودند، می‌‌خواهم Ú©Ù‡ یک موضوع رایج این روزهای وبلاگستان Ùارسی را انتخاب کنند Ùˆ در Ù‡Ùتصد کلمه، به انگلیسی، بنویسند Ú©Ù‡ وبلاگ‌دارهای درباره‌اش Ú†Ù‡ می‌گویند. لینک به پنج، شش وبلاگ Ùˆ بازنویسی آنچه آنها از جنبه‌های گوناگون درباره‌ی آن موضوع نوشته‌اند با نقل قول مستقیم از آنها (البته ترجمه شده از Ùارسی) کاÙÛŒ است. دو سه جمله هم اول کار توضیح دهید Ú©Ù‡ چرا این موضوع مهم است.</p>
-
-<p>متن نمونه را به آدرس ایمیل من hoder@hoder.com Ùˆ نیز برای اÙراد زیر تا روز دوشنبه بÙرستید:<br />
-ربکا : rmackinnon@cyber.law.harvard.edu<br />
-هیثم: haitham.sabbah@gmail.com</p>]]></description>
-<guid isPermaLink="false">14641@http://editormyself.info</guid>
-<dc:subject>weblog</dc:subject>
-<dc:date>2005-10-12T14:04:23-05:00</dc:date>
-</item>
-
-
-
-</channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml b/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml
deleted file mode 100755
index 612186897..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/illformed_atom10.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name
-Expect: bozo and entries[0]['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
- <author>
- <name>Example author</name>
- <email>me@example.com</email>
- <uri>http://example.com/</uri>
- </author>
-</entry>
-</feed \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml
deleted file mode 100755
index b0a1fee2d..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss091-complete.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<copyright>Copyright 1997-1999 UserLand Software, Inc.</copyright>
-<pubDate>Thu, 08 Jul 1999 07:00:00 GMT</pubDate>
-<lastBuildDate>Thu, 08 Jul 1999 16:20:26 GMT</lastBuildDate>
-<docs>http://my.userland.com/stories/storyReader$11</docs>
-<description>News and commentary from the cross-platform scripting community.</description>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<image>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
-<height>40</height>
-<width>78</width>
-<description>What is this used for?</description>
-</image>
-<managingEditor>dave@userland.com (Dave Winer)</managingEditor>
-<webMaster>dave@userland.com (Dave Winer)</webMaster>
-<language>en-us</language>
-<skipHours>
-<hour>6</hour>
-<hour>7</hour>
-<hour>8</hour>
-<hour>9</hour>
-<hour>10</hour>
-<hour>11</hour>
-</skipHours>
-<skipDays>
-<day>Sunday</day>
-</skipDays>
-<rating>(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))</rating>
-<item>
-<title>stuff</title>
-<link>http://bar</link>
-<description>This is an article about some stuff</description>
-</item>
-<textinput>
-<title>Search Now!</title>
-<description>Enter your search &lt;terms&gt;</description>
-<name>find</name>
-<link>http://my.site.com/search.cgi</link>
-</textinput>
-</channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml
deleted file mode 100755
index cfe91691f..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss091-international.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="EuC-JP"?>
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<title>膮ŸÛë´é´Ì´×´è´ŒÃ¹´Õ</title>
-<link>http://www.mozilla.org</link>
-<description>膮ŸÛë´é´Ì´×´è´ŒÃ¹´Õ</description>
-<language>ja</language> <!-- tagged as Japanese content -->
-<item>
-<title>NYҙ⸻ÌêÛì15285.25´ƒ´‘ã´Û´—´Àù´ê´Ì´éÒ™Ûì¡êçÒÕ‰Ìêã</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>‚§±Çç¡ËßÛÂÒÂéøӸã˲®Ÿè†Ûèå±ÇÌ’¡Ãæ—éøë‡Ã£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>ËÜËâ€ÂïÌëȚâȆ˧æàÀ豎ˉۂâ˂åܼšÛ˜íËüËã</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-<item>
-<title>2000‚øíŠåÂâ«‘¦éÛë¹ÂÛÂçéÛ§ÛÂè†ÒæӸã̾«…æ—ÕÃéøƒ¸Ã£</title>
-<link>http://www.mozilla.org/status/</link>
-<description>This is an item description...</description>
-</item>
-</channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml
deleted file mode 100755
index f0964a227..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss091-simple.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-<channel>
-<language>en</language>
-<description>News and commentary from the cross-platform scripting community.</description>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<image>
-<link>http://www.scripting.com/</link>
-<title>Scripting News</title>
-<url>http://www.scripting.com/gifs/tinyScriptingNews.gif</url>
-</image>
-</channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml
deleted file mode 100755
index 5d75c352b..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss092-sample.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!-- RSS generation done by 'Radio UserLand' on Fri, 13 Apr 2001 19:23:02 GMT -->
-<rss version="0.92">
- <channel>
- <title>Dave Winer: Grateful Dead</title>
- <link>http://www.scripting.com/blog/categories/gratefulDead.html</link>
- <description>A high-fidelity Grateful Dead song every day. This is where we&apos;re experimenting with enclosures on RSS news items that download when you&apos;re not using your computer. If it works (it will) it will be the end of the Click-And-Wait multimedia experience on the Internet. </description>
- <lastBuildDate>Fri, 13 Apr 2001 19:23:02 GMT</lastBuildDate>
- <docs>http://backend.userland.com/rss092</docs>
- <managingEditor>dave@userland.com (Dave Winer)</managingEditor>
- <webMaster>dave@userland.com (Dave Winer)</webMaster>
- <cloud domain="data.ourfavoritesongs.com" port="80" path="/RPC2" registerProcedure="ourFavoriteSongs.rssPleaseNotify" protocol="xml-rpc"/>
- <item>
- <description>It&apos;s been a few days since I added a song to the Grateful Dead channel. Now that there are all these new Radio users, many of whom are tuned into this channel (it&apos;s #16 on the hotlist of upstreaming Radio users, there&apos;s no way of knowing how many non-upstreaming users are subscribing, have to do something about this..). Anyway, tonight&apos;s song is a live version of Weather Report Suite from Dick&apos;s Picks Volume 7. It&apos;s wistful music. Of course a beautiful song, oft-quoted here on Scripting News. &lt;i&gt;A little change, the wind and rain.&lt;/i&gt;
-</description>
- <enclosure url="http://www.scripting.com/mp3s/weatherReportDicksPicsVol7.mp3" length="6182912" type="audio/mpeg"/>
- </item>
- <item>
- <description>Kevin Drennan started a &lt;a href=&quot;http://deadend.editthispage.com/&quot;&gt;Grateful Dead Weblog&lt;/a&gt;. Hey it&apos;s cool, he even has a &lt;a href=&quot;http://deadend.editthispage.com/directory/61&quot;&gt;directory&lt;/a&gt;. &lt;i&gt;A Frontier 7 feature.&lt;/i&gt;</description>
- <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
- </item>
- <item>
- <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/other1.html&quot;&gt;The Other One&lt;/a&gt;, live instrumental, One From The Vault. Very rhythmic very spacy, you can listen to it many times, and enjoy something new every time.</description>
- <enclosure url="http://www.scripting.com/mp3s/theOtherOne.mp3" length="6666097" type="audio/mpeg"/>
- </item>
- <item>
- <description>This is a test of a change I just made. Still diggin..</description>
- </item>
- <item>
- <description>The HTML rendering almost &lt;a href=&quot;http://validator.w3.org/check/referer&quot;&gt;validates&lt;/a&gt;. Close. Hey I wonder if anyone has ever published a style guide for ALT attributes on images? What are you supposed to say in the ALT attribute? I sure don&apos;t know. If you&apos;re blind send me an email if u cn rd ths. </description>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Franklin&apos;s_Tower.txt&quot;&gt;Franklin&apos;s Tower&lt;/a&gt;, a live version from One From The Vault.</description>
- <enclosure url="http://www.scripting.com/mp3s/franklinsTower.mp3" length="6701402" type="audio/mpeg"/>
- </item>
- <item>
- <description>Moshe Weitzman says Shakedown Street is what I&apos;m lookin for for tonight. I&apos;m listening right now. It&apos;s one of my favorites. &quot;Don&apos;t tell me this town ain&apos;t got no heart.&quot; Too bright. I like the jazziness of Weather Report Suite. Dreamy and soft. How about The Other One? &quot;Spanish lady come to me..&quot;</description>
- <source url="http://scriptingnews.userland.com/xml/scriptingNews2.xml">Scripting News</source>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.scripting.com/mp3s/youWinAgain.mp3&quot;&gt;The news is out&lt;/a&gt;, all over town..&lt;p&gt;
-You&apos;ve been seen, out runnin round. &lt;p&gt;
-The lyrics are &lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/You_Win_Again.txt&quot;&gt;here&lt;/a&gt;, short and sweet. &lt;p&gt;
-&lt;i&gt;You win again!&lt;/i&gt;
-</description>
- <enclosure url="http://www.scripting.com/mp3s/youWinAgain.mp3" length="3874816" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.getlyrics.com/lyrics/grateful-dead/wake-of-the-flood/07.htm&quot;&gt;Weather Report Suite&lt;/a&gt;: &quot;Winter rain, now tell me why, summers fade, and roses die? The answer came. The wind and rain. Golden hills, now veiled in grey, summer leaves have blown away. Now what remains? The wind and rain.&quot;</description>
- <enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://arts.ucsc.edu/gdead/agdl/darkstar.html&quot;&gt;Dark Star&lt;/a&gt; crashes, pouring its light into ashes.</description>
- <enclosure url="http://www.scripting.com/mp3s/darkStar.mp3" length="10889216" type="audio/mpeg"/>
- </item>
- <item>
- <description>DaveNet: &lt;a href=&quot;http://davenet.userland.com/2001/01/21/theUsBlues&quot;&gt;The U.S. Blues&lt;/a&gt;.</description>
- </item>
- <item>
- <description>Still listening to the US Blues. &lt;i&gt;&quot;Wave that flag, wave it wide and high..&quot;&lt;/i&gt; Mistake made in the 60s. We gave our country to the assholes. Ah ah. Let&apos;s take it back. Hey I&apos;m still a hippie. &lt;i&gt;&quot;You could call this song The United States Blues.&quot;&lt;/i&gt;</description>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
- <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
- </item>
- <item>
- <description>Grateful Dead: &quot;Tennessee, Tennessee, ain&apos;t no place I&apos;d rather be.&quot;</description>
- <enclosure url="http://www.scripting.com/mp3s/tennesseeJed.mp3" length="3442648" type="audio/mpeg"/>
- </item>
- <item>
- <description>Ed Cone: &quot;Had a nice Deadhead experience with my wife, who never was one but gets the vibe and knows and likes a lot of the music. Somehow she made it to the age of 40 without ever hearing Wharf Rat. We drove to Jersey and back over Christmas with the live album commonly known as Skull and Roses in the CD player much of the way, and it was cool to see her discover one the band&apos;s finest moments. That song is unique and underappreciated. Fun to hear that disc again after a few years off -- you get Jerry as blues-guitar hero on Big Railroad Blues and a nice version of Bertha.&quot;</description>
- <enclosure url="http://www.scripting.com/mp3s/darkStarWharfRat.mp3" length="27503386" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/fotd.html&quot;&gt;Tonight&apos;s Song&lt;/a&gt;: &quot;If I get home before daylight I just might get some sleep tonight.&quot; </description>
- <enclosure url="http://www.scripting.com/mp3s/friendOfTheDevil.mp3" length="3219742" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://arts.ucsc.edu/GDead/AGDL/uncle.html&quot;&gt;Tonight&apos;s song&lt;/a&gt;: &quot;Come hear Uncle John&apos;s Band by the river side. Got some things to talk about here beside the rising tide.&quot;</description>
- <enclosure url="http://www.scripting.com/mp3s/uncleJohnsBand.mp3" length="4587102" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.cs.cmu.edu/~mleone/gdead/dead-lyrics/Me_and_My_Uncle.txt&quot;&gt;Me and My Uncle&lt;/a&gt;: &quot;I loved my uncle, God rest his soul, taught me good, Lord, taught me all I know. Taught me so well, I grabbed that gold and I left his dead ass there by the side of the road.&quot;
-</description>
- <enclosure url="http://www.scripting.com/mp3s/meAndMyUncle.mp3" length="2949248" type="audio/mpeg"/>
- </item>
- <item>
- <description>Truckin, like the doo-dah man, once told me gotta play your hand. Sometimes the cards ain&apos;t worth a dime, if you don&apos;t lay em down.</description>
- <enclosure url="http://www.scripting.com/mp3s/truckin.mp3" length="4847908" type="audio/mpeg"/>
- </item>
- <item>
- <description>Two-Way-Web: &lt;a href=&quot;http://www.thetwowayweb.com/payloadsForRss&quot;&gt;Payloads for RSS&lt;/a&gt;. &quot;When I started talking with Adam late last year, he wanted me to think about high quality video on the Internet, and I totally didn&apos;t want to hear about it.&quot;</description>
- </item>
- <item>
- <description>A touch of gray, kinda suits you anyway..</description>
- <enclosure url="http://www.scripting.com/mp3s/touchOfGrey.mp3" length="5588242" type="audio/mpeg"/>
- </item>
- <item>
- <description>&lt;a href=&quot;http://www.sixties.com/html/garcia_stack_0.html&quot;&gt;&lt;img src=&quot;http://www.scripting.com/images/captainTripsSmall.gif&quot; height=&quot;51&quot; width=&quot;42&quot; border=&quot;0&quot; hspace=&quot;10&quot; vspace=&quot;10&quot; align=&quot;right&quot;&gt;&lt;/a&gt;In celebration of today&apos;s inauguration, after hearing all those great patriotic songs, America the Beautiful, even The Star Spangled Banner made my eyes mist up. It made my choice of Grateful Dead song of the night realllly easy. Here are the &lt;a href=&quot;http://searchlyrics2.homestead.com/gd_usblues.html&quot;&gt;lyrics&lt;/a&gt;. Click on the audio icon to the left to give it a listen. &quot;Red and white, blue suede shoes, I&apos;m Uncle Sam, how do you do?&quot; It&apos;s a different kind of patriotic music, but man I love my country and I love Jerry and the band. &lt;i&gt;I truly do!&lt;/i&gt;</description>
- <enclosure url="http://www.scripting.com/mp3s/usBlues.mp3" length="5272510" type="audio/mpeg"/>
- </item>
- </channel>
- </rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml
deleted file mode 100755
index 0edecf58e..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example1.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-
-<rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns="http://purl.org/rss/1.0/"
->
-
- <channel rdf:about="http://www.xml.com/xml/news.rss">
- <title>XML.com</title>
- <link>http://xml.com/pub</link>
- <description>
- XML.com features a rich mix of information and services
- for the XML community.
- </description>
-
- <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
-
- <items>
- <rdf:Seq>
- <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
- <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
- </rdf:Seq>
- </items>
-
- <textinput rdf:resource="http://search.xml.com" />
-
- </channel>
-
- <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
- <title>XML.com</title>
- <link>http://www.xml.com</link>
- <url>http://xml.com/universal/images/xml_tiny.gif</url>
- </image>
-
- <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
- <title>Processing Inclusions with XSLT</title>
- <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
- <description>
- Processing document inclusions with general XML tools can be
- problematic. This article proposes a way of preserving inclusion
- information through SAX-based processing.
- </description>
- </item>
-
- <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
- <title>Putting RDF to Work</title>
- <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
- <description>
- Tool and API support for the Resource Description Framework
- is slowly coming of age. Edd Dumbill takes a look at RDFDB,
- one of the most exciting new RDF toolkits.
- </description>
- </item>
-
- <textinput rdf:about="http://search.xml.com">
- <title>Search XML.com</title>
- <description>Search XML.com's XML collection</description>
- <name>s</name>
- <link>http://search.xml.com</link>
- </textinput>
-
-</rdf:RDF> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml
deleted file mode 100755
index 26235f78f..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss10-example2.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
- xmlns:co="http://purl.org/rss/1.0/modules/company/"
- xmlns:ti="http://purl.org/rss/1.0/modules/textinput/"
- xmlns="http://purl.org/rss/1.0/"
->
-
- <channel rdf:about="http://meerkat.oreillynet.com/?_fl=rss1.0">
- <title>Meerkat</title>
- <link>http://meerkat.oreillynet.com</link>
- <description>Meerkat: An Open Wire Service</description>
- <dc:publisher>The O'Reilly Network</dc:publisher>
- <dc:creator>Rael Dornfest (mailto:rael@oreilly.com)</dc:creator>
- <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
- <dc:date>2000-01-01T12:00+00:00</dc:date>
- <sy:updatePeriod>hourly</sy:updatePeriod>
- <sy:updateFrequency>2</sy:updateFrequency>
- <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
-
- <image rdf:resource="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg" />
-
- <items>
- <rdf:Seq>
- <rdf:li resource="http://c.moreover.com/click/here.pl?r123" />
- </rdf:Seq>
- </items>
-
- <textinput rdf:resource="http://meerkat.oreillynet.com" />
-
- </channel>
-
- <image rdf:about="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg">
- <title>Meerkat Powered!</title>
- <url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg</url>
- <link>http://meerkat.oreillynet.com</link>
- </image>
-
- <item rdf:about="http://c.moreover.com/click/here.pl?r123">
- <title>XML: A Disruptive Technology</title>
- <link>http://c.moreover.com/click/here.pl?r123</link>
- <dc:description>
- XML is placing increasingly heavy loads on the existing technical
- infrastructure of the Internet.
- </dc:description>
- <dc:publisher>The O'Reilly Network</dc:publisher>
- <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</dc:creator>
- <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, Inc.</dc:rights>
- <dc:subject>XML</dc:subject>
- <co:name>XML.com</co:name>
- <co:market>NASDAQ</co:market>
- <co:symbol>XML</co:symbol>
- </item>
-
- <textinput rdf:about="http://meerkat.oreillynet.com">
- <title>Search Meerkat</title>
- <description>Search Meerkat's RSS Database...</description>
- <name>s</name>
- <link>http://meerkat.oreillynet.com/</link>
- <ti:function>search</ti:function>
- <ti:inputType>regex</ti:inputType>
- </textinput>
-
-</rdf:RDF> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml b/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml
deleted file mode 100755
index 53483cc51..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/rss2sample.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0.modules/content/">
- <channel>
- <title>Liftoff News</title>
- <link>http://liftoff.msfc.nasa.gov/</link>
- <description>Liftoff to Space Exploration.</description>
- <language>en-us</language>
- <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
- <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
- <docs>http://blogs.law.harvard.edu/tech/rss</docs>
- <generator>Weblog Editor 2.0</generator>
- <managingEditor>editor@example.com</managingEditor>
- <webMaster>webmaster@example.com</webMaster>
- <item>
- <title>Star City</title>
- <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
- <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description>
- <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
- <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
- </item>
- <item>
- <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a &lt;a href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm"&gt;partial eclipse of the Sun&lt;/a&gt; on Saturday, May 31st.</description>
- <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
- <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
- </item>
- <item>
- <title>The Engine That Does More</title>
- <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
- <description>Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.</description>
- <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
- <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
- <content:encoded><![CDATA[<p>Test content</p>]]></content:encoded>
- </item>
- <item>
- <title>Astronauts' Dirty Laundry</title>
- <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
- <description>Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.</description>
- <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
- <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
- </item>
- </channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml b/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml
deleted file mode 100755
index f8a04bba5..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/sixapart-jp.xml
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0">
-<channel>
-<title>Six Apart - News</title>
-<link>http://www.sixapart.jp/</link>
-<description></description>
-<language>ja</language>
-<copyright>Copyright 2005</copyright>
-<lastBuildDate>Fri, 07 Oct 2005 19:09:34 +0900</lastBuildDate>
-<generator>http://www.movabletype.org/?v=3.2-ja</generator>
-<docs>http://blogs.law.harvard.edu/tech/rss</docs>
-
-<item>
-<title>ファイブ・ディーãŒã€Movable Typeã§ãƒ–ログプロモーションをスタート</title>
-<description><![CDATA[<p><img alt="MIYAZAWAblog_banner.jpg" src="http://www.sixapart.jp/MIYAZAWAblog_banner.jpg" width="200" height="88" align="right" /><br />
-ファイブ・ディーã¯ã€Movable Typeã§æ§‹ç¯‰ã—ãŸãƒ—ロモーション ãƒ–ãƒ­ã‚°ã€Žå®®æ²¢å’Œå² ä¸­å—米ツアーblog Latin America 2005ã€ã‚’開設ã—ã¾ã—ãŸã€‚</p>
-
-<p>9月21æ—¥ã«é–‹è¨­ã•ã‚ŒãŸã“ã®ãƒ–ログã¯ã€ãƒ–ラジルã€ãƒ›ãƒ³ã‚¸ãƒ¥ãƒ©ã‚¹ã€ãƒ‹ã‚«ãƒ©ã‚°ã‚¢ã€ãƒ¡ã‚­ã‚·ã‚³ã€ã‚­ãƒ¥ãƒ¼ãƒã®5ã‹å›½ã‚’巡る「Latin America 2005ã€ãƒ„アーã«åˆã‚ã›ã€ãã®ãƒ„アーã®æ¨¡æ§˜ã‚’åŒè¡Œãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒãƒ¬ãƒãƒ¼ãƒˆã—ã¦ã„ãã¾ã™ã€‚<br />
-ã•ã‚‰ã«ä»Šæœˆ2æ—¥ã‹ã‚‰ã¯å®®æ²¢å’Œå²è‡ªèº«ãŒæ—¥ã€…録音ã—ãŸå£°ã‚’Podcastingã™ã‚‹ã¨ã„ã†ç‚¹ã§ã‚‚ã€ãƒ–ログを使ã£ãŸãƒ¦ãƒ‹ãƒ¼ã‚¯ãªãƒ—ロモーションã¨ãªã£ã¦ã„ã¾ã™ã€‚</p>
-
-<p><a href="http://www.five-d.co.jp/miyazawa/jp/blog/la2005/">ã€Œå®®æ²¢å’Œå² ä¸­å—米ツアーblog Latin America 2005ã€</a></p>
-
-<p>※シックス・アパートã§ã¯ã“ã†ã—ãŸãƒ–ログを使ã£ãŸãƒ—ロモーションã«æœ€é©ãªè£½å“ã‚’ã”用æ„ã—ã¦ãŠã‚Šã¾ã™ã€‚<br />
-<ul><li><a href="/movabletype/">Movable Type</a><br />
-<li><a href="/typepad/typepad_promotion.html">TypePad Promotion</a><br />
-</ul></p>]]></description>
-<link>http://www.sixapart.jp/news/2005/10/07-1909.html</link>
-<guid>http://www.sixapart.jp/news/2005/10/07-1909.html</guid>
-<category>news</category>
-<pubDate>Fri, 07 Oct 2005 19:09:34 +0900</pubDate>
-</item>
-<item>
-<title>Movable Type 3.2日本語版ã®æ供を開始</title>
-<description><![CDATA[<p><img alt="Movable Type Logo" src="/images/mt3-logo-small.gif" width="151" height="37"/></p>
-<p>シックス・アパートã¯ã€Movable Type 3.2日本語版ã®æ供を開始ã„ãŸã—ã¾ã—ãŸã€‚<br />
-ベータテストã«ã”å”力ã„ãŸã ã„ãŸå¤šãã®çš†æ§˜ã«ã€ã‚¹ã‚¿ãƒƒãƒ•ä¸€åŒã€å¿ƒã‹ã‚‰æ„Ÿè¬ã„ãŸã—ã¾ã™ã€‚</p>
-<p>製å“概è¦ãªã©ã€è©³ã—ãã¯<a href="http://www.sixapart.jp/press_releases/2005/09/29-1529.html" title="Six Apart - News: シックス・アパートãŒã€ã‚¹ãƒ‘ム対策強化ã®ã€ŒMovable Type 3.2 日本語版ã€ã‚’æ供開始">プレスリリース</a>ã‚’ã”å‚照下ã•ã„。</p>
-<p>ã”購入ã®ã”検討ã¯ã€<a href="http://www.sixapart.jp/movabletype/purchase-mt.html">Movable Typeã®ã”購入</a>ã‹ã‚‰ã©ã†ãžã€‚</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/29-1530.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/29-1530.html</guid>
-<category>news</category>
-<pubDate>Thu, 29 Sep 2005 15:30:00 +0900</pubDate>
-</item>
-<item>
-<title>シックス・アパートãŒã€ã‚¹ãƒ‘ム対策強化ã®ã€ŒMovable Type 3.2 日本語版ã€ã‚’æ供開始</title>
-<description><![CDATA[<p><プレスリリース資料></p>
-<ul>
- <li><a href="http://www.sixapart.jp/sixapart20050929.pdf">å°åˆ·ç”¨ï¼ˆPDF版)</a></li>
-</ul>
-<p><strong>シックス・アパートãŒã€ã‚¹ãƒ‘ム対策強化ã®ã€ŒMovable Type 3.2 日本語版ã€ã‚’æ供開始 ~ スパムã®è‡ªå‹•åˆ¤åˆ¥æ©Ÿèƒ½ã‚„新ユーザー・インターフェースã§ã€é‹ç”¨ç®¡ç†ã®æ©Ÿèƒ½ã‚’強化 ~</strong></p>
-<p>2005年9月29日<br />
-シックス・アパート株å¼ä¼šç¤¾</p>
-<p>ブログ・ソフトウェア大手ã®ã‚·ãƒƒã‚¯ã‚¹ãƒ»ã‚¢ãƒ‘ート株å¼ä¼šç¤¾ï¼ˆæœ¬ç¤¾ï¼šæ±äº¬éƒ½æ¸¯åŒºã€ä»£è¡¨å–締役:関 信浩)ã¯ã€ã€ŒMovable Type(ムーãƒãƒ–ル・タイプ) 3.2 日本語版ã€(URL:<a href="http://www.sixapart.jp/movabletype/">http://www.sixapart.jp/movabletype/</a>)ã‚’9月29日よりæ供開始ã„ãŸã—ã¾ã™ã€‚</p>]]></description>
-<link>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</link>
-<guid>http://www.sixapart.jp/press_releases/2005/09/29-1529.html</guid>
-<category>Press Releases</category>
-<pubDate>Thu, 29 Sep 2005 15:29:00 +0900</pubDate>
-</item>
-<item>
-<title>スタッフを募集ã—ã¦ã„ã¾ã™</title>
-<description><![CDATA[<p>シックス・アパートã¯Movable Typeã‚„TypePadã®é–‹ç™ºã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãªã©ã€ã‚¹ã‚¿ãƒƒãƒ•ã‚’広ã募集ã—ã¦ã„ã¾ã™ã€‚具体的ãªå‹Ÿé›†è·ç¨®ã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚</p>
-
-<ul>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0007.html">Movable Type開発エンジニア</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0004.html">TypePad開発エンジニア</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0003.html">カスタマーサãƒãƒ¼ãƒˆãƒ»ãƒ‡ã‚£ãƒ¬ã‚¯ã‚¿ãƒ¼</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0002.html">マーケティング・広報アシスタント</a></li>
-<li><a href="http://www.sixapart.jp/jobs/2005/09/13-0001.html">開発アシスタント</a></li>
-</ul>
-
-<p>拡大を続ã‘ã‚‹ã€æ—¥æœ¬ã®ãƒ–ログ市場をç©æ¥µçš„ã«ãƒªãƒ¼ãƒ‰ã™ã‚‹äººæã‚’ã€ã‚·ãƒƒã‚¯ã‚¹ãƒ»ã‚¢ãƒ‘ートã¯å‹Ÿé›†ã—ã¦ã„ã¾ã™ã€‚上記以外ã®è·ç¨®ã«ã¤ãã¾ã—ã¦ã‚‚ã€ãŠæ°—軽ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。詳ã—ã„募集è¦é …や応募方法ã«ã¤ã„ã¦ã¯ã€<a href="/jobs/">求人情報ã®ãƒšãƒ¼ã‚¸</a>ã‚’ã”覧ãã ã•ã„。<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/27-0906.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/27-0906.html</guid>
-<category>news</category>
-<pubDate>Tue, 27 Sep 2005 09:06:10 +0900</pubDate>
-</item>
-<item>
-<title>サイト接続ä¸å…·åˆã«é–¢ã™ã‚‹ãŠè©«ã³ã¨å¾©æ—§ã®ãŠçŸ¥ã‚‰ã›</title>
-<description><![CDATA[<p>9月24日(土)ã®14:45ã”ã‚ã‹ã‚‰ã€åŒæ—¥18:30ã”ã‚ã¾ã§ã€ã‚·ãƒƒã‚¯ã‚¹ãƒ»ã‚¢ãƒ‘ート社ã®ã‚¦ã‚§ãƒ–サイトãŒä¸å®‰å®šã«ãªã£ã¦ãŠã‚Šã€æ–­ç¶šçš„ã«æŽ¥ç¶šã§ããªã„ä¸å…·åˆãŒç™ºç”Ÿã—ã¦ãŠã‚Šã¾ã—ãŸã€‚ã“ã®ãŸã‚ã€ã“ã®æœŸé–“中ã«ã‚¦ã‚§ãƒ–サイトã®é–²è¦§ã‚„製å“ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚</p>
-
-<p>ãªãŠç¾åœ¨ã¯ä¸å…·åˆã¯è§£æ¶ˆã—ã¦ãŠã‚Šã¾ã™ã€‚ã¿ãªã•ã¾ã«ã”迷惑をãŠã‹ã‘ã—ãŸã“ã¨ã‚’ãŠè©«ã³ã„ãŸã—ã¾ã™ã€‚</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/26-1000.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/26-1000.html</guid>
-<category>news</category>
-<pubDate>Mon, 26 Sep 2005 10:00:56 +0900</pubDate>
-</item>
-<item>
-<title>ä¼æ¥­ãƒ–ログå‘ã‘パッケージ「TypePad Promotionã€ã‚’新発売</title>
-<description><![CDATA[<p>シックス・アパートã¯ã€ã‚¦ã‚§ãƒ–ログ・サービスTypePadã®ä¼æ¥­ãƒ–ログå‘ã‘パッケージ「TypePad Promotionã€ï¼ˆã‚¿ã‚¤ãƒ—パッド・プロモーションã®ç™ºå£²ã‚’10月下旬ã‹ã‚‰é–‹å§‹ã„ãŸã—ã¾ã™ã€‚</p>
-
-<p>詳ã—ãã¯ã€<a href="http://www.sixapart.jp/press_releases/2005/09/20-1500.html" title="プレスリリース: 「TypePad Promotionã€æ–°ç™ºå£²">プレスリリース</a>ã‚’ã”å‚照下ã•ã„。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/20-1500.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/20-1500.html</guid>
-<category>news</category>
-<pubDate>Tue, 20 Sep 2005 15:00:01 +0900</pubDate>
-</item>
-<item>
-<title>シックス・アパートãŒã€æ³•äººå‘ã‘ブログパッケージ「TypePad Promotionã€ã‚’発売</title>
-<description><![CDATA[<p><プレスリリース資料><br />
-<a href="http://www.sixapart.jp/sixapart20050920.pdf">å°åˆ·ç”¨ï¼ˆPDF版)</a></p>
-
-<p><br />
-<strong>シックス・アパートãŒã€æ³•äººå‘ã‘ブログパッケージ「TypePad Promotionã€ã‚’発売<br />
-~PR/IRサイトやキャンペーンサイトãªã©ä¼æ¥­ã®ãƒ—ロモーションニーズã«ç‰¹åŒ–~<br />
-</strong><br />
-2005年9月20日<br />
-シックス・アパート株å¼ä¼šç¤¾</p>
-
-<p>ブログ・サービス大手ã®ã‚·ãƒƒã‚¯ã‚¹ãƒ»ã‚¢ãƒ‘ート株å¼ä¼šç¤¾ï¼ˆæœ¬ç¤¾ï¼šæ±äº¬éƒ½æ¸¯åŒºã€ä»£è¡¨å–締役:関 信浩)ã¯ã€æ³•äººå‘ã‘プロモーションブログ・パッケージ「TypePad Promotion(タイプパッド・プロモーション)ã€(URL:<a href="http://www.sixapart.jp/typepad/typepad_promotion.html">http://www.sixapart.jp/typepad/typepad_promotion.html</a>)ã‚’10月下旬より販売開始ã„ãŸã—ã¾ã™ã€‚</p>]]></description>
-<link>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</link>
-<guid>http://www.sixapart.jp/press_releases/2005/09/20-1500.html</guid>
-<category>Press Releases</category>
-<pubDate>Tue, 20 Sep 2005 15:00:00 +0900</pubDate>
-</item>
-<item>
-<title>Six [days] Apart Week</title>
-<description><![CDATA[<p>本日ã€9月16æ—¥ã¯Six Apartã®å‰µæ¥­è€…ミナ・トロットã®èª•ç”Ÿæ—¥ã§ã™ã€‚<br />
-ç§ãŸã¡ã®ä¼šç¤¾ã¯ã€å‰µæ¥­è€…ã®ãƒˆãƒ­ãƒƒãƒˆå¤«å¦»ï¼ˆãƒ™ãƒ³ã¨ãƒŸãƒŠï¼‰ã®èª•ç”Ÿæ—¥ãŒã€6日離れã¦ã„ã‚‹ã“ã¨ã‹ã‚‰Six [days] Apart →Six Apartã¨ã„ã†é¢¨ã«å付ã‘られã¦ã„ã¾ã™ã€‚本日ã‹ã‚‰22æ—¥ã¾ã§ã®6日間を社åã®ç”±æ¥ã¨ãªã‚‹ã€€Six [days] Apart Weekã¨ã—ã¦ã€ç§ãŸã¡ã®ãƒ—ロダクトをã”紹介ã•ã›ã¦ã„ãŸã ãã¾ã™ã€‚</p>
-
-<p>今日ã¯ã€ãƒ–ログ・サービスã®TypePad(タイプパッド)をã”紹介ã—ã¾ã™ã€‚<br />
-<img alt="tp-logo.gif" src="http://www.sixapart.jp/tp-logo.gif" width="227" height="52" /></p>
-
-<p>TypePadã¯ã€ç±³å›½PC MAGAZINE誌ã®2003å¹´EDITOR'S CHOICE ã¨BEST OF THE YEARã«é¸ã°ã‚Œã¦ãŠã‚Šã¾ã™ã€‚<br />
-<img alt="pcmag-ad.gif" src="http://www.sixapart.jp/pcmag-ad.gif" width="297" height="100" /><br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/16-1941.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/16-1941.html</guid>
-<category>news</category>
-<pubDate>Fri, 16 Sep 2005 19:41:47 +0900</pubDate>
-</item>
-<item>
-<title>ãƒã‚¤ãƒ‘ーワークスãŒå•†ç”¨ãƒ•ã‚©ãƒ³ãƒˆã‚’利用ã§ãã‚‹Movable Typeホスティングサービスを開始</title>
-<description><![CDATA[<p>ソフト開発会社ã®<a href="http://www.hyperwrx.co.jp/">有é™ä¼šç¤¾ãƒã‚¤ãƒ‘ーワークス</a>ã¯ã€å•†ç”¨ãƒ•ã‚©ãƒ³ãƒˆãªã©å¤šå½©ãªãƒ•ã‚©ãƒ³ãƒˆã‚’ブログ上ã§åˆ©ç”¨ã§ãるブログ・サービス「<a href="http://glyph-on.jp/">Glyph-On!(グリフォン) Movable Type ホスティング サービス</a>ï½£ã®æ供を開始ã—ã¾ã—ãŸã€‚<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/14-1700.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/14-1700.html</guid>
-<category>news</category>
-<pubDate>Wed, 14 Sep 2005 17:00:00 +0900</pubDate>
-</item>
-<item>
-<title>Movable Type開発エンジニアã®å‹Ÿé›†</title>
-<description><![CDATA[<p>
-勤務形態: フルタイム<br />
-勤務地: æ±äº¬ (赤å‚)<br />
-è·ç¨®: ソフトウェア・エンジニア<br />
-è·å‹™å†…容: Movable Typeã®é–‹ç™ºæ¥­å‹™å…¨èˆ¬<br />
-募集人数: 若干å
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0007.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0007.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:07:00 +0900</pubDate>
-</item>
-<item>
-<title>TypePad開発エンジニアã®å‹Ÿé›†</title>
-<description><![CDATA[<p>
-勤務形態: フルタイム<br />
-勤務地: æ±äº¬ (赤å‚)<br />
-è·ç¨®: アプリケーション・エンジニア<br />
-è·å‹™å†…容: TypePadã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã€å‘¨è¾ºé–‹ç™º<br />
-募集人数: 若干å
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0004.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0004.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:04:00 +0900</pubDate>
-</item>
-<item>
-<title>カスタマーサãƒãƒ¼ãƒˆãƒ»ãƒ‡ã‚£ãƒ¬ã‚¯ã‚¿ãƒ¼ã®å‹Ÿé›†</title>
-<description><![CDATA[<p>勤務形態: フルタイム<br />
-勤務地: æ±äº¬ï¼ˆèµ¤å‚)<br />
-è·ç¨®: カスタマーサãƒãƒ¼ãƒˆãƒ»ãƒ‡ã‚£ãƒ¬ã‚¯ã‚¿ãƒ¼<br />
-è·å‹™å†…容: TypePadã‚„Movable Typeã®ã‚«ã‚¹ã‚¿ãƒžãƒ¼ã‚µãƒãƒ¼ãƒˆæ¥­å‹™ã®çµ±æ‹¬<br />
-募集人数: 若干å
-</p>
-]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0003.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0003.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:03:30 +0900</pubDate>
-</item>
-<item>
-<title>アルãƒã‚¤ãƒˆï¼ˆãƒžãƒ¼ã‚±ãƒ†ã‚£ãƒ³ã‚°ãƒ»åºƒå ±ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆï¼‰ã®å‹Ÿé›†</title>
-<description><![CDATA[<p>勤務形態: アルãƒã‚¤ãƒˆ<br />
-勤務地: æ±äº¬ï¼ˆæ¸¯åŒºï¼‰<br />
-è·ç¨®ï¼šãƒžãƒ¼ã‚±ãƒ†ã‚£ãƒ³ã‚°ãƒ»PRã®ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆæ¥­å‹™<br />
-募集人数: 若干å<br />
-時給:1000円~(但ã—ã€è©¦ç”¨æœŸé–“終了後ã«å¿œç›¸è«‡ï¼‰ã€‚交通費支給<br />
-時間:平日10時30分~18時30分ã¾ã§ã€‚週3日以上(応相談)<br />
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0002.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0002.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:02:00 +0900</pubDate>
-</item>
-<item>
-<title>アルãƒã‚¤ãƒˆï¼ˆé–‹ç™ºã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆï¼‰ã®å‹Ÿé›†</title>
-<description><![CDATA[<p>勤務形態: アルãƒã‚¤ãƒˆ<br />
-勤務地: æ±äº¬ï¼ˆæ¸¯åŒºï¼‰<br />
-è·ç¨®ï¼š アプリケーション開発ã®ã‚¢ã‚·ã‚¹ã‚¿ãƒ³ãƒˆæ¥­å‹™<br />
-募集人数: 若干å<br />
-時給:1000円~(但ã—ã€è©¦ç”¨æœŸé–“終了後ã«å¿œç›¸è«‡ï¼‰ã€‚交通費支給<br />
-時間:平日10時30分~18時30分ã¾ã§ã€‚週3日以上(応相談)
-</p>]]></description>
-<link>http://www.sixapart.jp/jobs/2005/09/13-0001.html</link>
-<guid>http://www.sixapart.jp/jobs/2005/09/13-0001.html</guid>
-<category>Jobs</category>
-<pubDate>Tue, 13 Sep 2005 00:01:00 +0900</pubDate>
-</item>
-<item>
-<title>TypePad Japan ãŒãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã—ã¾ã—ãŸã€‚</title>
-<description><![CDATA[<p><a href="http://www.sixapart.jp/typepad/">「TypePad Japan(タイプパッドジャパン)ã€</a>ã«ãŠã„ã¦ã€æœ¬æ—¥ã€ã€ŒTypePad 1.6 日本語版ã€ã¸ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã‚’è¡Œã„ã¾ã—ãŸã€‚最新版ã¨ãªã‚‹ã€ŒTypePad 1.6 日本語版ã€ã§ã¯ã€ãƒ–ログデザインã®æ©Ÿèƒ½å¼·åŒ–ã€ãƒãƒƒãƒ‰ã‚­ãƒ£ã‚¹ãƒ†ã‚£ãƒ³ã‚°å¯¾å¿œã€ãƒ¢ãƒ–ログ対応ã«åŠ ãˆã€ä»Šå›žæ–°ãŸã«å¤§å¹…ãªå®¹é‡ã‚¢ãƒƒãƒ—ãŒè¡Œã‚ã‚Œã¦ãŠã‚Šã¾ã™ã€‚皆様ã€æ–°ã—ããªã£ãŸ<a href="http://www.sixapart.jp/typepad/">TypePad Japan</a>ã«ã©ã†ãžã”期待ãã ã•ã„。</p>
-
-<p>ãªãŠã€TypePadã®æºå¸¯å¯¾å¿œå¼·åŒ–ã«é–¢ã—ã¾ã—ã¦ã¯ã€æœ¬æ—¥ã‚ˆã‚ŠTypePad Japanã®ãŠå®¢æ§˜ã‚’対象ã«ã‚ªãƒ¼ãƒ—ン・ベータを開始ã—ã¦ãŠã‚Šã¾ã™ã€‚</p>
-
-<p>2005å¹´9月5日発表ã®TypePad日本語版 1.6プレスリリースã¯<a href="http://www.sixapart.jp/press_releases/2005/09/05-1420.html">ã“ã¡ã‚‰</a>ã‚’ã”覧下ã•ã„。</p>]]></description>
-<link>http://www.sixapart.jp/news/2005/09/12-1953.html</link>
-<guid>http://www.sixapart.jp/news/2005/09/12-1953.html</guid>
-<category>news</category>
-<pubDate>Mon, 12 Sep 2005 19:53:07 +0900</pubDate>
-</item>
-
-
-</channel>
-</rss> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed b/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed
deleted file mode 100755
index 6274a32cd..000000000
--- a/plugins/OStatus/extlib/XML/Feed/samples/technorati.feed
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0"
- xmlns:tapi="http://api.technorati.com/dtd/tapi-002.xml">
- <channel>
- <title>[Technorati] Tag results for greenbelt</title>
- <link>http://www.technorati.com/tag/greenbelt</link>
- <description>Posts tagged with "greenbelt" on Technorati.</description>
- <pubDate>Mon, 08 Aug 2005 15:15:08 GMT</pubDate>
- <category domain="http://www.technorati.com/tag">greenbelt</category>
- <tapi:inboundblogs>2</tapi:inboundblogs>
- <tapi:inboundlinks>2</tapi:inboundlinks>
- <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
- <generator>Technorati v1.0</generator>
- <image>
- <url>http://static.technorati.com/pix/logos/logo_reverse_sm.gif</url>
- <title>Technorati logo</title>
- <link>http://www.technorati.com</link>
- </image>
- <skipHours>
- <hour>1</hour>
- <hour>7</hour>
- <hour>9</hour>
- </skipHours>
- <webMaster>support@technorati.com (Technorati Support)</webMaster>
- <docs>http://blogs.law.harvad.edu/tech/rss</docs>
- <ttl>60</ttl>
- <item>
- <title>Greenbelt</title>
- <link>http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</link>
- <description>So if the plan goes according to plan (!)... I'll be speaking at Greenbelt at these times: Slot 1...</description>
- <guid isPermaLink="true">http://maggidawn.typepad.com/maggidawn/2005/07/greenbelt.html</guid>
- <pubDate>Mon, 18 Jul 2005 02:11:42 GMT</pubDate>
- <category>James</category>
- <tapi:linkcreated>2005-07-11 02:08:12</tapi:linkcreated>
- <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fmaggidawn.typepad.com%2Fmaggidawn%2F2005%2F07%2Fgreenbelt.html</comments>
- <tapi:inboundblogs>190</tapi:inboundblogs>
- <tapi:inboundlinks>237</tapi:inboundlinks>
- <source url="http://maggidawn.typepad.com/maggidawn/index.rdf">maggi dawn</source>
- </item>
-
- <item>
- <title>Walking along the Greenbelt</title>
- <link>http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</link>
- <description>[IMG] Photo of homeless man walking near the greenbelt in Boise, Idaho Tags: photo homeless greenbelt Boise Idaho picture</description>
- <guid isPermaLink="true">http://pictureshomeless.blogspot.com/2005/06/walking-along-greenbelt.html</guid>
- <pubDate>Tue, 28 Jun 2005 01:41:24 GMT</pubDate>
- <tapi:linkcreated>2005-06-26 17:24:03</tapi:linkcreated>
- <comments>http://www.technorati.com/cosmos/search.html?url=http%3A%2F%2Fpictureshomeless.blogspot.com%2F2005%2F06%2Fwalking-along-greenbelt.html</comments>
- <tapi:inboundblogs>2</tapi:inboundblogs>
- <tapi:inboundlinks>2</tapi:inboundlinks>
- </item>
-
- </channel>
-</rss>
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc
deleted file mode 100755
index e662d2626..000000000
--- a/plugins/OStatus/extlib/XML/Feed/schemas/atom.rnc
+++ /dev/null
@@ -1,338 +0,0 @@
-# -*- rnc -*-
-# RELAX NG Compact Syntax Grammar for the
-# Atom Format Specification Version 11
-
-namespace atom = "http://www.w3.org/2005/Atom"
-namespace xhtml = "http://www.w3.org/1999/xhtml"
-namespace s = "http://www.ascc.net/xml/schematron"
-namespace local = ""
-
-start = atomFeed | atomEntry
-
-# Common attributes
-
-atomCommonAttributes =
- attribute xml:base { atomUri }?,
- attribute xml:lang { atomLanguageTag }?,
- undefinedAttribute*
-
-# Text Constructs
-
-atomPlainTextConstruct =
- atomCommonAttributes,
- attribute type { "text" | "html" }?,
- text
-
-atomXHTMLTextConstruct =
- atomCommonAttributes,
- attribute type { "xhtml" },
- xhtmlDiv
-
-atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
-
-# Person Construct
-
-atomPersonConstruct =
- atomCommonAttributes,
- (element atom:name { text }
- & element atom:uri { atomUri }?
- & element atom:email { atomEmailAddress }?
- & extensionElement*)
-
-# Date Construct
-
-atomDateConstruct =
- atomCommonAttributes,
- xsd:dateTime
-
-# atom:feed
-
-atomFeed =
- [
- s:rule [
- context = "atom:feed"
- s:assert [
- test = "atom:author or not(atom:entry[not(atom:author)])"
- "An atom:feed must have an atom:author unless all "
- ~ "of its atom:entry children have an atom:author."
- ]
- ]
- ]
- element atom:feed {
- atomCommonAttributes,
- (atomAuthor*
- & atomCategory*
- & atomContributor*
- & atomGenerator?
- & atomIcon?
- & atomId
- & atomLink*
- & atomLogo?
- & atomRights?
- & atomSubtitle?
- & atomTitle
- & atomUpdated
- & extensionElement*),
- atomEntry*
- }
-
-# atom:entry
-
-atomEntry =
- [
- s:rule [
- context = "atom:entry"
- s:assert [
- test = "atom:link[@rel='alternate'] "
- ~ "or atom:link[not(@rel)] "
- ~ "or atom:content"
- "An atom:entry must have at least one atom:link element "
- ~ "with a rel attribute of 'alternate' "
- ~ "or an atom:content."
- ]
- ]
- s:rule [
- context = "atom:entry"
- s:assert [
- test = "atom:author or "
- ~ "../atom:author or atom:source/atom:author"
- "An atom:entry must have an atom:author "
- ~ "if its feed does not."
- ]
- ]
- ]
- element atom:entry {
- atomCommonAttributes,
- (atomAuthor*
- & atomCategory*
- & atomContent?
- & atomContributor*
- & atomId
- & atomLink*
- & atomPublished?
- & atomRights?
- & atomSource?
- & atomSummary?
- & atomTitle
- & atomUpdated
- & extensionElement*)
- }
-
-# atom:content
-
-atomInlineTextContent =
- element atom:content {
- atomCommonAttributes,
- attribute type { "text" | "html" }?,
- (text)*
- }
-
-atomInlineXHTMLContent =
- element atom:content {
- atomCommonAttributes,
- attribute type { "xhtml" },
- xhtmlDiv
- }
-
-atomInlineOtherContent =
- element atom:content {
- atomCommonAttributes,
- attribute type { atomMediaType }?,
- (text|anyElement)*
- }
-
-atomOutOfLineContent =
- element atom:content {
- atomCommonAttributes,
- attribute type { atomMediaType }?,
- attribute src { atomUri },
- empty
- }
-
-atomContent = atomInlineTextContent
- | atomInlineXHTMLContent
- | atomInlineOtherContent
- | atomOutOfLineContent
-
-# atom:author
-
-atomAuthor = element atom:author { atomPersonConstruct }
-
-# atom:category
-
-atomCategory =
- element atom:category {
- atomCommonAttributes,
- attribute term { text },
- attribute scheme { atomUri }?,
- attribute label { text }?,
- undefinedContent
- }
-
-# atom:contributor
-
-atomContributor = element atom:contributor { atomPersonConstruct }
-
-# atom:generator
-
-atomGenerator = element atom:generator {
- atomCommonAttributes,
- attribute uri { atomUri }?,
- attribute version { text }?,
- text
-}
-
-# atom:icon
-
-atomIcon = element atom:icon {
- atomCommonAttributes,
- (atomUri)
-}
-
-# atom:id
-
-atomId = element atom:id {
- atomCommonAttributes,
- (atomUri)
-}
-
-# atom:logo
-
-atomLogo = element atom:logo {
- atomCommonAttributes,
- (atomUri)
-}
-
-# atom:link
-
-atomLink =
- element atom:link {
- atomCommonAttributes,
- attribute href { atomUri },
- attribute rel { atomNCName | atomUri }?,
- attribute type { atomMediaType }?,
- attribute hreflang { atomLanguageTag }?,
- attribute title { text }?,
- attribute length { text }?,
- undefinedContent
- }
-
-# atom:published
-
-atomPublished = element atom:published { atomDateConstruct }
-
-# atom:rights
-
-atomRights = element atom:rights { atomTextConstruct }
-
-# atom:source
-
-atomSource =
- element atom:source {
- atomCommonAttributes,
- (atomAuthor*
- & atomCategory*
- & atomContributor*
- & atomGenerator?
- & atomIcon?
- & atomId?
- & atomLink*
- & atomLogo?
- & atomRights?
- & atomSubtitle?
- & atomTitle?
- & atomUpdated?
- & extensionElement*)
- }
-
-# atom:subtitle
-
-atomSubtitle = element atom:subtitle { atomTextConstruct }
-
-# atom:summary
-
-atomSummary = element atom:summary { atomTextConstruct }
-
-# atom:title
-
-atomTitle = element atom:title { atomTextConstruct }
-
-# atom:updated
-
-atomUpdated = element atom:updated { atomDateConstruct }
-
-# Low-level simple types
-
-atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }
-
-# Whatever a media type is, it contains at least one slash
-atomMediaType = xsd:string { pattern = ".+/.+" }
-
-# As defined in RFC 3066
-atomLanguageTag = xsd:string {
- pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
-}
-
-# Unconstrained; it's not entirely clear how IRI fit into
-# xsd:anyURI so let's not try to constrain it here
-atomUri = text
-
-# Whatever an email address is, it contains at least one @
-atomEmailAddress = xsd:string { pattern = ".+@.+" }
-
-# Simple Extension
-
-simpleExtensionElement =
- element * - atom:* {
- text
- }
-
-# Structured Extension
-
-structuredExtensionElement =
- element * - atom:* {
- (attribute * { text }+,
- (text|anyElement)*)
- | (attribute * { text }*,
- (text?, anyElement+, (text|anyElement)*))
- }
-
-# Other Extensibility
-
-extensionElement =
- simpleExtensionElement | structuredExtensionElement
-
-undefinedAttribute =
- attribute * - (xml:base | xml:lang | local:*) { text }
-
-undefinedContent = (text|anyForeignElement)*
-
-anyElement =
- element * {
- (attribute * { text }
- | text
- | anyElement)*
- }
-
-anyForeignElement =
- element * - atom:* {
- (attribute * { text }
- | text
- | anyElement)*
- }
-
-# XHTML
-
-anyXHTML = element xhtml:* {
- (attribute * { text }
- | text
- | anyXHTML)*
-}
-
-xhtmlDiv = element xhtml:div {
- (attribute * { text }
- | text
- | anyXHTML)*
-}
-
-# EOF \ No newline at end of file
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc
deleted file mode 100755
index 725094788..000000000
--- a/plugins/OStatus/extlib/XML/Feed/schemas/rss10.rnc
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
-<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
-<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
-
-<grammar xmlns='http://relaxng.org/ns/structure/1.0'
- xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
- ns='http://purl.org/rss/1.0/'
- datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
-
- <start>
- <element name='RDF' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <ref name='RDFContent'/>
- </element>
- </start>
-
- <define name='RDFContent' ns='http://purl.org/rss/1.0/'>
- <interleave>
- <element name='channel'>
- <ref name='channelContent'/>
- </element>
- <optional>
- <element name='image'><ref name='imageContent'/></element>
- </optional>
- <oneOrMore>
- <element name='item'><ref name='itemContent'/></element>
- </oneOrMore>
- </interleave>
- </define>
-
- <define name='channelContent' combine="interleave">
- <interleave>
- <element name='title'><data type='string'/></element>
- <element name='link'><data type='anyURI'/></element>
- <element name='description'><data type='string'/></element>
- <element name='image'>
- <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <data type='anyURI'/>
- </attribute>
- </element>
- <element name='items'>
- <ref name='itemsContent'/>
- </element>
- <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <data type='anyURI'/>
- </attribute>
- </interleave>
- </define>
-
- <define name="itemsContent">
- <element name="Seq" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <oneOrMore>
- <element name="li" ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <choice>
- <attribute name='resource'> <!-- Why doesn't RDF/RSS1.0 ns qualify this attribute? -->
- <data type='anyURI'/>
- </attribute>
- <attribute name='resource' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <data type='anyURI'/>
- </attribute>
- </choice>
- </element>
- </oneOrMore>
- </element>
- </define>
-
- <define name='imageContent'>
- <interleave>
- <element name='title'><data type='string'/></element>
- <element name='link'><data type='anyURI'/></element>
- <element name='url'><data type='anyURI'/></element>
- <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <data type='anyURI'/>
- </attribute>
- </interleave>
- </define>
-
- <define name='itemContent'>
- <interleave>
- <element name='title'><data type='string'/></element>
- <element name='link'><data type='anyURI'/></element>
- <optional><element name='description'><data type='string'/></element></optional>
- <ref name="anyThing"/>
- <attribute name='about' ns='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
- <data type='anyURI'/>
- </attribute>
- </interleave>
- </define>
-
-
- <define name='anyThing'>
- <zeroOrMore>
- <choice>
- <text/>
- <element>
- <anyName>
- <except>
- <nsName/>
- </except>
- </anyName>
- <ref name='anyThing'/>
- <zeroOrMore>
- <attribute>
- <anyName/>
- </attribute>
- </zeroOrMore>
- </element>
- </choice>
- </zeroOrMore>
- </define>
-
-</grammar>
diff --git a/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc b/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc
deleted file mode 100755
index c8633766f..000000000
--- a/plugins/OStatus/extlib/XML/Feed/schemas/rss11.rnc
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- RELAX NG Compact Schema for RSS 1.1
- Sean B. Palmer, inamidst.com
- Christopher Schmidt, crschmidt.net
- License: This schema is in the public domain
--->
-<grammar xmlns:rss="http://purl.org/net/rss1.1#" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://purl.org/net/rss1.1#" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
- <start>
- <ref name="Channel"/>
- </start>
- <define name="Channel">
- <a:documentation>http://purl.org/net/rss1.1#Channel</a:documentation>
- <element name="Channel">
- <ref name="Channel.content"/>
-
- </element>
- </define>
- <define name="Channel.content">
- <optional>
- <ref name="AttrXMLLang"/>
- </optional>
- <optional>
- <ref name="AttrXMLBase"/>
- </optional>
-
- <ref name="AttrRDFAbout"/>
- <interleave>
- <ref name="title"/>
- <ref name="link"/>
- <ref name="description"/>
- <optional>
- <ref name="image"/>
- </optional>
- <zeroOrMore>
-
- <ref name="Any"/>
- </zeroOrMore>
- <ref name="items"/>
- </interleave>
- </define>
- <define name="title">
- <a:documentation>http://purl.org/net/rss1.1#title</a:documentation>
- <element name="title">
-
- <ref name="title.content"/>
- </element>
- </define>
- <define name="title.content">
- <optional>
- <ref name="AttrXMLLang"/>
- </optional>
- <text/>
- </define>
-
- <define name="link">
- <a:documentation>http://purl.org/net/rss1.1#link</a:documentation>
- <element name="link">
- <ref name="link.content"/>
- </element>
- </define>
- <define name="link.content">
- <data type="anyURI"/>
-
- </define>
- <define name="description">
- <a:documentation>http://purl.org/net/rss1.1#description</a:documentation>
- <element name="description">
- <ref name="description.content"/>
- </element>
- </define>
- <define name="description.content">
-
- <optional>
- <ref name="AttrXMLLang"/>
- </optional>
- <text/>
- </define>
- <define name="image">
- <a:documentation>http://purl.org/net/rss1.1#image</a:documentation>
- <element name="image">
-
- <ref name="image.content"/>
- </element>
- </define>
- <define name="image.content">
- <optional>
- <ref name="AttrXMLLang"/>
- </optional>
- <ref name="AttrRDFResource"/>
- <interleave>
-
- <ref name="title"/>
- <optional>
- <ref name="link"/>
- </optional>
- <ref name="url"/>
- <zeroOrMore>
- <ref name="Any"/>
- </zeroOrMore>
- </interleave>
-
- </define>
- <define name="url">
- <a:documentation>http://purl.org/net/rss1.1#url</a:documentation>
- <element name="url">
- <ref name="url.content"/>
- </element>
- </define>
- <define name="url.content">
-
- <data type="anyURI"/>
- </define>
- <define name="items">
- <a:documentation>http://purl.org/net/rss1.1#items</a:documentation>
- <element name="items">
- <ref name="items.content"/>
- </element>
- </define>
-
- <define name="items.content">
- <optional>
- <ref name="AttrXMLLang"/>
- </optional>
- <ref name="AttrRDFCollection"/>
- <zeroOrMore>
- <ref name="item"/>
- </zeroOrMore>
- </define>
-
- <define name="item">
- <a:documentation>http://purl.org/net/rss1.1#item</a:documentation>
- <element name="item">
- <ref name="item.content"/>
- </element>
- </define>
- <define name="item.content">
- <optional>
-
- <ref name="AttrXMLLang"/>
- </optional>
- <ref name="AttrRDFAbout"/>
- <interleave>
- <ref name="title"/>
- <ref name="link"/>
- <optional>
- <ref name="description"/>
- </optional>
-
- <optional>
- <ref name="image"/>
- </optional>
- <zeroOrMore>
- <ref name="Any"/>
- </zeroOrMore>
- </interleave>
- </define>
- <define name="Any">
-
- <a:documentation>http://purl.org/net/rss1.1#Any</a:documentation>
- <element>
- <anyName>
- <except>
- <nsName/>
- </except>
- </anyName>
- <ref name="Any.content"/>
-
- </element>
- </define>
- <define name="Any.content">
- <zeroOrMore>
- <attribute>
- <anyName>
- <except>
- <nsName/>
- <nsName ns=""/>
-
- </except>
- </anyName>
- </attribute>
- </zeroOrMore>
- <mixed>
- <zeroOrMore>
- <ref name="Any"/>
- </zeroOrMore>
- </mixed>
-
- </define>
- <define name="AttrXMLLang">
- <attribute name="xml:lang">
- <data type="language"/>
- </attribute>
- </define>
- <define name="AttrXMLBase">
- <attribute name="xml:base">
- <data type="anyURI"/>
-
- </attribute>
- </define>
- <define name="AttrRDFAbout">
- <attribute name="rdf:about">
- <data type="anyURI"/>
- </attribute>
- </define>
- <define name="AttrRDFResource">
- <attribute name="rdf:parseType">
-
- <value>Resource</value>
- </attribute>
- </define>
- <define name="AttrRDFCollection">
- <attribute name="rdf:parseType">
- <value>Collection</value>
- </attribute>
- </define>
-
-</grammar>
diff --git a/plugins/OStatus/extlib/hkit/hcard.profile.php b/plugins/OStatus/extlib/hkit/hcard.profile.php
new file mode 100644
index 000000000..6ec0dc890
--- /dev/null
+++ b/plugins/OStatus/extlib/hkit/hcard.profile.php
@@ -0,0 +1,105 @@
+<?php
+ // hcard profile for hkit
+
+ $this->root_class = 'vcard';
+
+ $this->classes = array(
+ 'fn', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
+ 'n', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
+ 'adr', array('post-office-box', 'extended-address', 'street-address', 'postal-code', 'country-name', 'type', 'region', 'locality'),
+ 'label', 'bday', 'agent', 'nickname', 'photo', 'class',
+ 'email', array('type', 'value'),
+ 'category', 'key', 'logo', 'mailer', 'note',
+ 'org', array('organization-name', 'organization-unit'),
+ 'tel', array('type', 'value'),
+ 'geo', array('latitude', 'longitude'),
+ 'tz', 'uid', 'url', 'rev', 'role', 'sort-string', 'sound', 'title'
+ );
+
+ // classes that must only appear once per card
+ $this->singles = array(
+ 'fn'
+ );
+
+ // classes that are required (not strictly enforced - give at least one!)
+ $this->required = array(
+ 'fn'
+ );
+
+ $this->att_map = array(
+ 'fn' => array('IMG|alt'),
+ 'url' => array('A|href', 'IMG|src', 'AREA|href'),
+ 'photo' => array('IMG|src'),
+ 'bday' => array('ABBR|title'),
+ 'logo' => array('IMG|src'),
+ 'email' => array('A|href'),
+ 'geo' => array('ABBR|title')
+ );
+
+
+ $this->callbacks = array(
+ 'url' => array($this, 'resolvePath'),
+ 'photo' => array($this, 'resolvePath'),
+ 'logo' => array($this, 'resolvePath'),
+ 'email' => array($this, 'resolveEmail')
+ );
+
+
+
+ function hKit_hcard_post($a)
+ {
+
+ foreach ($a as &$vcard){
+
+ hKit_implied_n_optimization($vcard);
+ hKit_implied_n_from_fn($vcard);
+
+ }
+
+ return $a;
+
+ }
+
+
+ function hKit_implied_n_optimization(&$vcard)
+ {
+ if (array_key_exists('fn', $vcard) && !is_array($vcard['fn']) &&
+ !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){
+
+ if (sizeof(explode(' ', $vcard['fn'])) == 2){
+ $patterns = array();
+ $patterns[] = array('/^(\S+),\s*(\S{1})$/', 2, 1); // Lastname, Initial
+ $patterns[] = array('/^(\S+)\s*(\S{1})\.*$/', 2, 1); // Lastname Initial(.)
+ $patterns[] = array('/^(\S+),\s*(\S+)$/', 2, 1); // Lastname, Firstname
+ $patterns[] = array('/^(\S+)\s*(\S+)$/', 1, 2); // Firstname Lastname
+
+ foreach ($patterns as $pattern){
+ if (preg_match($pattern[0], $vcard['fn'], $matches) === 1){
+ $n = array();
+ $n['given-name'] = $matches[$pattern[1]];
+ $n['family-name'] = $matches[$pattern[2]];
+ $vcard['n'] = $n;
+
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+
+ function hKit_implied_n_from_fn(&$vcard)
+ {
+ if (array_key_exists('fn', $vcard) && is_array($vcard['fn'])
+ && !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){
+
+ $vcard['n'] = $vcard['fn'];
+ }
+
+ if (array_key_exists('fn', $vcard) && is_array($vcard['fn'])){
+ $vcard['fn'] = $vcard['fn']['text'];
+ }
+ }
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/hkit/hkit.class.php b/plugins/OStatus/extlib/hkit/hkit.class.php
new file mode 100644
index 000000000..c3a54cff6
--- /dev/null
+++ b/plugins/OStatus/extlib/hkit/hkit.class.php
@@ -0,0 +1,475 @@
+<?php
+
+ /*
+
+ hKit Library for PHP5 - a generic library for parsing Microformats
+ Copyright (C) 2006 Drew McLellan
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Author
+ Drew McLellan - http://allinthehead.com/
+
+ Contributors:
+ Scott Reynen - http://www.randomchaos.com/
+
+ Version 0.5, 22-Jul-2006
+ fixed by-ref issue cropping up in PHP 5.0.5
+ fixed a bug with a@title
+ added support for new fn=n optimisation
+ added support for new a.include include-pattern
+ Version 0.4, 23-Jun-2006
+ prevented nested includes from causing infinite loops
+ returns false if URL can't be fetched
+ added pre-flight check for base support level
+ added deduping of once-only classnames
+ prevented accumulation of multiple 'value' values
+ tuned whitespace handling and treatment of DEL elements
+ Version 0.3, 21-Jun-2006
+ added post-processor callback method into profiles
+ fixed minor problems raised by hcard testsuite
+ added support for include-pattern
+ added support for td@headers pattern
+ added implied-n optimization into default hcard profile
+ Version 0.2, 20-Jun-2006
+ added class callback mechanism
+ added resolvePath & resolveEmail
+ added basic BASE support
+ Version 0.1.1, 19-Jun-2006 (different timezone, no time machine)
+ added external Tidy option
+ Version 0.1, 20-Jun-2006
+ initial release
+
+
+
+
+ */
+
+ class hKit
+ {
+
+ public $tidy_mode = 'proxy'; // 'proxy', 'exec', 'php' or 'none'
+ public $tidy_proxy = 'http://cgi.w3.org/cgi-bin/tidy?forceXML=on&docAddr='; // required only for tidy_mode=proxy
+ public $tmp_dir = '/path/to/writable/dir/'; // required only for tidy_mode=exec
+
+ private $root_class = '';
+ private $classes = '';
+ private $singles = '';
+ private $required = '';
+ private $att_map = '';
+ private $callbacks = '';
+ private $processor = '';
+
+ private $url = '';
+ private $base = '';
+ private $doc = '';
+
+
+ public function hKit()
+ {
+ // pre-flight checks
+ $pass = true;
+ $required = array('dom_import_simplexml', 'file_get_contents', 'simplexml_load_string');
+ $missing = array();
+
+ foreach ($required as $f){
+ if (!function_exists($f)){
+ $pass = false;
+ $missing[] = $f . '()';
+ }
+ }
+
+ if (!$pass)
+ die('hKit error: these required functions are not available: <strong>' . implode(', ', $missing) . '</strong>');
+
+ }
+
+
+ public function getByURL($profile='', $url='')
+ {
+
+ if ($profile=='' || $url == '') return false;
+
+ $this->loadProfile($profile);
+
+ $source = $this->loadURL($url);
+
+ if ($source){
+ $tidy_xhtml = $this->tidyThis($source);
+
+ $fragment = false;
+
+ if (strrchr($url, '#'))
+ $fragment = array_pop(explode('#', $url));
+
+ $doc = $this->loadDoc($tidy_xhtml, $fragment);
+ $s = $this->processNodes($doc, $this->classes);
+ $s = $this->postProcess($profile, $s);
+
+ return $s;
+ }else{
+ return false;
+ }
+ }
+
+ public function getByString($profile='', $input_xml='')
+ {
+ if ($profile=='' || $input_xml == '') return false;
+
+ $this->loadProfile($profile);
+
+ $doc = $this->loadDoc($input_xml);
+ $s = $this->processNodes($doc, $this->classes);
+ $s = $this->postProcess($profile, $s);
+
+ return $s;
+
+ }
+
+ private function processNodes($items, $classes, $allow_includes=true){
+
+ $out = array();
+
+ foreach($items as $item){
+ $data = array();
+
+ for ($i=0; $i<sizeof($classes); $i++){
+
+ if (!is_array($classes[$i])){
+
+ $xpath = ".//*[contains(concat(' ',normalize-space(@class),' '),' " . $classes[$i] . " ')]";
+ $results = $item->xpath($xpath);
+
+ if ($results){
+ foreach ($results as $result){
+ if (isset($classes[$i+1]) && is_array($classes[$i+1])){
+ $nodes = $this->processNodes($results, $classes[$i+1]);
+ if (sizeof($nodes) > 0){
+ $nodes = array_merge(array('text'=>$this->getNodeValue($result, $classes[$i])), $nodes);
+ $data[$classes[$i]] = $nodes;
+ }else{
+ $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]);
+ }
+
+ }else{
+ if (isset($data[$classes[$i]])){
+ if (is_array($data[$classes[$i]])){
+ // is already an array - append
+ $data[$classes[$i]][] = $this->getNodeValue($result, $classes[$i]);
+
+ }else{
+ // make it an array
+ if ($classes[$i] == 'value'){ // unless it's the 'value' of a type/value pattern
+ $data[$classes[$i]] .= $this->getNodeValue($result, $classes[$i]);
+ }else{
+ $old_val = $data[$classes[$i]];
+ $data[$classes[$i]] = array($old_val, $this->getNodeValue($result, $classes[$i]));
+ $old_val = false;
+ }
+ }
+ }else{
+ // set as normal value
+ $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]);
+
+ }
+ }
+
+ // td@headers pattern
+ if (strtoupper(dom_import_simplexml($result)->tagName)== "TD" && $result['headers']){
+ $include_ids = explode(' ', $result['headers']);
+ $doc = $this->doc;
+ foreach ($include_ids as $id){
+ $xpath = "//*[@id='$id']/..";
+ $includes = $doc->xpath($xpath);
+ foreach ($includes as $include){
+ $tmp = $this->processNodes($include, $this->classes);
+ if (is_array($tmp)) $data = array_merge($data, $tmp);
+ }
+ }
+ }
+ }
+ }
+ }
+ $result = false;
+ }
+
+ // include-pattern
+ if ($allow_includes){
+ $xpath = ".//*[contains(concat(' ',normalize-space(@class),' '),' include ')]";
+ $results = $item->xpath($xpath);
+
+ if ($results){
+ foreach ($results as $result){
+ $tagName = strtoupper(dom_import_simplexml($result)->tagName);
+ if ((($tagName == "OBJECT" && $result['data']) || ($tagName == "A" && $result['href']))
+ && preg_match('/\binclude\b/', $result['class'])){
+ $att = ($tagName == "OBJECT" ? 'data' : 'href');
+ $id = str_replace('#', '', $result[$att]);
+ $doc = $this->doc;
+ $xpath = "//*[@id='$id']";
+ $includes = $doc->xpath($xpath);
+ foreach ($includes as $include){
+ $include = simplexml_load_string('<root1><root2>'.$include->asXML().'</root2></root1>'); // don't ask.
+ $tmp = $this->processNodes($include, $this->classes, false);
+ if (is_array($tmp)) $data = array_merge($data, $tmp);
+ }
+ }
+ }
+ }
+ }
+ $out[] = $data;
+ }
+
+ if (sizeof($out) > 1){
+ return $out;
+ }else if (isset($data)){
+ return $data;
+ }else{
+ return array();
+ }
+ }
+
+
+ private function getNodeValue($node, $className)
+ {
+
+ $tag_name = strtoupper(dom_import_simplexml($node)->tagName);
+ $s = false;
+
+ // ignore DEL tags
+ if ($tag_name == 'DEL') return $s;
+
+ // look up att map values
+ if (array_key_exists($className, $this->att_map)){
+
+ foreach ($this->att_map[$className] as $map){
+ if (preg_match("/$tag_name\|/", $map)){
+ $s = ''.$node[array_pop($foo = explode('|', $map))];
+ }
+ }
+ }
+
+ // if nothing and OBJ, try data.
+ if (!$s && $tag_name=='OBJECT' && $node['data']) $s = ''.$node['data'];
+
+ // if nothing and IMG, try alt.
+ if (!$s && $tag_name=='IMG' && $node['alt']) $s = ''.$node['alt'];
+
+ // if nothing and AREA, try alt.
+ if (!$s && $tag_name=='AREA' && $node['alt']) $s = ''.$node['alt'];
+
+ //if nothing and not A, try title.
+ if (!$s && $tag_name!='A' && $node['title']) $s = ''.$node['title'];
+
+
+ // if nothing found, go with node text
+ $s = ($s ? $s : implode(array_filter($node->xpath('child::node()'), array(&$this, "filterBlankValues")), ' '));
+
+ // callbacks
+ if (array_key_exists($className, $this->callbacks)){
+ $s = preg_replace_callback('/.*/', $this->callbacks[$className], $s, 1);
+ }
+
+ // trim and remove line breaks
+ if ($tag_name != 'PRE'){
+ $s = trim(preg_replace('/[\r\n\t]+/', '', $s));
+ $s = trim(preg_replace('/(\s{2})+/', ' ', $s));
+ }
+
+ return $s;
+ }
+
+ private function filterBlankValues($s){
+ return preg_match("/\w+/", $s);
+ }
+
+
+ private function tidyThis($source)
+ {
+ switch ( $this->tidy_mode )
+ {
+ case 'exec':
+ $tmp_file = $this->tmp_dir.md5($source).'.txt';
+ file_put_contents($tmp_file, $source);
+ exec("tidy -utf8 -indent -asxhtml -numeric -bare -quiet $tmp_file", $tidy);
+ unlink($tmp_file);
+ return implode("\n", $tidy);
+ break;
+
+ case 'php':
+ $tidy = tidy_parse_string($source);
+ return tidy_clean_repair($tidy);
+ break;
+
+ default:
+ return $source;
+ break;
+ }
+
+ }
+
+
+ private function loadProfile($profile)
+ {
+ require_once("$profile.profile.php");
+ }
+
+
+ private function loadDoc($input_xml, $fragment=false)
+ {
+ $xml = simplexml_load_string($input_xml);
+
+ $this->doc = $xml;
+
+ if ($fragment){
+ $doc = $xml->xpath("//*[@id='$fragment']");
+ $xml = simplexml_load_string($doc[0]->asXML());
+ $doc = null;
+ }
+
+ // base tag
+ if ($xml->head->base['href']) $this->base = $xml->head->base['href'];
+
+ // xml:base attribute - PITA with SimpleXML
+ preg_match('/xml:base="(.*)"/', $xml->asXML(), $matches);
+ if (is_array($matches) && sizeof($matches)>1) $this->base = $matches[1];
+
+ return $xml->xpath("//*[contains(concat(' ',normalize-space(@class),' '),' $this->root_class ')]");
+
+ }
+
+
+ private function loadURL($url)
+ {
+ $this->url = $url;
+
+ if ($this->tidy_mode == 'proxy' && $this->tidy_proxy != ''){
+ $url = $this->tidy_proxy . $url;
+ }
+
+ return @file_get_contents($url);
+
+ }
+
+
+ private function postProcess($profile, $s)
+ {
+ $required = $this->required;
+
+ if (is_array($s) && array_key_exists($required[0], $s)){
+ $s = array($s);
+ }
+
+ $s = $this->dedupeSingles($s);
+
+ if (function_exists('hKit_'.$profile.'_post')){
+ $s = call_user_func('hKit_'.$profile.'_post', $s);
+ }
+
+ $s = $this->removeTextVals($s);
+
+ return $s;
+ }
+
+
+ private function resolvePath($filepath)
+ { // ugly code ahoy: needs a serious tidy up
+
+ $filepath = $filepath[0];
+
+ $base = $this->base;
+ $url = $this->url;
+
+ if ($base != '' && strpos($base, '://') !== false)
+ $url = $base;
+
+ $r = parse_url($url);
+ $domain = $r['scheme'] . '://' . $r['host'];
+
+ if (!isset($r['path'])) $r['path'] = '/';
+ $path = explode('/', $r['path']);
+ $file = explode('/', $filepath);
+ $new = array('');
+
+ if (strpos($filepath, '://') !== false || strpos($filepath, 'data:') !== false){
+ return $filepath;
+ }
+
+ if ($file[0] == ''){
+ // absolute path
+ return ''.$domain . implode('/', $file);
+ }else{
+ // relative path
+ if ($path[sizeof($path)-1] == '') array_pop($path);
+ if (strpos($path[sizeof($path)-1], '.') !== false) array_pop($path);
+
+ foreach ($file as $segment){
+ if ($segment == '..'){
+ array_pop($path);
+ }else{
+ $new[] = $segment;
+ }
+ }
+ return ''.$domain . implode('/', $path) . implode('/', $new);
+ }
+ }
+
+ private function resolveEmail($v)
+ {
+ $parts = parse_url($v[0]);
+ return ($parts['path']);
+ }
+
+
+ private function dedupeSingles($s)
+ {
+ $singles = $this->singles;
+
+ foreach ($s as &$item){
+ foreach ($singles as $classname){
+ if (array_key_exists($classname, $item) && is_array($item[$classname])){
+ if (isset($item[$classname][0])) $item[$classname] = $item[$classname][0];
+ }
+ }
+ }
+
+ return $s;
+ }
+
+ private function removeTextVals($s)
+ {
+ foreach ($s as $key => &$val){
+ if ($key){
+ $k = $key;
+ }else{
+ $k = '';
+ }
+
+ if (is_array($val)){
+ $val = $this->removeTextVals($val);
+ }else{
+ if ($k == 'text'){
+ $val = '';
+ }
+ }
+ }
+
+ return array_filter($s);
+ }
+
+ }
+
+
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch b/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch
deleted file mode 100644
index c53bd9737..000000000
--- a/plugins/OStatus/extlib/xml-feed-parser-bug-16416.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-index c5d79d1..308a4ab 100644
---- a/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-+++ b/htdocs/lib/pear/XML/Feed/Parser/RSS2.php
-@@ -321,7 +321,8 @@ class XML_Feed_Parser_RSS2 extends XML_Feed_Parser_Type
- */
- function getLink($offset, $attribute = 'href', $params = array())
- {
-- $links = $this->model->getElementsByTagName('link');
-+ $xPath = new DOMXPath($this->model);
-+ $links = $xPath->query('//link');
-
- if ($links->length <= $offset) {
- return false;
diff --git a/plugins/OStatus/js/ostatus.js b/plugins/OStatus/js/ostatus.js
index 671795558..bd29b5c0c 100644
--- a/plugins/OStatus/js/ostatus.js
+++ b/plugins/OStatus/js/ostatus.js
@@ -1,6 +1,38 @@
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category OStatus UI interaction
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@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/
+ * @note Everything in here should eventually migrate over to /js/util.js's SN.
+ */
+
+SN.Init.OStatusCookie = function() {
+ if (SN.U.StatusNetInstance.Get() === null) {
+ SN.U.StatusNetInstance.Set({RemoteProfile: null});
+ }
+};
+
SN.U.DialogBox = {
Subscribe: function(a) {
- var f = a.parent().find('#form_ostatus_connect');
+ var f = a.parent().find('.form_settings');
if (f.length > 0) {
f.show();
}
@@ -8,7 +40,7 @@ SN.U.DialogBox = {
$.ajax({
type: 'GET',
dataType: 'xml',
- url: a[0].href+'&ajax=1',
+ url: a[0].href + ((a[0].href.match(/[\\?]/) === null)?'?':'&') + 'ajax=1',
beforeSend: function(formData) {
a.addClass('processing');
},
@@ -19,7 +51,7 @@ SN.U.DialogBox = {
if (typeof($('form', data)[0]) != 'undefined') {
a.after(document._importNode($('form', data)[0], true));
- var form = a.parent().find('#form_ostatus_connect');
+ var form = a.parent().find('.form_settings');
form
.addClass('dialogbox')
@@ -39,7 +71,17 @@ SN.U.DialogBox = {
return false;
});
- form.find('#acct').focus();
+ form.find('#profile').focus();
+
+ if (form.attr('id') == 'form_ostatus_connect') {
+ SN.Init.OStatusCookie();
+ form.find('#profile').val(SN.U.StatusNetInstance.Get().RemoteProfile);
+
+ form.find("[type=submit]").bind('click', function() {
+ SN.U.StatusNetInstance.Set({RemoteProfile: form.find('#profile').val()});
+ return true;
+ });
+ }
}
a.removeClass('processing');
@@ -50,11 +92,11 @@ SN.U.DialogBox = {
};
SN.Init.Subscribe = function() {
- $('.entity_subscribe a').live('click', function() { SN.U.DialogBox.Subscribe($(this)); return false; });
+ $('.entity_subscribe .entity_remote_subscribe').live('click', function() { SN.U.DialogBox.Subscribe($(this)); return false; });
};
$(document).ready(function() {
- if ($('.entity_subscribe .entity_remote_subscribe').length > 0) {
- SN.Init.Subscribe();
- }
+ SN.Init.Subscribe();
+
+ $('.form_remote_authorize').bind('submit', function() { $(this).addClass(SN.C.S.Processing); return true; });
});
diff --git a/plugins/OStatus/lib/activity.php b/plugins/OStatus/lib/activity.php
deleted file mode 100644
index f137946ab..000000000
--- a/plugins/OStatus/lib/activity.php
+++ /dev/null
@@ -1,448 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * An activity
- *
- * PHP version 5
- *
- * LICENCE: This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-if (!defined('STATUSNET')) {
- exit(1);
-}
-
-/**
- * Utilities for turning DOMish things into Activityish things
- *
- * Some common functions that I didn't have the bandwidth to try to factor
- * into some kind of reasonable superclass, so just dumped here. Might
- * be useful to have an ActivityObject parent class or something.
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityUtils
-{
- const ATOM = 'http://www.w3.org/2005/Atom';
-
- const LINK = 'link';
- const REL = 'rel';
- const TYPE = 'type';
- const HREF = 'href';
-
- /**
- * Get the permalink for an Activity object
- *
- * @param DOMElement $element A DOM element
- *
- * @return string related link, if any
- */
-
- static function getPermalink($element)
- {
- return self::getLink($element, 'alternate', 'text/html');
- }
-
- /**
- * Get the permalink for an Activity object
- *
- * @param DOMElement $element A DOM element
- *
- * @return string related link, if any
- */
-
- static function getLink($element, $rel, $type=null)
- {
- $links = $element->getElementsByTagnameNS(self::ATOM, self::LINK);
-
- foreach ($links as $link) {
-
- $linkRel = $link->getAttribute(self::REL);
- $linkType = $link->getAttribute(self::TYPE);
-
- if ($linkRel == $rel &&
- (is_null($type) || $linkType == $type)) {
- return $link->getAttribute(self::HREF);
- }
- }
-
- return null;
- }
-
- /**
- * Gets the first child element with the given tag
- *
- * @param DOMElement $element element to pick at
- * @param string $tag tag to look for
- * @param string $namespace Namespace to look under
- *
- * @return DOMElement found element or null
- */
-
- static function child($element, $tag, $namespace=self::ATOM)
- {
- $els = $element->childNodes;
- if (empty($els) || $els->length == 0) {
- return null;
- } else {
- for ($i = 0; $i < $els->length; $i++) {
- $el = $els->item($i);
- if ($el->localName == $tag && $el->namespaceURI == $namespace) {
- return $el;
- }
- }
- }
- }
-
- /**
- * Grab the text content of a DOM element child of the current element
- *
- * @param DOMElement $element Element whose children we examine
- * @param string $tag Tag to look up
- * @param string $namespace Namespace to use, defaults to Atom
- *
- * @return string content of the child
- */
-
- static function childContent($element, $tag, $namespace=self::ATOM)
- {
- $el = self::child($element, $tag, $namespace);
-
- if (empty($el)) {
- return null;
- } else {
- return $el->textContent;
- }
- }
-}
-
-/**
- * A noun-ish thing in the activity universe
- *
- * The activity streams spec talks about activity objects, while also having
- * a tag activity:object, which is in fact an activity object. Aaaaaah!
- *
- * This is just a thing in the activity universe. Can be the subject, object,
- * or indirect object (target!) of an activity verb. Rotten name, and I'm
- * propagating it. *sigh*
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityObject
-{
- const ARTICLE = 'http://activitystrea.ms/schema/1.0/article';
- const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry';
- const NOTE = 'http://activitystrea.ms/schema/1.0/note';
- const STATUS = 'http://activitystrea.ms/schema/1.0/status';
- const FILE = 'http://activitystrea.ms/schema/1.0/file';
- const PHOTO = 'http://activitystrea.ms/schema/1.0/photo';
- const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album';
- const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist';
- const VIDEO = 'http://activitystrea.ms/schema/1.0/video';
- const AUDIO = 'http://activitystrea.ms/schema/1.0/audio';
- const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark';
- const PERSON = 'http://activitystrea.ms/schema/1.0/person';
- const GROUP = 'http://activitystrea.ms/schema/1.0/group';
- const PLACE = 'http://activitystrea.ms/schema/1.0/place';
- const COMMENT = 'http://activitystrea.ms/schema/1.0/comment';
- // ^^^^^^^^^^ tea!
-
- // Atom elements we snarf
-
- const TITLE = 'title';
- const SUMMARY = 'summary';
- const CONTENT = 'content';
- const ID = 'id';
- const SOURCE = 'source';
-
- const NAME = 'name';
- const URI = 'uri';
- const EMAIL = 'email';
-
- public $element;
- public $type;
- public $id;
- public $title;
- public $summary;
- public $content;
- public $link;
- public $source;
-
- /**
- * Constructor
- *
- * This probably needs to be refactored
- * to generate a local class (ActivityPerson, ActivityFile, ...)
- * based on the object type.
- *
- * @param DOMElement $element DOM thing to turn into an Activity thing
- */
-
- function __construct($element)
- {
- $this->element = $element;
-
- if ($element->tagName == 'author') {
-
- $this->type = self::PERSON; // XXX: is this fair?
- $this->title = $this->_childContent($element, self::NAME);
- $this->id = $this->_childContent($element, self::URI);
-
- if (empty($this->id)) {
- $email = $this->_childContent($element, self::EMAIL);
- if (!empty($email)) {
- // XXX: acct: ?
- $this->id = 'mailto:'.$email;
- }
- }
-
- } else {
-
- $this->type = $this->_childContent($element, Activity::OBJECTTYPE,
- Activity::SPEC);
-
- if (empty($this->type)) {
- $this->type = ActivityObject::NOTE;
- }
-
- $this->id = $this->_childContent($element, self::ID);
- $this->title = $this->_childContent($element, self::TITLE);
- $this->summary = $this->_childContent($element, self::SUMMARY);
- $this->content = $this->_childContent($element, self::CONTENT);
-
- $this->source = $this->_getSource($element);
-
- $this->link = ActivityUtils::getPermalink($element);
-
- // XXX: grab PoCo stuff
- }
-
- // Some per-type attributes...
- if ($this->type == self::PERSON || $this->type == self::GROUP) {
- $this->displayName = $this->title;
-
- // @fixme we may have multiple avatars with different resolutions specified
- $this->avatar = ActivityUtils::getLink($element, 'avatar');
- }
- }
-
- private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM)
- {
- return ActivityUtils::childContent($element, $tag, $namespace);
- }
-
- // Try to get a unique id for the source feed
-
- private function _getSource($element)
- {
- $sourceEl = ActivityUtils::child($element, 'source');
-
- if (empty($sourceEl)) {
- return null;
- } else {
- $href = ActivityUtils::getLink($sourceEl, 'self');
- if (!empty($href)) {
- return $href;
- } else {
- return ActivityUtils::childContent($sourceEl, 'id');
- }
- }
- }
-}
-
-/**
- * Utility class to hold a bunch of constant defining default verb types
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityVerb
-{
- const POST = 'http://activitystrea.ms/schema/1.0/post';
- const SHARE = 'http://activitystrea.ms/schema/1.0/share';
- const SAVE = 'http://activitystrea.ms/schema/1.0/save';
- const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite';
- const PLAY = 'http://activitystrea.ms/schema/1.0/play';
- const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow';
- const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend';
- const JOIN = 'http://activitystrea.ms/schema/1.0/join';
- const TAG = 'http://activitystrea.ms/schema/1.0/tag';
-}
-
-/**
- * An activity in the ActivityStrea.ms world
- *
- * An activity is kind of like a sentence: someone did something
- * to something else.
- *
- * 'someone' is the 'actor'; 'did something' is the verb;
- * 'something else' is the object.
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class Activity
-{
- const SPEC = 'http://activitystrea.ms/spec/1.0/';
- const SCHEMA = 'http://activitystrea.ms/schema/1.0/';
-
- const VERB = 'verb';
- const OBJECT = 'object';
- const ACTOR = 'actor';
- const SUBJECT = 'subject';
- const OBJECTTYPE = 'object-type';
- const CONTEXT = 'context';
- const TARGET = 'target';
-
- const ATOM = 'http://www.w3.org/2005/Atom';
-
- const AUTHOR = 'author';
- const PUBLISHED = 'published';
- const UPDATED = 'updated';
-
- public $actor; // an ActivityObject
- public $verb; // a string (the URL)
- public $object; // an ActivityObject
- public $target; // an ActivityObject
- public $context; // an ActivityObject
- public $time; // Time of the activity
- public $link; // an ActivityObject
- public $entry; // the source entry
- public $feed; // the source feed
-
- /**
- * Turns a regular old Atom <entry> into a magical activity
- *
- * @param DOMElement $entry Atom entry to poke at
- * @param DOMElement $feed Atom feed, for context
- */
-
- function __construct($entry, $feed = null)
- {
- $this->entry = $entry;
- $this->feed = $feed;
-
- $pubEl = $this->_child($entry, self::PUBLISHED, self::ATOM);
-
- if (!empty($pubEl)) {
- $this->time = strtotime($pubEl->textContent);
- } else {
- // XXX technically an error; being liberal. Good idea...?
- $updateEl = $this->_child($entry, self::UPDATED, self::ATOM);
- if (!empty($updateEl)) {
- $this->time = strtotime($updateEl->textContent);
- } else {
- $this->time = null;
- }
- }
-
- $this->link = ActivityUtils::getPermalink($entry);
-
- $verbEl = $this->_child($entry, self::VERB);
-
- if (!empty($verbEl)) {
- $this->verb = trim($verbEl->textContent);
- } else {
- $this->verb = ActivityVerb::POST;
- // XXX: do other implied stuff here
- }
-
- $objectEl = $this->_child($entry, self::OBJECT);
-
- if (!empty($objectEl)) {
- $this->object = new ActivityObject($objectEl);
- } else {
- $this->object = new ActivityObject($entry);
- }
-
- $actorEl = $this->_child($entry, self::ACTOR);
-
- if (!empty($actorEl)) {
-
- $this->actor = new ActivityObject($actorEl);
-
- } else if (!empty($feed) &&
- $subjectEl = $this->_child($feed, self::SUBJECT)) {
-
- $this->actor = new ActivityObject($subjectEl);
-
- } else if ($authorEl = $this->_child($entry, self::AUTHOR, self::ATOM)) {
-
- $this->actor = new ActivityObject($authorEl);
-
- } else if (!empty($feed) && $authorEl = $this->_child($feed, self::AUTHOR,
- self::ATOM)) {
-
- $this->actor = new ActivityObject($authorEl);
- }
-
- $contextEl = $this->_child($entry, self::CONTEXT);
-
- if (!empty($contextEl)) {
- $this->context = new ActivityObject($contextEl);
- }
-
- $targetEl = $this->_child($entry, self::TARGET);
-
- if (!empty($targetEl)) {
- $this->target = new ActivityObject($targetEl);
- }
- }
-
- /**
- * Returns an Atom <entry> based on this activity
- *
- * @return DOMElement Atom entry
- */
-
- function toAtomEntry()
- {
- return null;
- }
-
- private function _child($element, $tag, $namespace=self::SPEC)
- {
- return ActivityUtils::child($element, $tag, $namespace);
- }
-} \ No newline at end of file
diff --git a/plugins/OStatus/lib/discovery.php b/plugins/OStatus/lib/discovery.php
new file mode 100644
index 000000000..f8449b309
--- /dev/null
+++ b/plugins/OStatus/lib/discovery.php
@@ -0,0 +1,310 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+/**
+ * This class implements LRDD-based service discovery based on the "Hammer Draft"
+ * (including webfinger)
+ *
+ * @see http://groups.google.com/group/webfinger/browse_thread/thread/9f3d93a479e91bbf
+ */
+class Discovery
+{
+
+ const LRDD_REL = 'lrdd';
+ const PROFILEPAGE = 'http://webfinger.net/rel/profile-page';
+ const UPDATESFROM = 'http://schemas.google.com/g/2010#updates-from';
+ const HCARD = 'http://microformats.org/profile/hcard';
+
+ public $methods = array();
+
+ public function __construct()
+ {
+ $this->registerMethod('Discovery_LRDD_Host_Meta');
+ $this->registerMethod('Discovery_LRDD_Link_Header');
+ $this->registerMethod('Discovery_LRDD_Link_HTML');
+ }
+
+
+ public function registerMethod($class)
+ {
+ $this->methods[] = $class;
+ }
+
+ /**
+ * Given a "user id" make sure it's normalized to either a webfinger
+ * acct: uri or a profile HTTP URL.
+ */
+ public static function normalize($user_id)
+ {
+ if (substr($user_id, 0, 5) == 'http:' ||
+ substr($user_id, 0, 6) == 'https:' ||
+ substr($user_id, 0, 5) == 'acct:') {
+ return $user_id;
+ }
+
+ if (strpos($user_id, '@') !== FALSE) {
+ return 'acct:' . $user_id;
+ }
+
+ return 'http://' . $user_id;
+ }
+
+ public static function isWebfinger($user_id)
+ {
+ $uri = Discovery::normalize($user_id);
+
+ return (substr($uri, 0, 5) == 'acct:');
+ }
+
+ /**
+ * This implements the actual lookup procedure
+ */
+ public function lookup($id)
+ {
+ // Normalize the incoming $id to make sure we have a uri
+ $uri = $this->normalize($id);
+
+ foreach ($this->methods as $class) {
+ $links = call_user_func(array($class, 'discover'), $uri);
+ if ($link = Discovery::getService($links, Discovery::LRDD_REL)) {
+ // Load the LRDD XRD
+ if (!empty($link['template'])) {
+ $xrd_uri = Discovery::applyTemplate($link['template'], $uri);
+ } else {
+ $xrd_uri = $link['href'];
+ }
+
+ $xrd = $this->fetchXrd($xrd_uri);
+ if ($xrd) {
+ return $xrd;
+ }
+ }
+ }
+
+ throw new Exception('Unable to find services for '. $id);
+ }
+
+ public static function getService($links, $service) {
+ if (!is_array($links)) {
+ return false;
+ }
+
+ foreach ($links as $link) {
+ if ($link['rel'] == $service) {
+ return $link;
+ }
+ }
+ }
+
+
+ public static function applyTemplate($template, $id)
+ {
+ $template = str_replace('{uri}', urlencode($id), $template);
+
+ return $template;
+ }
+
+
+ public static function fetchXrd($url)
+ {
+ try {
+ $client = new HTTPClient();
+ $response = $client->get($url);
+ } catch (HTTP_Request2_Exception $e) {
+ return false;
+ }
+
+ if ($response->getStatus() != 200) {
+ return false;
+ }
+
+ return XRD::parse($response->getBody());
+ }
+}
+
+interface Discovery_LRDD
+{
+ public function discover($uri);
+}
+
+class Discovery_LRDD_Host_Meta implements Discovery_LRDD
+{
+ public function discover($uri)
+ {
+ if (!Discovery::isWebfinger($uri)) {
+ return false;
+ }
+
+ // We have a webfinger acct: - start with host-meta
+ list($name, $domain) = explode('@', $uri);
+ $url = 'http://'. $domain .'/.well-known/host-meta';
+
+ $xrd = Discovery::fetchXrd($url);
+
+ if ($xrd) {
+ if ($xrd->host != $domain) {
+ return false;
+ }
+
+ return $xrd->links;
+ }
+ }
+}
+
+class Discovery_LRDD_Link_Header implements Discovery_LRDD
+{
+ public function discover($uri)
+ {
+ try {
+ $client = new HTTPClient();
+ $response = $client->get($uri);
+ } catch (HTTP_Request2_Exception $e) {
+ return false;
+ }
+
+ if ($response->getStatus() != 200) {
+ return false;
+ }
+
+ $link_header = $response->getHeader('Link');
+ if (!$link_header) {
+ // return false;
+ }
+
+ return Discovery_LRDD_Link_Header::parseHeader($link_header);
+ }
+
+ protected static function parseHeader($header)
+ {
+ preg_match('/^<[^>]+>/', $header, $uri_reference);
+ //if (empty($uri_reference)) return;
+
+ $links = array();
+
+ $link_uri = trim($uri_reference[0], '<>');
+ $link_rel = array();
+ $link_type = null;
+
+ // remove uri-reference from header
+ $header = substr($header, strlen($uri_reference[0]));
+
+ // parse link-params
+ $params = explode(';', $header);
+
+ foreach ($params as $param) {
+ if (empty($param)) continue;
+ list($param_name, $param_value) = explode('=', $param, 2);
+ $param_name = trim($param_name);
+ $param_value = preg_replace('(^"|"$)', '', trim($param_value));
+
+ // for now we only care about 'rel' and 'type' link params
+ // TODO do something with the other links-params
+ switch ($param_name) {
+ case 'rel':
+ $link_rel = trim($param_value);
+ break;
+
+ case 'type':
+ $link_type = trim($param_value);
+ }
+ }
+
+ $links[] = array(
+ 'href' => $link_uri,
+ 'rel' => $link_rel,
+ 'type' => $link_type);
+
+ return $links;
+ }
+}
+
+class Discovery_LRDD_Link_HTML implements Discovery_LRDD
+{
+ public function discover($uri)
+ {
+ try {
+ $client = new HTTPClient();
+ $response = $client->get($uri);
+ } catch (HTTP_Request2_Exception $e) {
+ return false;
+ }
+
+ if ($response->getStatus() != 200) {
+ return false;
+ }
+
+ return Discovery_LRDD_Link_HTML::parse($response->getBody());
+ }
+
+
+ public function parse($html)
+ {
+ $links = array();
+
+ preg_match('/<head(\s[^>]*)?>(.*?)<\/head>/is', $html, $head_matches);
+ $head_html = $head_matches[2];
+
+ preg_match_all('/<link\s[^>]*>/i', $head_html, $link_matches);
+
+ foreach ($link_matches[0] as $link_html) {
+ $link_url = null;
+ $link_rel = null;
+ $link_type = null;
+
+ preg_match('/\srel=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $rel_matches);
+ if ( isset($rel_matches[3]) ) {
+ $link_rel = $rel_matches[3];
+ } else if ( isset($rel_matches[1]) ) {
+ $link_rel = $rel_matches[1];
+ }
+
+ preg_match('/\shref=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $href_matches);
+ if ( isset($href_matches[3]) ) {
+ $link_uri = $href_matches[3];
+ } else if ( isset($href_matches[1]) ) {
+ $link_uri = $href_matches[1];
+ }
+
+ preg_match('/\stype=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $type_matches);
+ if ( isset($type_matches[3]) ) {
+ $link_type = $type_matches[3];
+ } else if ( isset($type_matches[1]) ) {
+ $link_type = $type_matches[1];
+ }
+
+ $links[] = array(
+ 'href' => $link_url,
+ 'rel' => $link_rel,
+ 'type' => $link_type,
+ );
+ }
+
+ return $links;
+ }
+}
diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
index 39985fc90..7afb71bdc 100644
--- a/plugins/OStatus/lib/feeddiscovery.php
+++ b/plugins/OStatus/lib/feeddiscovery.php
@@ -48,6 +48,14 @@ class FeedSubNoFeedException extends FeedSubException
{
}
+class FeedSubBadXmlException extends FeedSubException
+{
+}
+
+class FeedSubNoHubException extends FeedSubException
+{
+}
+
/**
* Given a web page or feed URL, discover the final location of the feed
* and return its current contents.
@@ -57,21 +65,25 @@ class FeedSubNoFeedException extends FeedSubException
* if ($feed->discoverFromURL($url)) {
* print $feed->uri;
* print $feed->type;
- * processFeed($feed->body);
+ * processFeed($feed->feed); // DOMDocument
* }
*/
class FeedDiscovery
{
public $uri;
public $type;
- public $body;
+ public $feed;
+ /** Post-initialize query helper... */
+ public function getLink($rel, $type=null)
+ {
+ // @fixme check for non-Atom links in RSS2 feeds as well
+ return self::getAtomLink($rel, $type);
+ }
- public function feedMunger()
+ public function getAtomLink($rel, $type=null)
{
- require_once 'XML/Feed/Parser.php';
- $feed = new XML_Feed_Parser($this->body, false, false, true); // @fixme
- return new FeedMunger($feed, $this->uri);
+ return ActivityUtils::getLink($this->feed->documentElement, $rel, $type);
}
/**
@@ -90,6 +102,7 @@ class FeedDiscovery
$client = new HTTPClient();
$response = $client->get($url);
} catch (HTTP_Request2_Exception $e) {
+ common_log(LOG_ERR, __METHOD__ . " Failure for $url - " . $e->getMessage());
throw new FeedSubBadURLException($e);
}
@@ -107,7 +120,12 @@ class FeedDiscovery
return $this->initFromResponse($response);
}
-
+
+ function discoverFromFeedURL($url)
+ {
+ return $this->discoverFromURL($url, false);
+ }
+
function initFromResponse($response)
{
if (!$response->isOk()) {
@@ -122,16 +140,26 @@ class FeedDiscovery
$type = $response->getHeader('Content-Type');
if (preg_match('!^(text/xml|application/xml|application/(rss|atom)\+xml)!i', $type)) {
- $this->uri = $sourceurl;
- $this->type = $type;
- $this->body = $body;
- return true;
+ return $this->init($sourceurl, $type, $body);
} else {
common_log(LOG_WARNING, "Unrecognized feed type $type for $sourceurl");
throw new FeedSubUnrecognizedTypeException($type);
}
}
+ function init($sourceurl, $type, $body)
+ {
+ $feed = new DOMDocument();
+ if ($feed->loadXML($body)) {
+ $this->uri = $sourceurl;
+ $this->type = $type;
+ $this->feed = $feed;
+ return $this->uri;
+ } else {
+ throw new FeedSubBadXmlException($url);
+ }
+ }
+
/**
* @param string $url source URL, used to resolve relative links
* @param string $body HTML body text
diff --git a/plugins/OStatus/lib/feedmunger.php b/plugins/OStatus/lib/feedmunger.php
deleted file mode 100644
index e8c46de90..000000000
--- a/plugins/OStatus/lib/feedmunger.php
+++ /dev/null
@@ -1,350 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-class FeedSubPreviewNotice extends Notice
-{
- protected $fetched = true;
-
- function __construct($profile)
- {
- $this->profile = $profile;
- $this->profile_id = 0;
- }
-
- function getProfile()
- {
- return $this->profile;
- }
-
- function find()
- {
- return true;
- }
-
- function fetch()
- {
- $got = $this->fetched;
- $this->fetched = false;
- return $got;
- }
-}
-
-class FeedSubPreviewProfile extends Profile
-{
- function getAvatar($width, $height=null)
- {
- return new FeedSubPreviewAvatar($width, $height, $this->avatar);
- }
-}
-
-class FeedSubPreviewAvatar extends Avatar
-{
- function __construct($width, $height, $remote)
- {
- $this->remoteImage = $remote;
- }
-
- function displayUrl() {
- return $this->remoteImage;
- }
-}
-
-class FeedMunger
-{
- /**
- * @param XML_Feed_Parser $feed
- */
- function __construct($feed, $url=null)
- {
- $this->feed = $feed;
- $this->url = $url;
- }
-
- function ostatusProfile()
- {
- $profile = new Ostatus_profile();
- $profile->feeduri = $this->url;
- $profile->homeuri = $this->feed->link;
- $profile->huburi = $this->getHubLink();
- $salmon = $this->getSalmonLink();
- if ($salmon) {
- $profile->salmonuri = $salmon;
- }
- return $profile;
- }
-
- function getAtomLink($item, $attribs=array())
- {
- // XML_Feed_Parser gets confused by multiple <link> elements.
- $dom = $item->model;
-
- // Note that RSS feeds would embed an <atom:link> so this should work for both.
- /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
- // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
- $links = $dom->getElementsByTagNameNS('http://www.w3.org/2005/Atom', 'link');
- for ($i = 0; $i < $links->length; $i++) {
- $node = $links->item($i);
- if ($node->hasAttributes()) {
- $href = $node->attributes->getNamedItem('href');
- if ($href) {
- $matches = 0;
- foreach ($attribs as $name => $val) {
- $attrib = $node->attributes->getNamedItem($name);
- if ($attrib && $attrib->value == $val) {
- $matches++;
- }
- }
- if ($matches == count($attribs)) {
- return $href->value;
- }
- }
- }
- }
- return false;
- }
-
- function getRssLink($item)
- {
- // XML_Feed_Parser gets confused by multiple <link> elements.
- $dom = $item->model;
-
- // Note that RSS feeds would embed an <atom:link> so this should work for both.
- /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
- // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
- $links = $dom->getElementsByTagName('link');
- for ($i = 0; $i < $links->length; $i++) {
- $node = $links->item($i);
- if (!$node->hasAttributes()) {
- return $node->textContent;
- }
- }
- return false;
- }
-
- function getAltLink($item)
- {
- // Check for an atom link...
- $link = $this->getAtomLink($item, array('rel' => 'alternate', 'type' => 'text/html'));
- if (!$link) {
- $link = $this->getRssLink($item);
- }
- return $link;
- }
-
- function getHubLink()
- {
- return $this->getAtomLink($this->feed, array('rel' => 'hub'));
- }
-
- function getSalmonLink()
- {
- return $this->getAtomLink($this->feed, array('rel' => 'salmon'));
- }
-
- function getSelfLink()
- {
- return $this->getAtomLink($this->feed, array('rel' => 'self'));
- }
-
- /**
- * Get an appropriate avatar image source URL, if available.
- * @return mixed string or false
- */
- function getAvatar()
- {
- $logo = $this->feed->logo;
- if ($logo) {
- return $logo;
- }
- $icon = $this->feed->icon;
- if ($icon) {
- return $icon;
- }
- return common_path('plugins/OStatus/images/48px-Feed-icon.svg.png');
- }
-
- function profile($preview=false)
- {
- if ($preview) {
- $profile = new FeedSubPreviewProfile();
- } else {
- $profile = new Profile();
- }
-
- // @todo validate/normalize nick?
- $profile->nickname = $this->feed->title;
- $profile->fullname = $this->feed->title;
- $profile->homepage = $this->getAltLink($this->feed);
- $profile->bio = $this->feed->description;
- $profile->profileurl = $this->getAltLink($this->feed);
-
- if ($preview) {
- $profile->avatar = $this->getAvatar();
- }
-
- // @todo tags from categories
- // @todo lat/lon/location?
-
- return $profile;
- }
-
- function notice($index=1, $preview=false)
- {
- $entry = $this->feed->getEntryByOffset($index);
- if (!$entry) {
- return null;
- }
-
- if ($preview) {
- $notice = new FeedSubPreviewNotice($this->profile(true));
- $notice->id = -1;
- } else {
- $notice = new Notice();
- $notice->profile_id = $this->profileIdForEntry($index);
- }
-
- $link = $this->getAltLink($entry);
- if (empty($link)) {
- if (preg_match('!^https?://!', $entry->id)) {
- $link = $entry->id;
- common_log(LOG_DEBUG, "No link on entry, using URL from id: $link");
- }
- }
- $notice->uri = $link;
- $notice->url = $link;
- $notice->content = $this->noticeFromEntry($entry);
- $notice->rendered = common_render_content($notice->content, $notice); // @fixme this is failing on group posts
- $notice->created = common_sql_date($entry->updated); // @fixme
- $notice->is_local = Notice::GATEWAY;
- $notice->source = 'feed';
-
- $location = $this->getLocation($entry);
- if ($location) {
- if ($location->location_id) {
- $notice->location_ns = $location->location_ns;
- $notice->location_id = $location->location_id;
- }
- $notice->lat = $location->lat;
- $notice->lon = $location->lon;
- }
-
- return $notice;
- }
-
- function profileIdForEntry($index=1)
- {
- // hack hack hack
- // should get profile for this entry's author...
- $feeduri = $this->getSelfLink();
- $remote = Ostatus_profile::staticGet('feeduri', $feeduri);
- if ($remote) {
- return $remote->profile_id;
- } else {
- throw new Exception("Can't find feed profile for $feeduri");
- }
- }
-
- /**
- * Parse location given as a GeoRSS-simple point, if provided.
- * http://www.georss.org/simple
- *
- * @param feed item $entry
- * @return mixed Location or false
- */
- function getLocation($entry)
- {
- $dom = $entry->model;
- $points = $dom->getElementsByTagNameNS('http://www.georss.org/georss', 'point');
-
- for ($i = 0; $i < $points->length; $i++) {
- $point = $points->item(0)->textContent;
- $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
- $point = preg_replace('/\s+/', ' ', $point);
- $point = trim($point);
- $coords = explode(' ', $point);
- if (count($coords) == 2) {
- list($lat, $lon) = $coords;
- if (is_numeric($lat) && is_numeric($lon)) {
- common_log(LOG_INFO, "Looking up location for $lat $lon from georss");
- return Location::fromLatLon($lat, $lon);
- }
- }
- common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
- }
-
- return false;
- }
-
- /**
- * @param XML_Feed_Type $entry
- * @return string notice text, within post size limit
- */
- function noticeFromEntry($entry)
- {
- $max = Notice::maxContent();
- $ellipsis = "\xe2\x80\xa6"; // U+2026 HORIZONTAL ELLIPSIS
- $title = $entry->title;
- $link = $entry->link;
-
- // @todo We can get <category> entries like this:
- // $cats = $entry->getCategory('category', array(0, true));
- // but it feels like an awful hack. If it's accessible cleanly,
- // try adding #hashtags from the categories/tags on a post.
-
- $title = $entry->title;
- $link = $this->getAltLink($entry);
- if ($link) {
- // Blog post or such...
- // @todo Should we force a language here?
- $format = _m('New post: "%1$s" %2$s');
- $out = sprintf($format, $title, $link);
-
- // Trim link if needed...
- if (mb_strlen($out) > $max) {
- $link = common_shorten_url($link);
- $out = sprintf($format, $title, $link);
- }
-
- // Trim title if needed...
- if (mb_strlen($out) > $max) {
- $used = mb_strlen($out) - mb_strlen($title);
- $available = $max - $used - mb_strlen($ellipsis);
- $title = mb_substr($title, 0, $available) . $ellipsis;
- $out = sprintf($format, $title, $link);
- }
- } else {
- // No link? Consider a bare status update.
- if (mb_strlen($title) > $max) {
- $available = $max - mb_strlen($ellipsis);
- $out = mb_substr($title, 0, $available) . $ellipsis;
- } else {
- $out = $title;
- }
- }
-
- return $out;
- }
-}
diff --git a/plugins/OStatus/lib/hubverifyqueuehandler.php b/plugins/OStatus/lib/hubconfqueuehandler.php
index 125d13a77..c8e0b72fe 100644
--- a/plugins/OStatus/lib/hubverifyqueuehandler.php
+++ b/plugins/OStatus/lib/hubconfqueuehandler.php
@@ -22,24 +22,25 @@
* @package Hub
* @author Brion Vibber <brion@status.net>
*/
-class HubVerifyQueueHandler extends QueueHandler
+class HubConfQueueHandler extends QueueHandler
{
function transport()
{
- return 'hubverify';
+ return 'hubconf';
}
function handle($data)
{
$sub = $data['sub'];
$mode = $data['mode'];
+ $token = $data['token'];
assert($sub instanceof HubSub);
assert($mode === 'subscribe' || $mode === 'unsubscribe');
common_log(LOG_INFO, __METHOD__ . ": $mode $sub->callback $sub->topic");
try {
- $sub->verify($mode);
+ $sub->verify($mode, $token);
} catch (Exception $e) {
common_log(LOG_ERR, "Failed PuSH $mode verify to $sub->callback for $sub->topic: " .
$e->getMessage());
diff --git a/plugins/OStatus/lib/huboutqueuehandler.php b/plugins/OStatus/lib/huboutqueuehandler.php
index 0791c7e5d..3ad94646e 100644
--- a/plugins/OStatus/lib/huboutqueuehandler.php
+++ b/plugins/OStatus/lib/huboutqueuehandler.php
@@ -33,6 +33,7 @@ class HubOutQueueHandler extends QueueHandler
{
$sub = $data['sub'];
$atom = $data['atom'];
+ $retries = $data['retries'];
assert($sub instanceof HubSub);
assert(is_string($atom));
@@ -40,13 +41,20 @@ class HubOutQueueHandler extends QueueHandler
try {
$sub->push($atom);
} catch (Exception $e) {
- common_log(LOG_ERR, "Failed PuSH to $sub->callback for $sub->topic: " .
- $e->getMessage());
- // @fixme Reschedule a later delivery?
- return true;
+ $retries--;
+ $msg = "Failed PuSH to $sub->callback for $sub->topic: " .
+ $e->getMessage();
+ if ($retries > 0) {
+ common_log(LOG_ERR, "$msg; scheduling for $retries more tries");
+
+ // @fixme when we have infrastructure to schedule a retry
+ // after a delay, use it.
+ $sub->distribute($atom, $retries);
+ } else {
+ common_log(LOG_ERR, "$msg; discarding");
+ }
}
return true;
}
}
-
diff --git a/plugins/OStatus/lib/magicenvelope.php b/plugins/OStatus/lib/magicenvelope.php
new file mode 100644
index 000000000..fb8c57c71
--- /dev/null
+++ b/plugins/OStatus/lib/magicenvelope.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+class MagicEnvelope
+{
+ const ENCODING = 'base64url';
+
+ const NS = 'http://salmon-protocol.org/ns/magic-env';
+
+ private function normalizeUser($user_id)
+ {
+ if (substr($user_id, 0, 5) == 'http:' ||
+ substr($user_id, 0, 6) == 'https:' ||
+ substr($user_id, 0, 5) == 'acct:') {
+ return $user_id;
+ }
+
+ if (strpos($user_id, '@') !== FALSE) {
+ return 'acct:' . $user_id;
+ }
+
+ return 'http://' . $user_id;
+ }
+
+ public function getKeyPair($signer_uri)
+ {
+ $disco = new Discovery();
+
+ try {
+ $xrd = $disco->lookup($signer_uri);
+ } catch (Exception $e) {
+ return false;
+ }
+ if ($xrd->links) {
+ if ($link = Discovery::getService($xrd->links, Magicsig::PUBLICKEYREL)) {
+ list($type, $keypair) = explode(';', $link['href']);
+ return $keypair;
+ }
+ }
+ throw new Exception('Unable to locate signer public key');
+ }
+
+
+ public function signMessage($text, $mimetype, $keypair)
+ {
+ $signature_alg = Magicsig::fromString($keypair);
+ $armored_text = base64_encode($text);
+
+ return array(
+ 'data' => $armored_text,
+ 'encoding' => MagicEnvelope::ENCODING,
+ 'data_type' => $mimetype,
+ 'sig' => $signature_alg->sign($armored_text),
+ 'alg' => $signature_alg->getName()
+ );
+
+
+ }
+
+ public function toXML($env) {
+ $dom = new DOMDocument();
+
+ $envelope = $dom->createElementNS(MagicEnvelope::NS, 'me:env');
+ $envelope->setAttribute('xmlns:me', MagicEnvelope::NS);
+ $data = $dom->createElementNS(MagicEnvelope::NS, 'me:data', $env['data']);
+ $data->setAttribute('type', $env['data_type']);
+ $envelope->appendChild($data);
+ $enc = $dom->createElementNS(MagicEnvelope::NS, 'me:encoding', $env['encoding']);
+ $envelope->appendChild($enc);
+ $alg = $dom->createElementNS(MagicEnvelope::NS, 'me:alg', $env['alg']);
+ $envelope->appendChild($alg);
+ $sig = $dom->createElementNS(MagicEnvelope::NS, 'me:sig', $env['sig']);
+ $envelope->appendChild($sig);
+
+ $dom->appendChild($envelope);
+
+
+ return $dom->saveXML();
+ }
+
+
+ public function unfold($env)
+ {
+ $dom = new DOMDocument();
+ $dom->loadXML(base64_decode($env['data']));
+
+ if ($dom->documentElement->tagName != 'entry') {
+ return false;
+ }
+
+ $prov = $dom->createElementNS(MagicEnvelope::NS, 'me:provenance');
+ $prov->setAttribute('xmlns:me', MagicEnvelope::NS);
+ $data = $dom->createElementNS(MagicEnvelope::NS, 'me:data', $env['data']);
+ $data->setAttribute('type', $env['data_type']);
+ $prov->appendChild($data);
+ $enc = $dom->createElementNS(MagicEnvelope::NS, 'me:encoding', $env['encoding']);
+ $prov->appendChild($enc);
+ $alg = $dom->createElementNS(MagicEnvelope::NS, 'me:alg', $env['alg']);
+ $prov->appendChild($alg);
+ $sig = $dom->createElementNS(MagicEnvelope::NS, 'me:sig', $env['sig']);
+ $prov->appendChild($sig);
+
+ $dom->documentElement->appendChild($prov);
+
+ return $dom->saveXML();
+ }
+
+ public function getAuthor($text) {
+ $doc = new DOMDocument();
+ if (!$doc->loadXML($text)) {
+ return FALSE;
+ }
+
+ if ($doc->documentElement->tagName == 'entry') {
+ $authors = $doc->documentElement->getElementsByTagName('author');
+ foreach ($authors as $author) {
+ $uris = $author->getElementsByTagName('uri');
+ foreach ($uris as $uri) {
+ return $this->normalizeUser($uri->nodeValue);
+ }
+ }
+ }
+ }
+
+ public function checkAuthor($text, $signer_uri)
+ {
+ return ($this->getAuthor($text) == $signer_uri);
+ }
+
+ public function verify($env)
+ {
+ if ($env['alg'] != 'RSA-SHA256') {
+ common_log(LOG_DEBUG, "Salmon error: bad algorithm");
+ return false;
+ }
+
+ if ($env['encoding'] != MagicEnvelope::ENCODING) {
+ common_log(LOG_DEBUG, "Salmon error: bad encoding");
+ return false;
+ }
+
+ $text = base64_decode($env['data']);
+ $signer_uri = $this->getAuthor($text);
+
+ try {
+ $keypair = $this->getKeyPair($signer_uri);
+ } catch (Exception $e) {
+ common_log(LOG_DEBUG, "Salmon error: ".$e->getMessage());
+ return false;
+ }
+
+ $verifier = Magicsig::fromString($keypair);
+
+ if (!$verifier) {
+ common_log(LOG_DEBUG, "Salmon error: unable to parse keypair");
+ return false;
+ }
+
+ return $verifier->verify($env['data'], $env['sig']);
+ }
+
+ public function parse($text)
+ {
+ $dom = DOMDocument::loadXML($text);
+ return $this->fromDom($dom);
+ }
+
+ public function fromDom($dom)
+ {
+ if ($dom->documentElement->tagName == 'entry') {
+ $env_element = $dom->getElementsByTagNameNS(MagicEnvelope::NS, 'provenance')->item(0);
+ } else if ($dom->documentElement->tagName == 'me:env') {
+ $env_element = $dom->documentElement;
+ } else {
+ return false;
+ }
+
+ $data_element = $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'data')->item(0);
+
+ return array(
+ 'data' => trim($data_element->nodeValue),
+ 'data_type' => $data_element->getAttribute('type'),
+ 'encoding' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'encoding')->item(0)->nodeValue,
+ 'alg' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'alg')->item(0)->nodeValue,
+ 'sig' => $env_element->getElementsByTagNameNS(MagicEnvelope::NS, 'sig')->item(0)->nodeValue,
+ );
+ }
+
+}
diff --git a/plugins/OStatus/lib/hubdistribqueuehandler.php b/plugins/OStatus/lib/ostatusqueuehandler.php
index 245a57f72..d1e58f1d6 100644
--- a/plugins/OStatus/lib/hubdistribqueuehandler.php
+++ b/plugins/OStatus/lib/ostatusqueuehandler.php
@@ -18,46 +18,77 @@
*/
/**
- * Send a PuSH subscription verification from our internal hub.
- * Queue up final distribution for
- * @package Hub
+ * Prepare PuSH and Salmon distributions for an outgoing message.
+ *
+ * @package OStatusPlugin
* @author Brion Vibber <brion@status.net>
*/
-class HubDistribQueueHandler extends QueueHandler
+class OStatusQueueHandler extends QueueHandler
{
function transport()
{
- return 'hubdistrib';
+ return 'ostatus';
}
function handle($notice)
{
assert($notice instanceof Notice);
- $this->pushUser($notice);
+ $this->notice = $notice;
+ $this->user = User::staticGet($notice->profile_id);
+
+ $this->pushUser();
+
foreach ($notice->getGroups() as $group) {
- $this->pushGroup($notice, $group->group_id);
+ $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+ if ($oprofile) {
+ $this->pingReply($oprofile);
+ } else {
+ $this->pushGroup($group->id);
+ }
}
+
+ foreach ($notice->getReplies() as $profile_id) {
+ $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
+ if ($oprofile) {
+ $this->pingReply($oprofile);
+ }
+ }
+
return true;
}
-
- function pushUser($notice)
+
+ function pushUser()
{
- // See if there's any PuSH subscriptions, including OStatus clients.
- // @fixme handle group subscriptions as well
- // http://identi.ca/api/statuses/user_timeline/1.atom
- $feed = common_local_url('ApiTimelineUser',
- array('id' => $notice->profile_id,
- 'format' => 'atom'));
- $this->pushFeed($feed, array($this, 'userFeedForNotice'), $notice);
+ if ($this->user) {
+ // For local posts, ping the PuSH hub to update their feed.
+ // http://identi.ca/api/statuses/user_timeline/1.atom
+ $feed = common_local_url('ApiTimelineUser',
+ array('id' => $this->user->id,
+ 'format' => 'atom'));
+ $this->pushFeed($feed, array($this, 'userFeedForNotice'));
+ }
}
- function pushGroup($notice, $group_id)
+ function pushGroup($group_id)
{
+ // For a local group, ping the PuSH hub to update its feed.
+ // Updates may come from either a local or a remote user.
$feed = common_local_url('ApiTimelineGroup',
array('id' => $group_id,
'format' => 'atom'));
- $this->pushFeed($feed, array($this, 'groupFeedForNotice'), $group_id, $notice);
+ $this->pushFeed($feed, array($this, 'groupFeedForNotice'), $group_id);
+ }
+
+ function pingReply($oprofile)
+ {
+ if ($this->user) {
+ // For local posts, send a Salmon ping to the mentioned
+ // remote user or group.
+ // @fixme as an optimization we can skip this if the
+ // remote profile is subscribed to the author.
+ $oprofile->notifyDeferred($this->notice, $this->user);
+ }
}
/**
@@ -122,62 +153,32 @@ class HubDistribQueueHandler extends QueueHandler
function pushFeedInternal($atom, $sub)
{
common_log(LOG_INFO, "Preparing $sub->N PuSH distribution(s) for $sub->topic");
- $qm = QueueManager::get();
while ($sub->fetch()) {
- common_log(LOG_INFO, "Prepping PuSH distribution to $sub->callback for $sub->topic");
- $data = array('sub' => clone($sub),
- 'atom' => $atom);
- $qm->enqueue($data, 'hubout');
+ $sub->distribute($atom);
}
}
/**
* Build a single-item version of the sending user's Atom feed.
- * @param Notice $notice
* @return string
*/
- function userFeedForNotice($notice)
+ function userFeedForNotice()
{
- // @fixme this feels VERY hacky...
- // should probably be a cleaner way to do it
-
- ob_start();
- $api = new ApiTimelineUserAction();
- $api->prepare(array('id' => $notice->profile_id,
- 'format' => 'atom',
- 'max_id' => $notice->id,
- 'since_id' => $notice->id - 1));
- $api->showTimeline();
- $feed = ob_get_clean();
-
- // ...and override the content-type back to something normal... eww!
- // hope there's no other headers that got set while we weren't looking.
- header('Content-Type: text/html; charset=utf-8');
-
- common_log(LOG_DEBUG, $feed);
+ $atom = new AtomUserNoticeFeed($this->user);
+ $atom->addEntryFromNotice($this->notice);
+ $feed = $atom->getString();
+
return $feed;
}
- function groupFeedForNotice($group_id, $notice)
+ function groupFeedForNotice($group_id)
{
- // @fixme this feels VERY hacky...
- // should probably be a cleaner way to do it
-
- ob_start();
- $api = new ApiTimelineGroupAction();
- $args = array('id' => $group_id,
- 'format' => 'atom',
- 'max_id' => $notice->id,
- 'since_id' => $notice->id - 1);
- $api->prepare($args);
- $api->handle($args);
- $feed = ob_get_clean();
-
- // ...and override the content-type back to something normal... eww!
- // hope there's no other headers that got set while we weren't looking.
- header('Content-Type: text/html; charset=utf-8');
-
- common_log(LOG_DEBUG, $feed);
+ $group = User_group::staticGet('id', $group_id);
+
+ $atom = new AtomGroupNoticeFeed($group);
+ $atom->addEntryFromNotice($this->notice);
+ $feed = $atom->getString();
+
return $feed;
}
diff --git a/plugins/OStatus/lib/pushinqueuehandler.php b/plugins/OStatus/lib/pushinqueuehandler.php
new file mode 100644
index 000000000..1fd29ae30
--- /dev/null
+++ b/plugins/OStatus/lib/pushinqueuehandler.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Process a feed distribution POST from a PuSH hub.
+ * @package FeedSub
+ * @author Brion Vibber <brion@status.net>
+ */
+
+class PushInQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'pushin';
+ }
+
+ function handle($data)
+ {
+ assert(is_array($data));
+
+ $feedsub_id = $data['feedsub_id'];
+ $post = $data['post'];
+ $hmac = $data['hmac'];
+
+ $feedsub = FeedSub::staticGet('id', $feedsub_id);
+ if ($feedsub) {
+ try {
+ $feedsub->receive($post, $hmac);
+ } catch(Exception $e) {
+ common_log(LOG_ERR, "Exception during PuSH input processing for $feedsub->uri: " . $e->getMessage());
+ }
+ } else {
+ common_log(LOG_ERR, "Discarding POST to unknown feed subscription id $feedsub_id");
+ }
+ return true;
+ }
+}
diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php
index 8c77222a6..3d3341bc6 100644
--- a/plugins/OStatus/lib/salmon.php
+++ b/plugins/OStatus/lib/salmon.php
@@ -28,37 +28,83 @@
*/
class Salmon
{
- public function post($endpoint_uri, $xml)
+
+ const NS_REPLIES = "http://salmon-protocol.org/ns/salmon-replies";
+
+ const NS_MENTIONS = "http://salmon-protocol.org/ns/salmon-mention";
+
+ /**
+ * Sign and post the given Atom entry as a Salmon message.
+ *
+ * @fixme pass through the actor for signing?
+ *
+ * @param string $endpoint_uri
+ * @param string $xml
+ * @return boolean success
+ */
+ public function post($endpoint_uri, $xml, $actor)
{
if (empty($endpoint_uri)) {
- return FALSE;
+ return false;
+ }
+
+ try {
+ $xml = $this->createMagicEnv($xml, $actor);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Salmon unable to sign: " . $e->getMessage());
+ return false;
}
- $headers = array('Content-type: application/atom+xml');
+ $headers = array('Content-Type: application/magic-envelope+xml');
try {
$client = new HTTPClient();
$client->setBody($xml);
$response = $client->post($endpoint_uri, $headers);
} catch (HTTP_Request2_Exception $e) {
+ common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage());
return false;
}
if ($response->getStatus() != 200) {
+ common_log(LOG_ERR, "Salmon at $endpoint_uri returned status " .
+ $response->getStatus() . ': ' . $response->getBody());
return false;
}
-
+ return true;
}
- public function createMagicEnv($text, $userid)
+ public function createMagicEnv($text, $actor)
{
+ $magic_env = new MagicEnvelope();
+ $user = User::staticGet('id', $actor->id);
+ if ($user->id) {
+ // Use local key
+ $magickey = Magicsig::staticGet('user_id', $user->id);
+ if (!$magickey) {
+ // No keypair yet, let's generate one.
+ $magickey = new Magicsig();
+ $magickey->generate($user->id);
+ }
+ } else {
+ throw new Exception("Salmon invalid actor for signing");
+ }
+ try {
+ $env = $magic_env->signMessage($text, 'application/atom+xml', $magickey->toString());
+ } catch (Exception $e) {
+ return $text;
+ }
+ return $magic_env->toXML($env);
}
- public function verifyMagicEnv($env)
+ public function verifyMagicEnv($text)
{
+ $magic_env = new MagicEnvelope();
+
+ $env = $magic_env->parse($text);
-
+ return $magic_env->verify($env);
}
}
diff --git a/plugins/OStatus/lib/salmonaction.php b/plugins/OStatus/lib/salmonaction.php
new file mode 100644
index 000000000..fa9dc3b1d
--- /dev/null
+++ b/plugins/OStatus/lib/salmonaction.php
@@ -0,0 +1,196 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @author James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class SalmonAction extends Action
+{
+ var $xml = null;
+ var $activity = null;
+
+ function prepare($args)
+ {
+ StatusNet::setApi(true); // Send smaller error pages
+
+ parent::prepare($args);
+
+ if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+ $this->clientError(_m('This method requires a POST.'));
+ }
+
+ if (empty($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] != 'application/magic-envelope+xml') {
+ $this->clientError(_m('Salmon requires application/magic-envelope+xml'));
+ }
+
+ $xml = file_get_contents('php://input');
+
+
+ // Check the signature
+ $salmon = new Salmon;
+ if (!$salmon->verifyMagicEnv($xml)) {
+ common_log(LOG_DEBUG, "Salmon signature verification failed.");
+ $this->clientError(_m('Salmon signature verification failed.'));
+ } else {
+ $magic_env = new MagicEnvelope();
+ $env = $magic_env->parse($xml);
+ $xml = $magic_env->unfold($env);
+ }
+
+
+ $dom = DOMDocument::loadXML($xml);
+ if ($dom->documentElement->namespaceURI != Activity::ATOM ||
+ $dom->documentElement->localName != 'entry') {
+ common_log(LOG_DEBUG, "Got invalid Salmon post: $xml");
+ $this->clientError(_m('Salmon post must be an Atom entry.'));
+ }
+
+ $this->act = new Activity($dom->documentElement);
+ return true;
+ }
+
+ /**
+ * Check the posted activity type and break out to appropriate processing.
+ */
+
+ function handle($args)
+ {
+ StatusNet::setApi(true); // Send smaller error pages
+
+ common_log(LOG_DEBUG, "Got a " . $this->act->verb);
+ if (Event::handle('StartHandleSalmon', array($this->activity))) {
+ switch ($this->act->verb)
+ {
+ case ActivityVerb::POST:
+ $this->handlePost();
+ break;
+ case ActivityVerb::SHARE:
+ $this->handleShare();
+ break;
+ case ActivityVerb::FAVORITE:
+ $this->handleFavorite();
+ break;
+ case ActivityVerb::UNFAVORITE:
+ $this->handleUnfavorite();
+ break;
+ case ActivityVerb::FOLLOW:
+ case ActivityVerb::FRIEND:
+ $this->handleFollow();
+ break;
+ case ActivityVerb::UNFOLLOW:
+ $this->handleUnfollow();
+ break;
+ case ActivityVerb::JOIN:
+ $this->handleJoin();
+ break;
+ case ActivityVerb::LEAVE:
+ $this->handleLeave();
+ break;
+ case ActivityVerb::UPDATE_PROFILE:
+ $this->handleUpdateProfile();
+ break;
+ default:
+ throw new ClientException(_m("Unrecognized activity type."));
+ }
+ Event::handle('EndHandleSalmon', array($this->activity));
+ }
+ }
+
+ function handlePost()
+ {
+ throw new ClientException(_m("This target doesn't understand posts."));
+ }
+
+ function handleFollow()
+ {
+ throw new ClientException(_m("This target doesn't understand follows."));
+ }
+
+ function handleUnfollow()
+ {
+ throw new ClientException(_m("This target doesn't understand unfollows."));
+ }
+
+ function handleFavorite()
+ {
+ throw new ClientException(_m("This target doesn't understand favorites."));
+ }
+
+ function handleUnfavorite()
+ {
+ throw new ClientException(_m("This target doesn't understand unfavorites."));
+ }
+
+ function handleShare()
+ {
+ throw new ClientException(_m("This target doesn't understand share events."));
+ }
+
+ function handleJoin()
+ {
+ throw new ClientException(_m("This target doesn't understand joins."));
+ }
+
+ function handleLeave()
+ {
+ throw new ClientException(_m("This target doesn't understand leave events."));
+ }
+
+ /**
+ * Remote user sent us an update to their profile.
+ * If we already know them, accept the updates.
+ */
+ function handleUpdateProfile()
+ {
+ $oprofile = Ostatus_profile::getActorProfile($this->act);
+ if ($oprofile) {
+ common_log(LOG_INFO, "Got a profile-update ping from $oprofile->uri");
+ $oprofile->updateFromActivityObject($this->act->actor);
+ } else {
+ common_log(LOG_INFO, "Ignoring profile-update ping from unknown " . $this->act->actor->id);
+ }
+ }
+
+ /**
+ * @return Ostatus_profile
+ */
+ function ensureProfile()
+ {
+ $actor = $this->act->actor;
+ if (empty($actor->id)) {
+ common_log(LOG_ERR, "broken actor: " . var_export($actor, true));
+ common_log(LOG_ERR, "activity with no actor: " . var_export($this->act, true));
+ throw new Exception("Received a salmon slap from unidentified actor.");
+ }
+
+ return Ostatus_profile::ensureActivityObjectProfile($actor);
+ }
+
+ function saveNotice()
+ {
+ $oprofile = $this->ensureProfile();
+ return $oprofile->processPost($this->act, 'salmon');
+ }
+}
diff --git a/plugins/OStatus/lib/salmonqueuehandler.php b/plugins/OStatus/lib/salmonqueuehandler.php
new file mode 100644
index 000000000..7eeb5f8e9
--- /dev/null
+++ b/plugins/OStatus/lib/salmonqueuehandler.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a Salmon notification in the background.
+ * @package OStatusPlugin
+ * @author Brion Vibber <brion@status.net>
+ */
+class SalmonQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'salmon';
+ }
+
+ function handle($data)
+ {
+ assert(is_array($data));
+ assert(is_string($data['salmonuri']));
+ assert(is_string($data['entry']));
+
+ $actor = Profile::staticGet($data['actor']);
+
+ $salmon = new Salmon();
+ $salmon->post($data['salmonuri'], $data['entry'], $actor);
+
+ // @fixme detect failure and attempt to resend
+ return true;
+ }
+}
diff --git a/plugins/OStatus/lib/webfinger.php b/plugins/OStatus/lib/webfinger.php
deleted file mode 100644
index 417d54904..000000000
--- a/plugins/OStatus/lib/webfinger.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * A sample module to show best practices for StatusNet plugins
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @package StatusNet
- * @author James Walker <james@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link http://status.net/
- */
-
-define('WEBFINGER_SERVICE_REL_VALUE', 'lrdd');
-
-/**
- * Implement the webfinger protocol.
- */
-class Webfinger
-{
- /**
- * Perform a webfinger lookup given an account.
- */
- public function lookup($id)
- {
- $id = $this->normalize($id);
- list($name, $domain) = explode('@', $id);
-
- $links = $this->getServiceLinks($domain);
- if (!$links) {
- return false;
- }
-
- $services = array();
- foreach ($links as $link) {
- if ($link['template']) {
- return $this->getServiceDescription($link['template'], $id);
- }
- if ($link['href']) {
- return $this->getServiceDescription($link['href'], $id);
- }
- }
- }
-
- /**
- * Normalize an account ID
- */
- function normalize($id)
- {
- if (substr($id, 0, 7) == 'acct://') {
- return substr($id, 7);
- } else if (substr($id, 0, 5) == 'acct:') {
- return substr($id, 5);
- }
-
- return $id;
- }
-
- function getServiceLinks($domain)
- {
- $url = 'http://'. $domain .'/.well-known/host-meta';
- $content = $this->fetchURL($url);
- if (empty($content)) {
- common_log(LOG_DEBUG, 'Error fetching host-meta');
- return false;
- }
- $result = XRD::parse($content);
-
- // Ensure that the host == domain (spec may include signing later)
- if ($result->host != $domain) {
- return false;
- }
-
- $links = array();
- foreach ($result->links as $link) {
- if ($link['rel'] == WEBFINGER_SERVICE_REL_VALUE) {
- $links[] = $link;
- }
-
- }
- return $links;
- }
-
- function getServiceDescription($template, $id)
- {
- $url = $this->applyTemplate($template, 'acct:' . $id);
-
- $content = $this->fetchURL($url);
-
- return XRD::parse($content);
- }
-
- function fetchURL($url)
- {
- try {
- $client = new HTTPClient();
- $response = $client->get($url);
- } catch (HTTP_Request2_Exception $e) {
- return false;
- }
-
- if ($response->getStatus() != 200) {
- return false;
- }
-
- return $response->getBody();
- }
-
- function applyTemplate($template, $id)
- {
- $template = str_replace('{uri}', urlencode($id), $template);
-
- return $template;
- }
-
- function getHostMeta($domain, $template) {
- $xrd = new XRD();
- $xrd->host = $domain;
- $xrd->links[] = array('rel' => 'lrdd',
- 'template' => $template,
- 'title' => array('Resource Descriptor'));
-
- return $xrd->toXML();
- }
-}
-
-
diff --git a/plugins/OStatus/lib/xrd.php b/plugins/OStatus/lib/xrd.php
index 16d27f8eb..aa13ef024 100644
--- a/plugins/OStatus/lib/xrd.php
+++ b/plugins/OStatus/lib/xrd.php
@@ -53,17 +53,25 @@ class XRD
$xrd = new XRD();
$dom = new DOMDocument();
- $dom->loadXML($xml);
+ if (!$dom->loadXML($xml)) {
+ throw new Exception("Invalid XML");
+ }
$xrd_element = $dom->getElementsByTagName('XRD')->item(0);
+ if (!$xrd_element) {
+ throw new Exception("Invalid XML, missing XRD root");
+ }
// Check for host-meta host
- $host = $xrd_element->getElementsByTagName('Host')->item(0)->nodeValue;
+ $host = $xrd_element->getElementsByTagName('Host')->item(0);
if ($host) {
- $xrd->host = $host;
+ $xrd->host = $host->nodeValue;
}
// Loop through other elements
foreach ($xrd_element->childNodes as $node) {
+ if (!($node instanceof DOMElement)) {
+ continue;
+ }
switch ($node->tagName) {
case 'Expires':
$xrd->expires = $node->nodeValue;
@@ -144,9 +152,11 @@ class XRD
$link['href'] = $element->getAttribute('href');
$link['template'] = $element->getAttribute('template');
foreach ($element->childNodes as $node) {
- switch($node->tagName) {
- case 'Title':
- $link['title'][] = $node->nodeValue;
+ if ($node instanceof DOMElement) {
+ switch($node->tagName) {
+ case 'Title':
+ $link['title'][] = $node->nodeValue;
+ }
}
}
@@ -156,20 +166,20 @@ class XRD
function saveLink($doc, $link)
{
$link_element = $doc->createElement('Link');
- if ($link['rel']) {
+ if (!empty($link['rel'])) {
$link_element->setAttribute('rel', $link['rel']);
}
- if ($link['type']) {
+ if (!empty($link['type'])) {
$link_element->setAttribute('type', $link['type']);
}
- if ($link['href']) {
+ if (!empty($link['href'])) {
$link_element->setAttribute('href', $link['href']);
}
- if ($link['template']) {
+ if (!empty($link['template'])) {
$link_element->setAttribute('template', $link['template']);
}
- if (is_array($link['title'])) {
+ if (!empty($link['title']) && is_array($link['title'])) {
foreach($link['title'] as $title) {
$title = $doc->createElement('Title', $title);
$link_element->appendChild($title);
diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php
new file mode 100644
index 000000000..6881292ad
--- /dev/null
+++ b/plugins/OStatus/lib/xrdaction.php
@@ -0,0 +1,105 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class XrdAction extends Action
+{
+
+ public $uri;
+
+ public $user;
+
+ public $xrd;
+
+ function handle()
+ {
+ $nick = $this->user->nickname;
+
+ if (empty($this->xrd)) {
+ $xrd = new XRD();
+ } else {
+ $xrd = $this->xrd;
+ }
+
+ if (empty($xrd->subject)) {
+ $xrd->subject = Discovery::normalize($this->uri);
+ }
+ $xrd->alias[] = common_profile_url($nick);
+ $xrd->links[] = array('rel' => Discovery::PROFILEPAGE,
+ 'type' => 'text/html',
+ 'href' => common_profile_url($nick));
+
+ $xrd->links[] = array('rel' => Discovery::UPDATESFROM,
+ 'href' => common_local_url('ApiTimelineUser',
+ array('id' => $this->user->id,
+ 'format' => 'atom')),
+ 'type' => 'application/atom+xml');
+
+ // hCard
+ $xrd->links[] = array('rel' => Discovery::HCARD,
+ 'type' => 'text/html',
+ 'href' => common_local_url('hcard', array('nickname' => $nick)));
+
+ // XFN
+ $xrd->links[] = array('rel' => 'http://gmpg.org/xfn/11',
+ 'type' => 'text/html',
+ 'href' => common_profile_url($nick));
+ // FOAF
+ $xrd->links[] = array('rel' => 'describedby',
+ 'type' => 'application/rdf+xml',
+ 'href' => common_local_url('foaf',
+ array('nickname' => $nick)));
+
+ // Salmon
+ $salmon_url = common_local_url('usersalmon',
+ array('id' => $this->user->id));
+
+ $xrd->links[] = array('rel' => Salmon::NS_REPLIES,
+ 'href' => $salmon_url);
+
+ $xrd->links[] = array('rel' => Salmon::NS_MENTIONS,
+ 'href' => $salmon_url);
+
+ // Get this user's keypair
+ $magickey = Magicsig::staticGet('user_id', $this->user->id);
+ if (!$magickey) {
+ // No keypair yet, let's generate one.
+ $magickey = new Magicsig();
+ $magickey->generate($this->user->id);
+ }
+
+ $xrd->links[] = array('rel' => Magicsig::PUBLICKEYREL,
+ 'href' => 'data:application/magic-public-key;'. $magickey->toString(false));
+
+ // TODO - finalize where the redirect should go on the publisher
+ $url = common_local_url('ostatussub') . '?profile={uri}';
+ $xrd->links[] = array('rel' => 'http://ostatus.org/schema/1.0/subscribe',
+ 'template' => $url );
+
+ header('Content-type: text/xml');
+ print $xrd->toXML();
+ }
+
+}
diff --git a/plugins/OStatus/locale/OStatus.po b/plugins/OStatus/locale/OStatus.po
index dedc018e3..7e33a0eed 100644
--- a/plugins/OStatus/locale/OStatus.po
+++ b/plugins/OStatus/locale/OStatus.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,89 +16,297 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
-msgid "Feeds"
+#: actions/groupsalmon.php:51
+msgid "Can't accept remote posts for a remote group."
+msgstr ""
+
+#: actions/groupsalmon.php:123
+msgid "Can't read profile to set up group membership."
msgstr ""
-#: FeedSubPlugin.php:77
-msgid "Feed subscription options"
+#: actions/groupsalmon.php:126 actions/groupsalmon.php:169
+msgid "Groups can't join groups."
msgstr ""
-#: feedmunger.php:215
+#: actions/groupsalmon.php:153
#, php-format
-msgid "New post: \"%1$s\" %2$s"
+msgid "Could not join remote user %1$s to group %2$s."
msgstr ""
-#: actions/feedsubsettings.php:41
-msgid "Feed subscriptions"
+#: actions/groupsalmon.php:166
+msgid "Can't read profile to cancel group membership."
msgstr ""
-#: actions/feedsubsettings.php:52
-msgid ""
-"You can subscribe to feeds from other sites; updates will appear in your "
-"personal timeline."
+#: actions/groupsalmon.php:182
+#, php-format
+msgid "Could not remove remote user %1$s from group %2$s."
+msgstr ""
+
+#: actions/ostatusinit.php:40
+msgid "You can use the local subscription!"
+msgstr ""
+
+#: actions/ostatusinit.php:61
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/ostatusinit.php:79 actions/ostatussub.php:439
+msgid "Subscribe to user"
+msgstr ""
+
+#: actions/ostatusinit.php:97
+#, php-format
+msgid "Subscribe to %s"
msgstr ""
-#: actions/feedsubsettings.php:96
+#: actions/ostatusinit.php:102
+msgid "User nickname"
+msgstr ""
+
+#: actions/ostatusinit.php:103
+msgid "Nickname of the user you want to follow"
+msgstr ""
+
+#: actions/ostatusinit.php:106
+msgid "Profile Account"
+msgstr ""
+
+#: actions/ostatusinit.php:107
+msgid "Your account id (i.e. user@identi.ca)"
+msgstr ""
+
+#: actions/ostatusinit.php:110 actions/ostatussub.php:115
+#: OStatusPlugin.php:205
msgid "Subscribe"
msgstr ""
-#: actions/feedsubsettings.php:98
+#: actions/ostatusinit.php:128
+msgid "Must provide a remote profile."
+msgstr ""
+
+#: actions/ostatusinit.php:138
+msgid "Couldn't look up OStatus account profile."
+msgstr ""
+
+#: actions/ostatusinit.php:153
+msgid "Couldn't confirm remote profile address."
+msgstr ""
+
+#: actions/ostatusinit.php:171
+msgid "OStatus Connect"
+msgstr ""
+
+#: actions/ostatussub.php:68
+msgid "Address or profile URL"
+msgstr ""
+
+#: actions/ostatussub.php:70
+msgid "Enter the profile URL of a PubSubHubbub-enabled feed"
+msgstr ""
+
+#: actions/ostatussub.php:74
msgid "Continue"
msgstr ""
-#: actions/feedsubsettings.php:151
-msgid "Empty feed URL!"
+#: actions/ostatussub.php:112 OStatusPlugin.php:503
+msgid "Join"
+msgstr ""
+
+#: actions/ostatussub.php:113
+msgid "Join this group"
+msgstr ""
+
+#: actions/ostatussub.php:116
+msgid "Subscribe to this user"
+msgstr ""
+
+#: actions/ostatussub.php:137
+msgid "You are already subscribed to this user."
+msgstr ""
+
+#: actions/ostatussub.php:165
+msgid "You are already a member of this group."
msgstr ""
-#: actions/feedsubsettings.php:161
+#: actions/ostatussub.php:286
+msgid "Empty remote profile URL!"
+msgstr ""
+
+#: actions/ostatussub.php:297
+msgid "Invalid address format."
+msgstr ""
+
+#: actions/ostatussub.php:302
msgid "Invalid URL or could not reach server."
msgstr ""
-#: actions/feedsubsettings.php:164
+#: actions/ostatussub.php:304
msgid "Cannot read feed; server returned error."
msgstr ""
-#: actions/feedsubsettings.php:167
+#: actions/ostatussub.php:306
msgid "Cannot read feed; server returned an empty page."
msgstr ""
-#: actions/feedsubsettings.php:170
+#: actions/ostatussub.php:308
msgid "Bad HTML, could not find feed link."
msgstr ""
-#: actions/feedsubsettings.php:173
+#: actions/ostatussub.php:310
msgid "Could not find a feed linked from this URL."
msgstr ""
-#: actions/feedsubsettings.php:176
+#: actions/ostatussub.php:312
msgid "Not a recognized feed type."
msgstr ""
-#: actions/feedsubsettings.php:180
-msgid "Bad feed URL."
+#: actions/ostatussub.php:315
+#, php-format
+msgid "Bad feed URL: %s %s"
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatussub.php:336
+msgid "Already a member!"
msgstr ""
-#: actions/feedsubsettings.php:188
-msgid "Feed is not PuSH-enabled; cannot subscribe."
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatussub.php:346
+msgid "Remote group join failed!"
msgstr ""
-#: actions/feedsubsettings.php:208
-msgid "Feed subscription failed! Bad response from hub."
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatussub.php:350
+msgid "Remote group join aborted!"
msgstr ""
-#: actions/feedsubsettings.php:218
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:356
msgid "Already subscribed!"
msgstr ""
-#: actions/feedsubsettings.php:220
-msgid "Feed subscribed!"
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:361
+msgid "Remote subscription failed!"
msgstr ""
-#: actions/feedsubsettings.php:222
-msgid "Feed subscription failed!"
+#. TRANS: Page title for OStatus remote subscription form
+#: actions/ostatussub.php:459
+msgid "Authorize subscription"
+msgstr ""
+
+#: actions/ostatussub.php:470
+msgid ""
+"You can subscribe to users from other supported sites. Paste their address "
+"or profile URI below:"
+msgstr ""
+
+#: classes/Ostatus_profile.php:789
+#, php-format
+msgid "Tried to update avatar for unsaved remote profile %s"
msgstr ""
-#: actions/feedsubsettings.php:231
-msgid "Previewing feed:"
+#: classes/Ostatus_profile.php:797
+#, php-format
+msgid "Unable to fetch avatar from %s"
+msgstr ""
+
+#: lib/salmonaction.php:41
+msgid "This method requires a POST."
+msgstr ""
+
+#: lib/salmonaction.php:45
+msgid "Salmon requires application/magic-envelope+xml"
+msgstr ""
+
+#: lib/salmonaction.php:55
+msgid "Salmon signature verification failed."
+msgstr ""
+
+#: lib/salmonaction.php:67
+msgid "Salmon post must be an Atom entry."
+msgstr ""
+
+#: lib/salmonaction.php:115
+msgid "Unrecognized activity type."
+msgstr ""
+
+#: lib/salmonaction.php:123
+msgid "This target doesn't understand posts."
+msgstr ""
+
+#: lib/salmonaction.php:128
+msgid "This target doesn't understand follows."
+msgstr ""
+
+#: lib/salmonaction.php:133
+msgid "This target doesn't understand unfollows."
+msgstr ""
+
+#: lib/salmonaction.php:138
+msgid "This target doesn't understand favorites."
+msgstr ""
+
+#: lib/salmonaction.php:143
+msgid "This target doesn't understand unfavorites."
+msgstr ""
+
+#: lib/salmonaction.php:148
+msgid "This target doesn't understand share events."
+msgstr ""
+
+#: lib/salmonaction.php:153
+msgid "This target doesn't understand joins."
+msgstr ""
+
+#: lib/salmonaction.php:158
+msgid "This target doesn't understand leave events."
+msgstr ""
+
+#: OStatusPlugin.php:319
+#, php-format
+msgid "Sent from %s via OStatus"
+msgstr ""
+
+#: OStatusPlugin.php:371
+msgid "Could not set up remote subscription."
+msgstr ""
+
+#: OStatusPlugin.php:487
+msgid "Could not set up remote group membership."
+msgstr ""
+
+#: OStatusPlugin.php:504
+#, php-format
+msgid "%s has joined group %s."
+msgstr ""
+
+#: OStatusPlugin.php:512
+msgid "Failed joining remote group."
+msgstr ""
+
+#: OStatusPlugin.php:553
+msgid "Leave"
+msgstr ""
+
+#: OStatusPlugin.php:554
+#, php-format
+msgid "%s has left group %s."
+msgstr ""
+
+#: OStatusPlugin.php:685
+msgid "Subscribe to remote user"
+msgstr ""
+
+#: OStatusPlugin.php:726
+msgid "Profile update"
+msgstr ""
+
+#: OStatusPlugin.php:727
+#, php-format
+msgid "%s has updated their profile page."
+msgstr ""
+
+#: tests/gettext-speedtest.php:57
+msgid "Feeds"
msgstr ""
diff --git a/plugins/OStatus/scripts/updateostatus.php b/plugins/OStatus/scripts/updateostatus.php
new file mode 100644
index 000000000..d553a7d62
--- /dev/null
+++ b/plugins/OStatus/scripts/updateostatus.php
@@ -0,0 +1,127 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+
+$shortoptions = 'i:n:a';
+$longoptions = array('id=', 'nickname=', 'all');
+
+$helptext = <<<END_OF_UPDATEOSTATUS_HELP
+updateostatus.php [options]
+update the OMB subscriptions of a user to use OStatus if possible
+
+ -i --id ID of user to update
+ -n --nickname nickname of the user to update
+ -a --all update all
+
+END_OF_UPDATEOSTATUS_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+try {
+ $user = null;
+
+ if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $user = User::staticGet('id', $id);
+ if (empty($user)) {
+ throw new Exception("Can't find user with id '$id'.");
+ }
+ updateProfileURL($user);
+ } else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $user = User::staticGet('nickname', $nickname);
+ if (empty($user)) {
+ throw new Exception("Can't find user with nickname '$nickname'");
+ }
+ updateProfileURL($user);
+ } else if (have_option('a', 'all')) {
+ $user = new User();
+ if ($user->find()) {
+ while ($user->fetch()) {
+ updateOStatus($user);
+ }
+ }
+ } else {
+ show_help();
+ exit(1);
+ }
+} catch (Exception $e) {
+ print $e->getMessage()."\n";
+ exit(1);
+}
+
+function updateOStatus($user)
+{
+ if (!have_option('q', 'quiet')) {
+ echo "{$user->nickname}...";
+ }
+
+ $up = $user->getProfile();
+
+ $sp = $user->getSubscriptions();
+
+ $rps = array();
+
+ while ($sp->fetch()) {
+ $remote = Remote_profile::staticGet('id', $sp->id);
+
+ if (!empty($remote)) {
+ $rps[] = clone($sp);
+ }
+ }
+
+ if (!have_option('q', 'quiet')) {
+ echo count($rps) . "\n";
+ }
+
+ foreach ($rps as $rp) {
+ try {
+ if (!have_option('q', 'quiet')) {
+ echo "Checking {$rp->nickname}...";
+ }
+
+ $op = Ostatus_profile::ensureProfile($rp->profileurl);
+
+ if (empty($op)) {
+ echo "can't convert.\n";
+ continue;
+ } else {
+ if (!have_option('q', 'quiet')) {
+ echo "Converting...";
+ }
+ Subscription::cancel($up, $rp);
+ Subscription::start($up, $op->localProfile());
+ if (!have_option('q', 'quiet')) {
+ echo "done.\n";
+ }
+ }
+
+ } catch (Exception $e) {
+ if (!have_option('q', 'quiet')) {
+ echo "fail.\n";
+ }
+ continue;
+ common_log(LOG_WARNING, "Couldn't convert OMB subscription (" . $up->nickname . ", " . $rp->nickname .
+ ") to OStatus: " . $e->getMessage());
+ continue;
+ }
+ }
+}
diff --git a/plugins/OStatus/tests/ActivityParseTests.php b/plugins/OStatus/tests/ActivityParseTests.php
deleted file mode 100644
index fa8bcdda2..000000000
--- a/plugins/OStatus/tests/ActivityParseTests.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
- print "This script must be run from the command line\n";
- exit();
-}
-
-// XXX: we should probably have some common source for this stuff
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
-define('STATUSNET', true);
-
-require_once INSTALLDIR . '/lib/common.php';
-require_once INSTALLDIR . '/plugins/OStatus/lib/activity.php';
-
-class ActivityParseTests extends PHPUnit_Framework_TestCase
-{
- public function testExample1()
- {
- global $_example1;
- $dom = DOMDocument::loadXML($_example1);
- $act = new Activity($dom->documentElement);
-
- $this->assertFalse(empty($act));
- $this->assertEquals($act->time, 1243860840);
- $this->assertEquals($act->verb, ActivityVerb::POST);
- }
-
- public function testExample3()
- {
- global $_example3;
- $dom = DOMDocument::loadXML($_example3);
-
- $feed = $dom->documentElement;
-
- $entries = $feed->getElementsByTagName('entry');
-
- $entry = $entries->item(0);
-
- $act = new Activity($entry, $feed);
-
- $this->assertFalse(empty($act));
- $this->assertEquals($act->time, 1071340202);
- $this->assertEquals($act->link, 'http://example.org/2003/12/13/atom03.html');
-
- $this->assertEquals($act->verb, ActivityVerb::POST);
-
- $this->assertFalse(empty($act->actor));
- $this->assertEquals($act->actor->type, ActivityObject::PERSON);
- $this->assertEquals($act->actor->title, 'John Doe');
- $this->assertEquals($act->actor->id, 'mailto:johndoe@example.com');
-
- $this->assertFalse(empty($act->object));
- $this->assertEquals($act->object->type, ActivityObject::NOTE);
- $this->assertEquals($act->object->id, 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a');
- $this->assertEquals($act->object->title, 'Atom-Powered Robots Run Amok');
- $this->assertEquals($act->object->summary, 'Some text.');
- $this->assertEquals($act->object->link, 'http://example.org/2003/12/13/atom03.html');
-
- $this->assertTrue(empty($act->context));
- $this->assertTrue(empty($act->target));
-
- $this->assertEquals($act->entry, $entry);
- $this->assertEquals($act->feed, $feed);
- }
-}
-
-$_example1 = <<<EXAMPLE1
-<?xml version='1.0' encoding='UTF-8'?>
-<entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
- <id>tag:versioncentral.example.org,2009:/commit/1643245</id>
- <published>2009-06-01T12:54:00Z</published>
- <title>Geraldine committed a change to yate</title>
- <content type="xhtml">Geraldine just committed a change to yate on VersionCentral</content>
- <link rel="alternate" type="text/html"
- href="http://versioncentral.example.org/geraldine/yate/commit/1643245" />
- <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
- <activity:verb>http://versioncentral.example.org/activity/commit</activity:verb>
- <activity:object>
- <activity:object-type>http://versioncentral.example.org/activity/changeset</activity:object-type>
- <id>tag:versioncentral.example.org,2009:/change/1643245</id>
- <title>Punctuation Changeset</title>
- <summary>Fixing punctuation because it makes it more readable.</summary>
- <link rel="alternate" type="text/html" href="..." />
- </activity:object>
-</entry>
-EXAMPLE1;
-
-$_example2 = <<<EXAMPLE2
-<?xml version='1.0' encoding='UTF-8'?>
-<entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
- <id>tag:photopanic.example.com,2008:activity01</id>
- <title>Geraldine posted a Photo on PhotoPanic</title>
- <published>2008-11-02T15:29:00Z</published>
- <link rel="alternate" type="text/html" href="/geraldine/activities/1" />
- <activity:verb>
- http://activitystrea.ms/schema/1.0/post
- </activity:verb>
- <activity:object>
- <id>tag:photopanic.example.com,2008:photo01</id>
- <title>My Cat</title>
- <published>2008-11-02T15:29:00Z</published>
- <link rel="alternate" type="text/html" href="/geraldine/photos/1" />
- <activity:object-type>
- tag:atomactivity.example.com,2008:photo
- </activity:object-type>
- <source>
- <title>Geraldine's Photos</title>
- <link rel="self" type="application/atom+xml" href="/geraldine/photofeed.xml" />
- <link rel="alternate" type="text/html" href="/geraldine/" />
- </source>
- </activity:object>
- <content type="html">
- &lt;p&gt;Geraldine posted a Photo on PhotoPanic&lt;/p&gt;
- &lt;img src="/geraldine/photo1.jpg"&gt;
- </content>
-</entry>
-EXAMPLE2;
-
-$_example3 = <<<EXAMPLE3
-<?xml version="1.0" encoding="utf-8"?>
-
-<feed xmlns="http://www.w3.org/2005/Atom">
-
- <title>Example Feed</title>
- <subtitle>A subtitle.</subtitle>
- <link href="http://example.org/feed/" rel="self" />
- <link href="http://example.org/" />
- <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
- <updated>2003-12-13T18:30:02Z</updated>
- <author>
- <name>John Doe</name>
- <email>johndoe@example.com</email>
- </author>
-
- <entry>
- <title>Atom-Powered Robots Run Amok</title>
- <link href="http://example.org/2003/12/13/atom03" />
- <link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
- <link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
- <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
- <updated>2003-12-13T18:30:02Z</updated>
- <summary>Some text.</summary>
- </entry>
-
-</feed>
-EXAMPLE3;
diff --git a/plugins/OStatus/tests/FeedMungerTest.php b/plugins/OStatus/tests/FeedMungerTest.php
deleted file mode 100644
index 0ce24c9fb..000000000
--- a/plugins/OStatus/tests/FeedMungerTest.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
- print "This script must be run from the command line\n";
- exit();
-}
-
-define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
-define('STATUSNET', true);
-define('LACONICA', true);
-
-require_once INSTALLDIR . '/lib/common.php';
-require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php';
-
-require_once 'XML/Feed/Parser.php';
-
-class FeedMungerTest extends PHPUnit_Framework_TestCase
-{
- /**
- * @dataProvider profileProvider
- *
- */
- public function testProfiles($xml, $expected)
- {
- $feed = new XML_Feed_Parser($xml, false, false, true);
-
- $munger = new FeedMunger($feed);
- $profile = $munger->profile();
-
- foreach ($expected as $field => $val) {
- $this->assertEquals($expected[$field], $profile->$field, "profile->$field");
- }
- }
-
- static public function profileProvider()
- {
- return array(
- array(self::samplefeed(),
- array('nickname' => 'leÅ­ksman', // @todo does this need to be asciified?
- 'fullname' => 'leÅ­ksman',
- 'bio' => 'reticula, electronica, & oddities',
- 'homepage' => 'http://leuksman.com/log')));
- }
-
- /**
- * @dataProvider noticeProvider
- *
- */
- public function testNotices($xml, $entryIndex, $expected)
- {
- $feed = new XML_Feed_Parser($xml, false, false, true);
- $entry = $feed->getEntryByOffset($entryIndex);
-
- $munger = new FeedMunger($feed);
- $notice = $munger->noticeFromEntry($entry);
-
- $this->assertTrue(mb_strlen($notice) <= Notice::maxContent());
- $this->assertEquals($expected, $notice);
- }
-
- static public function noticeProvider()
- {
- return array(
- array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/short/link</link></item></channel></rss>', 0,
- 'New post: "A fairly short title" http://example.com/short/link'),
- // Requires URL shortening ...
- array('<rss version="2.0"><channel><item><title>A fairly short title</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
- 'New post: "A fairly short title" http://ur1.ca/g2o1'),
- array('<rss version="2.0"><channel><item><title>A fairly long title in this case, which will have to get cut down at some point alongside its very long link. Really who even makes titles this long? It\'s just ridiculous imo...</title><link>http://example.com/but/a/very/long/link/indeed/this/is/far/too/long/for/mere/humans/to/comprehend/oh/my/gosh</link></item></channel></rss>', 0,
- 'New post: "A fairly long title in this case, which will have to get cut down at some point alongside its very long li…" http://ur1.ca/g2o1'),
- // Some real sample feeds
- array(self::samplefeed(), 0,
- 'New post: "Compiling PHP on Snow Leopard" http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/'),
- array(self::samplefeedBlogspot(), 0,
- 'New post: "I love posting" http://briontest.blogspot.com/2009/11/i-love-posting.html'),
- array(self::samplefeedBlogspot(), 1,
- 'New post: "Hey dude" http://briontest.blogspot.com/2009/11/hey-dude.html'),
- );
- }
-
- static protected function samplefeed()
- {
- $xml = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
- $samplefeed = $xml . <<<END
-<rss version="2.0"
- xmlns:content="http://purl.org/rss/1.0/modules/content/"
- xmlns:wfw="http://wellformedweb.org/CommentAPI/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:atom="http://www.w3.org/2005/Atom"
- xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
- xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
- >
-
-<channel>
- <title>leÅ­ksman</title>
- <atom:link href="http://leuksman.com/log/feed/" rel="self" type="application/rss+xml" />
- <link>http://leuksman.com/log</link>
- <description>reticula, electronica, &#38; oddities</description>
-
- <lastBuildDate>Thu, 12 Nov 2009 17:44:42 +0000</lastBuildDate>
- <generator>http://wordpress.org/?v=2.8.6</generator>
- <language>en</language>
- <sy:updatePeriod>hourly</sy:updatePeriod>
- <sy:updateFrequency>1</sy:updateFrequency>
- <item>
-
- <title>Compiling PHP on Snow Leopard</title>
- <link>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/</link>
- <comments>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/#comments</comments>
- <pubDate>Thu, 12 Nov 2009 17:44:42 +0000</pubDate>
- <dc:creator>brion</dc:creator>
- <category><![CDATA[apple]]></category>
-
- <category><![CDATA[devel]]></category>
-
- <guid isPermaLink="false">http://leuksman.com/log/?p=649</guid>
- <description><![CDATA[If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:
-
-Find the EXTRA_LIBS definition and add -lresolv to the end
-Find the EXE_EXT definition and remove .dSYM
-
-Standard make and make install [...]]]></description>
- <content:encoded><![CDATA[<p>If you&#8217;ve been having trouble compiling your own PHP installations on Mac OS X 10.6, here&#8217;s the secret to making it not suck! After running the configure script, edit the generated Makefile and make these fixes:</p>
-<ul>
-<li>Find the <strong>EXTRA_LIBS</strong> definition and add <strong>-lresolv</strong> to the end</li>
-<li>Find the <strong>EXE_EXT</strong> definition and remove <strong>.dSYM</strong></li>
-</ul>
-<p>Standard make and make install should work from here&#8230;</p>
-<p>For reference, here&#8217;s the whole configure line I currently use; MySQL is installed from the downloadable installer; other deps from MacPorts:</p>
-<p>&#8216;./configure&#8217; &#8216;&#8211;prefix=/opt/php52&#8242; &#8216;&#8211;with-mysql=/usr/local/mysql&#8217; &#8216;&#8211;with-zlib&#8217; &#8216;&#8211;with-bz2&#8242; &#8216;&#8211;enable-mbstring&#8217; &#8216;&#8211;enable-exif&#8217; &#8216;&#8211;enable-fastcgi&#8217; &#8216;&#8211;with-xmlrpc&#8217; &#8216;&#8211;with-xsl&#8217; &#8216;&#8211;with-readline=/opt/local&#8217; &#8211;without-iconv &#8211;with-gd &#8211;with-png-dir=/opt/local &#8211;with-jpeg-dir=/opt/local &#8211;with-curl &#8211;with-gettext=/opt/local &#8211;with-mysqli=/usr/local/mysql/bin/mysql_config &#8211;with-tidy=/opt/local &#8211;enable-pcntl &#8211;with-openssl</p>
-]]></content:encoded>
- <wfw:commentRss>http://leuksman.com/log/2009/11/12/compiling-php-on-snow-leopard/feed/</wfw:commentRss>
- <slash:comments>0</slash:comments>
- </item>
-</channel>
-</rss>
-END;
- return $samplefeed;
- }
-
- static protected function samplefeedBlogspot()
- {
- return <<<END
-<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7780083508531697167</id><updated>2009-11-19T12:56:11.233-08:00</updated><title type='text'>Brion's Cool Test Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8456671879000290677</id><published>2009-11-19T12:55:00.000-08:00</published><updated>2009-11-19T12:56:11.241-08:00</updated><title type='text'>I love posting</title><content type='html'>It's pretty awesome, if you like that sort of thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8456671879000290677?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8456671879000290677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8456671879000290677'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/i-love-posting.html' title='I love posting'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7780083508531697167.post-8202296917897346633</id><published>2009-11-18T13:52:00.001-08:00</published><updated>2009-11-18T13:52:48.444-08:00</updated><title type='text'>Hey dude</title><content type='html'>testingggggggggg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7780083508531697167-8202296917897346633?l=briontest.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://briontest.blogspot.com/feeds/8202296917897346633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7780083508531697167/posts/default/8202296917897346633'/><link rel='alternate' type='text/html' href='http://briontest.blogspot.com/2009/11/hey-dude.html' title='Hey dude'/><author><name>brion</name><uri>http://www.blogger.com/profile/12932299467049762017</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='05912464053145602436'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
-END;
- }
-}
diff --git a/plugins/OStatus/theme/base/css/ostatus.css b/plugins/OStatus/theme/base/css/ostatus.css
index 9bc90a731..c2d724158 100644
--- a/plugins/OStatus/theme/base/css/ostatus.css
+++ b/plugins/OStatus/theme/base/css/ostatus.css
@@ -7,24 +7,68 @@
* @link http://status.net/
*/
-#form_ostatus_connect.dialogbox {
+#form_ostatus_connect.dialogbox,
+#form_ostatus_sub.dialogbox {
width:70%;
background-image:none;
}
-#form_ostatus_connect.dialogbox .form_data label {
+#form_ostatus_sub.dialogbox {
+width:65%;
+}
+#form_ostatus_connect.dialogbox .form_data label,
+#form_ostatus_sub.dialogbox .form_data label {
width:34%;
}
-#form_ostatus_connect.dialogbox .form_data input {
+#form_ostatus_connect.dialogbox .form_data input,
+#form_ostatus_sub.dialogbox .form_data input {
width:57%;
}
-#form_ostatus_connect.dialogbox .form_data .form_guide {
+#form_ostatus_connect.dialogbox .form_data .form_guide,
+#form_ostatus_sub.dialogbox .form_data .form_guide {
margin-left:36%;
}
-#form_ostatus_connect.dialogbox #ostatus_nickname {
+#form_ostatus_connect.dialogbox #ostatus_nickname,
+#form_ostatus_sub.dialogbox #ostatus_nickname {
display:none;
}
-#form_ostatus_connect.dialogbox .submit_dialogbox {
+#form_ostatus_connect.dialogbox .submit_dialogbox,
+#form_ostatus_sub.dialogbox .submit_dialogbox {
min-width:96px;
}
+
+#entity_remote_subscribe {
+padding:0;
+float:right;
+position:relative;
+}
+
+.section .entity_actions {
+margin-bottom:0;
+margin-right:7px;
+}
+
+#entity_remote_subscribe .dialogbox {
+width:405px;
+}
+
+.aside #entity_subscriptions .more,
+.aside #entity_groups .more {
+float:left;
+}
+
+.section #entity_remote_subscribe {
+border:0;
+}
+
+.section .entity_remote_subscribe {
+color:#002FA7;
+box-shadow:none;
+-moz-box-shadow:none;
+-webkit-box-shadow:none;
+background-color:transparent;
+background-position:0 -1183px;
+padding:0 0 0 23px;
+border:0;
+}
diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php
index 248afe3fa..6b35ec3e1 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -235,9 +235,14 @@ class OpenIDPlugin extends Plugin
switch ($name)
{
case 'register':
- $instr = '(Have an [OpenID](http://openid.net/)? ' .
- 'Try our [OpenID registration]'.
- '(%%action.openidlogin%%)!)';
+ if (common_logged_in()) {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ '[Add an OpenID to your account](%%action.openidsettings%%)!';
+ } else {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ 'Try our [OpenID registration]'.
+ '(%%action.openidlogin%%)!)';
+ }
break;
case 'login':
$instr = '(Have an [OpenID](http://openid.net/)? ' .
diff --git a/plugins/OpenID/doc-src/openid b/plugins/OpenID/doc-src/openid
index c741e3674..f2dc610a5 100644
--- a/plugins/OpenID/doc-src/openid
+++ b/plugins/OpenID/doc-src/openid
@@ -3,7 +3,7 @@
If you already have an account on %%site.name%%, you can [login](%%action.login%%) with your username and password as usual.
To use OpenID in the future, you can [add an OpenID to your account](%%action.openidsettings%%) after you have logged in normally.
-There are many [Public OpenID providers](http://wiki.openid.net/Public_OpenID_providers), and you may already have an OpenID-enabled account on another service.
+There are many [Public OpenID providers](http://wiki.openid.net/OpenID-Providers), and you may already have an OpenID-enabled account on another service.
* On wikis: If you have an account on an OpenID-enabled wiki, like [Wikitravel](http://wikitravel.org/), [wikiHow](http://www.wikihow.com/), [Vinismo](http://vinismo.com/), [AboutUs](http://aboutus.org/) or [Keiki](http://kei.ki/), you can log in to %%site.name%% by entering the **full URL** of your user page on that other wiki in the box above. For example, *http://kei.ki/en/User:Evan*.
* [Yahoo!](http://openid.yahoo.com/) : If you have an account with Yahoo!, you can log in to this site by entering your Yahoo!-provided OpenID in the box above. Yahoo! OpenID URLs have the form *https://me.yahoo.com/yourusername*.
diff --git a/plugins/OpenID/locale/OpenID.po b/plugins/OpenID/locale/OpenID.po
index 34738bc75..7ed879835 100644
--- a/plugins/OpenID/locale/OpenID.po
+++ b/plugins/OpenID/locale/OpenID.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,73 +16,152 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: openidlogin.php:30 finishopenidlogin.php:34
+#: finishaddopenid.php:67
+msgid "Not logged in."
+msgstr ""
+
+#: finishaddopenid.php:88 finishopenidlogin.php:149
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#: finishaddopenid.php:92 finishopenidlogin.php:153
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishaddopenid.php:112
+msgid "You already have this OpenID!"
+msgstr ""
+
+#: finishaddopenid.php:114
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#: finishaddopenid.php:126
+msgid "Error connecting user."
+msgstr ""
+
+#: finishaddopenid.php:131
+msgid "Error updating profile"
+msgstr ""
+
+#: finishaddopenid.php:170 openidlogin.php:95
+msgid "OpenID Login"
+msgstr ""
+
+#: finishopenidlogin.php:34 openidlogin.php:30
msgid "Already logged in."
msgstr ""
-#: openidlogin.php:37 openidsettings.php:194 finishopenidlogin.php:38
+#: finishopenidlogin.php:38 openidlogin.php:37 openidsettings.php:194
msgid "There was a problem with your session token. Try again, please."
msgstr ""
-#: openidlogin.php:66
+#: finishopenidlogin.php:43
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: finishopenidlogin.php:52 openidsettings.php:208
+msgid "Something weird happened."
+msgstr ""
+
+#: finishopenidlogin.php:66
#, php-format
msgid ""
-"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
-"before changing your settings."
+"This is the first time you've logged into %s so we must connect your OpenID "
+"to a local account. You can either create a new account, or connect with "
+"your existing account, if you have one."
msgstr ""
-#: openidlogin.php:70
-#, php-format
-msgid "Login with an [OpenID](%%doc.openid%%) account."
+#: finishopenidlogin.php:72
+msgid "OpenID Account Setup"
msgstr ""
-#: openidlogin.php:95 finishaddopenid.php:170
-msgid "OpenID Login"
+#: finishopenidlogin.php:97
+msgid "Create new account"
msgstr ""
-#: openidlogin.php:112
-msgid "OpenID login"
+#: finishopenidlogin.php:99
+msgid "Create a new user with this nickname."
msgstr ""
-#: openidlogin.php:117 openidsettings.php:107
-msgid "OpenID URL"
+#: finishopenidlogin.php:102
+msgid "New nickname"
msgstr ""
-#: openidlogin.php:119
-msgid "Your OpenID URL"
+#: finishopenidlogin.php:104
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
-#: openidlogin.php:122
-msgid "Remember me"
+#: finishopenidlogin.php:114
+msgid "My text and files are available under "
msgstr ""
-#: openidlogin.php:123
-msgid "Automatically login in the future; not for shared computers!"
+#: finishopenidlogin.php:117
+msgid ""
+" except this private data: password, email address, IM address, phone number."
msgstr ""
-#: openidlogin.php:127
-msgid "Login"
+#: finishopenidlogin.php:121
+msgid "Create"
msgstr ""
-#: openidserver.php:106
-#, php-format
-msgid "You are not authorized to use the identity %s"
+#: finishopenidlogin.php:126
+msgid "Connect existing account"
msgstr ""
-#: openidserver.php:126
-msgid "Just an OpenID provider. Nothing to see here, move along..."
+#: finishopenidlogin.php:128
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
msgstr ""
-#: OpenIDPlugin.php:123 OpenIDPlugin.php:135
-msgid "OpenID"
+#: finishopenidlogin.php:131
+msgid "Existing nickname"
msgstr ""
-#: OpenIDPlugin.php:124
-msgid "Login or register with OpenID"
+#: finishopenidlogin.php:134
+msgid "Password"
msgstr ""
-#: OpenIDPlugin.php:136
-msgid "Add or remove OpenIDs"
+#: finishopenidlogin.php:137
+msgid "Connect"
+msgstr ""
+
+#: finishopenidlogin.php:215 finishopenidlogin.php:224
+msgid "Registration not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:231
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: finishopenidlogin.php:241
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: finishopenidlogin.php:246
+msgid "Nickname not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:251
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: finishopenidlogin.php:258 finishopenidlogin.php:338
+msgid "Stored OpenID not found."
+msgstr ""
+
+#: finishopenidlogin.php:267
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#: finishopenidlogin.php:327
+msgid "Invalid username or password."
+msgstr ""
+
+#: finishopenidlogin.php:345
+msgid "Error connecting user to OpenID."
msgstr ""
#: openid.php:141
@@ -126,57 +205,65 @@ msgstr ""
msgid "OpenID Auto-Submit"
msgstr ""
-#: openidtrust.php:51
-msgid "OpenID Identity Verification"
-msgstr ""
-
-#: openidtrust.php:69
+#: openidlogin.php:66
+#, php-format
msgid ""
-"This page should only be reached during OpenID processing, not directly."
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
msgstr ""
-#: openidtrust.php:118
+#: openidlogin.php:70
#, php-format
-msgid ""
-"%s has asked to verify your identity. Click Continue to verify your "
-"identity and login without creating a new password."
+msgid "Login with an [OpenID](%%doc.openid%%) account."
msgstr ""
-#: openidtrust.php:136
-msgid "Continue"
+#: openidlogin.php:112
+msgid "OpenID login"
msgstr ""
-#: openidtrust.php:137
-msgid "Cancel"
+#: openidlogin.php:117 openidsettings.php:107
+msgid "OpenID URL"
msgstr ""
-#: finishaddopenid.php:67
-msgid "Not logged in."
+#: openidlogin.php:119
+msgid "Your OpenID URL"
msgstr ""
-#: finishaddopenid.php:88 finishopenidlogin.php:149
-msgid "OpenID authentication cancelled."
+#: openidlogin.php:122
+msgid "Remember me"
msgstr ""
-#: finishaddopenid.php:92 finishopenidlogin.php:153
-#, php-format
-msgid "OpenID authentication failed: %s"
+#: openidlogin.php:123
+msgid "Automatically login in the future; not for shared computers!"
msgstr ""
-#: finishaddopenid.php:112
-msgid "You already have this OpenID!"
+#: openidlogin.php:127
+msgid "Login"
msgstr ""
-#: finishaddopenid.php:114
-msgid "Someone else already has this OpenID."
+#: OpenIDPlugin.php:123 OpenIDPlugin.php:135
+msgid "OpenID"
msgstr ""
-#: finishaddopenid.php:126
-msgid "Error connecting user."
+#: OpenIDPlugin.php:124
+msgid "Login or register with OpenID"
msgstr ""
-#: finishaddopenid.php:131
-msgid "Error updating profile"
+#: OpenIDPlugin.php:136
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#: OpenIDPlugin.php:324
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#: openidserver.php:106
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#: openidserver.php:126
+msgid "Just an OpenID provider. Nothing to see here, move along..."
msgstr ""
#: openidsettings.php:59
@@ -224,10 +311,6 @@ msgstr ""
msgid "Remove"
msgstr ""
-#: openidsettings.php:208 finishopenidlogin.php:52
-msgid "Something weird happened."
-msgstr ""
-
#: openidsettings.php:228
msgid "No such OpenID."
msgstr ""
@@ -240,105 +323,26 @@ msgstr ""
msgid "OpenID removed."
msgstr ""
-#: finishopenidlogin.php:43
-msgid "You can't register if you don't agree to the license."
-msgstr ""
-
-#: finishopenidlogin.php:66
-#, php-format
-msgid ""
-"This is the first time you've logged into %s so we must connect your OpenID "
-"to a local account. You can either create a new account, or connect with "
-"your existing account, if you have one."
-msgstr ""
-
-#: finishopenidlogin.php:72
-msgid "OpenID Account Setup"
-msgstr ""
-
-#: finishopenidlogin.php:97
-msgid "Create new account"
-msgstr ""
-
-#: finishopenidlogin.php:99
-msgid "Create a new user with this nickname."
-msgstr ""
-
-#: finishopenidlogin.php:102
-msgid "New nickname"
-msgstr ""
-
-#: finishopenidlogin.php:104
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr ""
-
-#: finishopenidlogin.php:114
-msgid "My text and files are available under "
+#: openidtrust.php:51
+msgid "OpenID Identity Verification"
msgstr ""
-#: finishopenidlogin.php:117
+#: openidtrust.php:69
msgid ""
-" except this private data: password, email address, IM address, phone number."
-msgstr ""
-
-#: finishopenidlogin.php:121
-msgid "Create"
-msgstr ""
-
-#: finishopenidlogin.php:126
-msgid "Connect existing account"
+"This page should only be reached during OpenID processing, not directly."
msgstr ""
-#: finishopenidlogin.php:128
+#: openidtrust.php:118
+#, php-format
msgid ""
-"If you already have an account, login with your username and password to "
-"connect it to your OpenID."
-msgstr ""
-
-#: finishopenidlogin.php:131
-msgid "Existing nickname"
-msgstr ""
-
-#: finishopenidlogin.php:134
-msgid "Password"
-msgstr ""
-
-#: finishopenidlogin.php:137
-msgid "Connect"
-msgstr ""
-
-#: finishopenidlogin.php:215 finishopenidlogin.php:224
-msgid "Registration not allowed."
-msgstr ""
-
-#: finishopenidlogin.php:231
-msgid "Not a valid invitation code."
-msgstr ""
-
-#: finishopenidlogin.php:241
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
-#: finishopenidlogin.php:246
-msgid "Nickname not allowed."
-msgstr ""
-
-#: finishopenidlogin.php:251
-msgid "Nickname already in use. Try another one."
-msgstr ""
-
-#: finishopenidlogin.php:258 finishopenidlogin.php:338
-msgid "Stored OpenID not found."
-msgstr ""
-
-#: finishopenidlogin.php:267
-msgid "Creating new account for OpenID that already has a user."
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
msgstr ""
-#: finishopenidlogin.php:327
-msgid "Invalid username or password."
+#: openidtrust.php:136
+msgid "Continue"
msgstr ""
-#: finishopenidlogin.php:345
-msgid "Error connecting user to OpenID."
+#: openidtrust.php:137
+msgid "Cancel"
msgstr ""
diff --git a/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po b/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po
index bd39124ef..8f8434a85 100644
--- a/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po
+++ b/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-22 15:03-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,16 +16,16 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: PoweredByStatusNetPlugin.php:49
+#: PoweredByStatusNetPlugin.php:50
#, php-format
msgid "powered by %s"
msgstr ""
-#: PoweredByStatusNetPlugin.php:51
+#: PoweredByStatusNetPlugin.php:52
msgid "StatusNet"
msgstr ""
-#: PoweredByStatusNetPlugin.php:64
+#: PoweredByStatusNetPlugin.php:65
msgid ""
"Outputs powered by <a href=\"http://status.net/\">StatusNet</a> after site "
"name."
diff --git a/plugins/PubSubHubBub/PubSubHubBubPlugin.php b/plugins/PubSubHubBub/PubSubHubBubPlugin.php
deleted file mode 100644
index a880dc866..000000000
--- a/plugins/PubSubHubBub/PubSubHubBubPlugin.php
+++ /dev/null
@@ -1,285 +0,0 @@
-<?php
-/**
- * StatusNet, the distributed open-source microblogging tool
- *
- * Plugin to push RSS/Atom updates to a PubSubHubBub hub
- *
- * 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 Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 Craig Andrews http://candrews.integralblue.com
- * @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('DEFAULT_HUB', 'http://pubsubhubbub.appspot.com');
-
-require_once INSTALLDIR.'/plugins/PubSubHubBub/publisher.php';
-
-/**
- * Plugin to provide publisher side of PubSubHubBub (PuSH)
- * relationship.
- *
- * PuSH is a real-time or near-real-time protocol for Atom
- * and RSS feeds. More information here:
- *
- * http://code.google.com/p/pubsubhubbub/
- *
- * To enable, add the following line to your config.php:
- *
- * addPlugin('PubSubHubBub');
- *
- * This will use the Google default hub. If you'd like to use
- * another, try:
- *
- * addPlugin('PubSubHubBub',
- * array('hub' => 'http://yourhub.example.net/'));
- *
- * @category Plugin
- * @package StatusNet
- * @author Craig Andrews <candrews@integralblue.com>
- * @copyright 2009 Craig Andrews http://candrews.integralblue.com
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class PubSubHubBubPlugin extends Plugin
-{
- /**
- * URL of the hub to advertise and publish to.
- */
-
- public $hub = DEFAULT_HUB;
-
- /**
- * Default constructor.
- */
-
- function __construct()
- {
- parent::__construct();
- }
-
- /**
- * Check if plugin should be active; may be mass-enabled.
- * @return boolean
- */
-
- function enabled()
- {
- if (common_config('site', 'private')) {
- // PuSH relies on public feeds
- return false;
- }
- // @fixme check for being on a private network?
- return true;
- }
-
- /**
- * Hooks the StartApiAtom event
- *
- * Adds the necessary bits to advertise PubSubHubBub
- * for the Atom feed.
- *
- * @param Action $action The API action being shown.
- *
- * @return boolean hook value
- */
-
- function onStartApiAtom($action)
- {
- if ($this->enabled()) {
- $action->element('link', array('rel' => 'hub', 'href' => $this->hub), null);
- }
- return true;
- }
-
- /**
- * Hooks the StartApiRss event
- *
- * Adds the necessary bits to advertise PubSubHubBub
- * for the RSS 2.0 feeds.
- *
- * @param Action $action The API action being shown.
- *
- * @return boolean hook value
- */
-
- function onStartApiRss($action)
- {
- if ($this->enabled()) {
- $action->element('atom:link', array('rel' => 'hub',
- 'href' => $this->hub),
- null);
- }
- return true;
- }
-
- /**
- * Hook for a queued notice.
- *
- * When a notice has been queued, will ping the
- * PuSH hub for each Atom and RSS feed in which
- * the notice appears.
- *
- * @param Notice $notice The notice that's been queued
- *
- * @return boolean hook value
- */
-
- function onHandleQueuedNotice($notice)
- {
- if (!$this->enabled()) {
- return false;
- }
- $publisher = new Publisher($this->hub);
-
- $feeds = array();
-
- //public timeline feeds
- $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelinePublic', array('format' => 'atom'));
-
- //author's own feeds
- $user = User::staticGet('id', $notice->profile_id);
-
- $feeds[] = common_local_url('ApiTimelineUser',
- array('id' => $user->nickname,
- 'format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelineUser',
- array('id' => $user->nickname,
- 'format' => 'atom'));
-
- //tag feeds
- $tag = new Notice_tag();
-
- $tag->notice_id = $notice->id;
- if ($tag->find()) {
- while ($tag->fetch()) {
- $feeds[] = common_local_url('ApiTimelineTag',
- array('tag' => $tag->tag,
- 'format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelineTag',
- array('tag' => $tag->tag,
- 'format' => 'atom'));
- }
- }
-
- //group feeds
- $group_inbox = new Group_inbox();
-
- $group_inbox->notice_id = $notice->id;
- if ($group_inbox->find()) {
- while ($group_inbox->fetch()) {
- $group = User_group::staticGet('id', $group_inbox->group_id);
-
- $feeds[] = common_local_url('ApiTimelineGroup',
- array('id' => $group->nickname,
- 'format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelineGroup',
- array('id' => $group->nickname,
- 'format' => 'atom'));
- }
- }
-
- //feed of each user that subscribes to the notice's author
-
- $ni = $notice->whoGets();
-
- foreach (array_keys($ni) as $user_id) {
- $user = User::staticGet('id', $user_id);
- if (empty($user)) {
- continue;
- }
- $feeds[] = common_local_url('ApiTimelineFriends',
- array('id' => $user->nickname,
- 'format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelineFriends',
- array('id' => $user->nickname,
- 'format' => 'atom'));
- }
-
- $replies = $notice->getReplies();
-
- //feed of user replied to
- foreach ($replies as $recipient) {
- $user = User::staticGet('id', $recipient);
- if (!empty($user)) {
- $feeds[] = common_local_url('ApiTimelineMentions',
- array('id' => $user->nickname,
- 'format' => 'rss'));
- $feeds[] = common_local_url('ApiTimelineMentions',
- array('id' => $user->nickname,
- 'format' => 'atom'));
- }
- }
- $feeds = array_unique($feeds);
-
- ob_start();
- $ok = $publisher->publish_update($feeds);
- $push_last_response = ob_get_clean();
-
- if (!$ok) {
- common_log(LOG_WARNING,
- 'Failure publishing ' . count($feeds) . ' feeds to hub at '.
- $this->hub.': '.$push_last_response);
- } else {
- common_log(LOG_INFO,
- 'Published ' . count($feeds) . ' feeds to hub at '.
- $this->hub.': '.$push_last_response);
- }
-
- return true;
- }
-
- /**
- * Provide version information
- *
- * Adds this plugin's version data to the global
- * version array, for e.g. displaying on the version page.
- *
- * @param array &$versions array of array of versions
- *
- * @return boolean hook value
- */
-
- function onPluginVersion(&$versions)
- {
- $about = _m('The PubSubHubBub plugin pushes RSS/Atom updates '.
- 'to a <a href = "'.
- 'http://pubsubhubbub.googlecode.com/'.
- '">PubSubHubBub</a> hub.');
- if (!$this->enabled()) {
- $about = '<span class="disabled" style="color:gray">' . $about . '</span> ' .
- _m('(inactive on private site)');
- }
- $versions[] = array('name' => 'PubSubHubBub',
- 'version' => STATUSNET_VERSION,
- 'author' => 'Craig Andrews',
- 'homepage' =>
- 'http://status.net/wiki/Plugin:PubSubHubBub',
- 'rawdescription' =>
- $about);
-
- return true;
- }
-}
diff --git a/plugins/PubSubHubBub/publisher.php b/plugins/PubSubHubBub/publisher.php
deleted file mode 100644
index f176a9b8a..000000000
--- a/plugins/PubSubHubBub/publisher.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-// a PHP client library for pubsubhubbub
-// as defined at http://code.google.com/p/pubsubhubbub/
-// written by Josh Fraser | joshfraser.com | josh@eventvue.com
-// Released under Apache License 2.0
-
-class Publisher {
-
- protected $hub_url;
- protected $last_response;
-
- // create a new Publisher
- public function __construct($hub_url) {
-
- if (!isset($hub_url))
- throw new Exception('Please specify a hub url');
-
- if (!preg_match("|^https?://|i",$hub_url))
- throw new Exception('The specified hub url does not appear to be valid: '.$hub_url);
-
- $this->hub_url = $hub_url;
- }
-
- // accepts either a single url or an array of urls
- public function publish_update($topic_urls, $http_function = false) {
- if (!isset($topic_urls))
- throw new Exception('Please specify a topic url');
-
- // check that we're working with an array
- if (!is_array($topic_urls)) {
- $topic_urls = array($topic_urls);
- }
-
- // set the mode to publish
- $post_string = "hub.mode=publish";
- // loop through each topic url
- foreach ($topic_urls as $topic_url) {
-
- // lightweight check that we're actually working w/ a valid url
- if (!preg_match("|^https?://|i",$topic_url))
- throw new Exception('The specified topic url does not appear to be valid: '.$topic_url);
-
- // append the topic url parameters
- $post_string .= "&hub.url=".urlencode($topic_url);
- }
-
- // make the http post request and return true/false
- // easy to over-write to use your own http function
- if ($http_function)
- return $http_function($this->hub_url,$post_string);
- else
- return $this->http_post($this->hub_url,$post_string);
- }
-
- // returns any error message from the latest request
- public function last_response() {
- return $this->last_response;
- }
-
- // default http function that uses curl to post to the hub endpoint
- private function http_post($url, $post_string) {
-
- // add any additional curl options here
- $options = array(CURLOPT_URL => $url,
- CURLOPT_POST => true,
- CURLOPT_POSTFIELDS => $post_string,
- CURLOPT_USERAGENT => "PubSubHubbub-Publisher-PHP/1.0");
-
- $ch = curl_init();
- curl_setopt_array($ch, $options);
-
- $response = curl_exec($ch);
- $this->last_response = $response;
- $info = curl_getinfo($ch);
-
- curl_close($ch);
-
- // all good
- if ($info['http_code'] == 204)
- return true;
- return false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index e8c44a743..b559d80c6 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -244,8 +244,6 @@ class RealtimePlugin extends Plugin
// of refactoring from within a plugin, so I'm just abusing
// the ApiAction method. Don't do this unless you're me!
- require_once(INSTALLDIR.'/lib/api.php');
-
$act = new ApiAction('/dev/null');
$arr = $act->twitterStatusArray($notice, true);
diff --git a/plugins/Realtime/icon_external.gif b/plugins/Realtime/icon_external.gif
deleted file mode 100644
index c4118d53b..000000000
--- a/plugins/Realtime/icon_external.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/Realtime/icon_pause.gif b/plugins/Realtime/icon_pause.gif
deleted file mode 100644
index ced0b6440..000000000
--- a/plugins/Realtime/icon_pause.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/Realtime/icon_play.gif b/plugins/Realtime/icon_play.gif
deleted file mode 100644
index 794ec85b6..000000000
--- a/plugins/Realtime/icon_play.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/Realtime/realtimeupdate.css b/plugins/Realtime/realtimeupdate.css
index 31e7c2ae6..f43c97de5 100644
--- a/plugins/Realtime/realtimeupdate.css
+++ b/plugins/Realtime/realtimeupdate.css
@@ -64,18 +64,9 @@ float: left;
}
#realtime_play {
-background: url(icon_play.gif) no-repeat 47% 47%;
margin-left: 4px;
}
-#realtime_pause {
-background: url(icon_pause.gif) no-repeat 47% 47%;
-}
-
-#realtime_popup {
-background: url(icon_external.gif) no-repeat 0 30%;
-}
-
#queued_counter {
float:left;
line-height:1.2;
diff --git a/plugins/RegisterThrottle/RegisterThrottlePlugin.php b/plugins/RegisterThrottle/RegisterThrottlePlugin.php
new file mode 100644
index 000000000..05709b780
--- /dev/null
+++ b/plugins/RegisterThrottle/RegisterThrottlePlugin.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Throttle registration by IP address
+ *
+ * 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 Spam
+ * @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')) {
+ exit(1);
+}
+
+/**
+ * Throttle registration by IP address
+ *
+ * We a) record IP address of registrants and b) throttle registrations.
+ *
+ * @category Spam
+ * @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 RegisterThrottlePlugin extends Plugin
+{
+ /**
+ * Array of time spans in seconds to limits.
+ *
+ * Default is 3 registrations per hour, 5 per day, 10 per week.
+ */
+
+ public $regLimits = array(604800 => 10, // per week
+ 86400 => 5, // per day
+ 3600 => 3); // per hour
+
+ /**
+ * Database schema setup
+ *
+ * We store user registrations in a table registration_ip.
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ */
+
+ function onCheckSchema()
+ {
+ $schema = Schema::get();
+
+ // For storing user-submitted flags on profiles
+
+ $schema->ensureTable('registration_ip',
+ array(new ColumnDef('user_id', 'integer', null,
+ false, 'PRI'),
+ new ColumnDef('ipaddress', 'varchar', 15, false, 'MUL'),
+ new ColumnDef('created', 'timestamp', null, false, 'MUL')));
+
+ return true;
+ }
+
+ /**
+ * Load related modules when needed
+ *
+ * @param string $cls Name of the class to be loaded
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ */
+
+ function onAutoload($cls)
+ {
+ $dir = dirname(__FILE__);
+
+ switch ($cls)
+ {
+ case 'Registration_ip':
+ include_once $dir . '/'.$cls.'.php';
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /**
+ * Called when someone tries to register.
+ *
+ * We check the IP here to determine if it goes over any of our
+ * configured limits.
+ *
+ * @param Action $action Action that is being executed
+ *
+ * @return boolean hook value
+ *
+ */
+
+ function onStartRegistrationTry($action)
+ {
+ $ipaddress = $this->_getIpAddress();
+
+ if (empty($ipaddress)) {
+ throw new ServerException(_m('Cannot find IP address.'));
+ }
+
+ foreach ($this->regLimits as $seconds => $limit) {
+
+ $this->debug("Checking $seconds ($limit)");
+
+ $reg = $this->_getNthReg($ipaddress, $limit);
+
+ if (!empty($reg)) {
+ $this->debug("Got a {$limit}th registration.");
+ $regtime = strtotime($reg->created);
+ $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."));
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Called after someone registers.
+ *
+ * We record the successful registration and IP address.
+ *
+ * @param Action $action Action that is being executed
+ *
+ * @return boolean hook value
+ *
+ */
+
+ function onEndRegistrationTry($action)
+ {
+ $ipaddress = $this->_getIpAddress();
+
+ if (empty($ipaddress)) {
+ throw new ServerException(_m('Cannot find IP address.'));
+ }
+
+ $user = common_current_user();
+
+ if (empty($user)) {
+ throw new ServerException(_m('Cannot find user after successful registration.'));
+ }
+
+ $reg = new Registration_ip();
+
+ $reg->user_id = $user->id;
+ $reg->ipaddress = $ipaddress;
+
+ $result = $reg->insert();
+
+ if (!$result) {
+ common_log_db_error($reg, 'INSERT', __FILE__);
+ // @todo throw an exception?
+ }
+
+ return true;
+ }
+
+ /**
+ * Check the version of the plugin.
+ *
+ * @param array &$versions Version array.
+ *
+ * @return boolean hook value
+ */
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'RegisterThrottle',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Evan Prodromou',
+ 'homepage' => 'http://status.net/wiki/Plugin:RegisterThrottle',
+ 'description' =>
+ _m('Throttles excessive registration from a single IP.'));
+ return true;
+ }
+
+ /**
+ * Gets the current IP address.
+ *
+ * @return string IP address or null if not found.
+ */
+
+ private function _getIpAddress()
+ {
+ $keys = array('HTTP_X_FORWARDED_FOR',
+ 'CLIENT-IP',
+ 'REMOTE_ADDR');
+
+ foreach ($keys as $k) {
+ if (!empty($_SERVER[$k])) {
+ return $_SERVER[$k];
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Gets the Nth registration with the given IP address.
+ *
+ * @param string $ipaddress Address to key on
+ * @param integer $n Nth address
+ *
+ * @return Registration_ip nth registration or null if not found.
+ */
+
+ private function _getNthReg($ipaddress, $n)
+ {
+ $reg = new Registration_ip();
+
+ $reg->ipaddress = $ipaddress;
+
+ $reg->orderBy('created DESC');
+ $reg->limit($n - 1, 1);
+
+ if ($reg->find(true)) {
+ return $reg;
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/plugins/RegisterThrottle/Registration_ip.php b/plugins/RegisterThrottle/Registration_ip.php
new file mode 100644
index 000000000..7e61d089e
--- /dev/null
+++ b/plugins/RegisterThrottle/Registration_ip.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * Data class for storing IP addresses of new registrants.
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+/**
+ * Data class for storing IP addresses of new registrants.
+ *
+ * @category Spam
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @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
+ public $user_id; // int(4) primary_key not_null
+ public $ipaddress; // varchar(15)
+ public $created; // timestamp
+
+ /**
+ * Get an instance by key
+ *
+ * @param string $k Key to use to lookup (usually 'user_id' for this class)
+ * @param mixed $v Value to lookup
+ *
+ * @return User_greeting_count object found, or null for no hits
+ *
+ */
+
+ function staticGet($k, $v=null)
+ {
+ return Memcached_DataObject::staticGet('Registration_ip', $k, $v);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'ipaddress' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'created' => DB_DATAOBJECT_MYSQLTIMESTAMP + DB_DATAOBJECT_NOTNULL);
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keys()
+ {
+ return array('user_id' => 'K');
+ }
+
+ /**
+ * return key definitions for Memcached_DataObject
+ *
+ * Our caching system uses the same key definitions, but uses a different
+ * method to get them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return $this->keys();
+ }
+
+ /**
+ * Magic formula for non-autoincrementing integer primary keys
+ *
+ * If a table has a single integer column as its primary key, DB_DataObject
+ * assumes that the column is auto-incrementing and makes a sequence table
+ * to do this incrementation. Since we don't need this for our class, we
+ * overload this method and return the magic formula that DB_DataObject needs.
+ *
+ * @return array magic three-false array that stops auto-incrementing.
+ */
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+}
diff --git a/plugins/ReverseUsernameAuthentication/README b/plugins/ReverseUsernameAuthentication/README
index e9160ed9b..57b53219e 100644
--- a/plugins/ReverseUsernameAuthentication/README
+++ b/plugins/ReverseUsernameAuthentication/README
@@ -8,7 +8,10 @@ add "addPlugin('reverseUsernameAuthentication', array('setting'=>'value', 'setti
Settings
========
-provider_name*: a unique name for this authentication provider.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
password_changeable*: must be set to false. This plugin does not support changing passwords.
authoritative (false): Set to true if this plugin's responses are authoritative (meaning if this fails, do check any other plugins or the internal password database).
autoregistration (false): Set to true if users should be automatically created when they attempt to login.
diff --git a/plugins/Sample/hello.php b/plugins/Sample/hello.php
index 0cfd8a1c3..dfbd0ad4f 100644
--- a/plugins/Sample/hello.php
+++ b/plugins/Sample/hello.php
@@ -119,13 +119,15 @@ class HelloAction extends Action
}
/**
- * show content in the content area
+ * Show content in the content area
*
* The default StatusNet page has a lot of decorations: menus,
* logos, tabs, all that jazz. This method is used to show
* content in the content area of the page; it's the main
* thing you want to overload.
*
+ * This method also demonstrates use of a plural localized string.
+ *
* @return void
*/
@@ -138,7 +140,9 @@ class HelloAction extends Action
$this->element('p', array('class' => 'greeting'),
sprintf(_m('Hello, %s'), $this->user->nickname));
$this->element('p', array('class' => 'greeting_count'),
- sprintf(_m('I have greeted you %d time(s).'),
+ sprintf(_m('I have greeted you %d time.',
+ 'I have greeted you %d times.',
+ $this->gc->greeting_count),
$this->gc->greeting_count));
}
}
diff --git a/plugins/Sample/locale/Sample.po b/plugins/Sample/locale/Sample.po
new file mode 100644
index 000000000..a52c4ec01
--- /dev/null
+++ b/plugins/Sample/locale/Sample.po
@@ -0,0 +1,56 @@
+# 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-03-01 14:58-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: hello.php:115 SamplePlugin.php:266
+msgid "Hello"
+msgstr ""
+
+#: hello.php:117 hello.php:141
+#, php-format
+msgid "Hello, %s"
+msgstr ""
+
+#: hello.php:138
+msgid "Hello, stranger!"
+msgstr ""
+
+#: hello.php:143
+#, php-format
+msgid "I have greeted you %d time."
+msgid_plural "I have greeted you %d times."
+msgstr[0] ""
+msgstr[1] ""
+
+#: SamplePlugin.php:266
+msgid "A warm greeting"
+msgstr ""
+
+#: SamplePlugin.php:277
+msgid "A sample plugin to show basics of development for new hackers."
+msgstr ""
+
+#: User_greeting_count.php:163
+#, php-format
+msgid "Could not save new greeting count for %d"
+msgstr ""
+
+#: User_greeting_count.php:176
+#, php-format
+msgid "Could not increment greeting count for %d"
+msgstr ""
diff --git a/plugins/SphinxSearch/sphinxsearch.php b/plugins/SphinxSearch/sphinxsearch.php
index 71f330828..654b9c9d5 100644
--- a/plugins/SphinxSearch/sphinxsearch.php
+++ b/plugins/SphinxSearch/sphinxsearch.php
@@ -75,7 +75,7 @@ class SphinxSearch extends SearchEngine
{
if ('chron' === $mode) {
$this->sphinx->SetSortMode(SPH_SORT_ATTR_DESC, 'created_ts');
- return $this->target->orderBy('created desc');
+ return $this->target->orderBy('id desc');
}
}
diff --git a/plugins/TabFocus/TabFocusPlugin.php b/plugins/TabFocus/TabFocusPlugin.php
new file mode 100644
index 000000000..bf89c478c
--- /dev/null
+++ b/plugins/TabFocus/TabFocusPlugin.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to enable Twitter-like "tab-space" pattern for a user to submit a notice
+ *
+ * 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 Craig Andrews <candrews@integralblue.com>
+ * @author Paul Irish <paul.irish@isobar.net>
+ * @copyright 2009 Craig Andrews http://candrews.integralblue.com
+ * @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') && !defined('LACONICA')) {
+ exit(1);
+}
+
+class TabFocusPlugin extends Plugin
+{
+ function __construct()
+ {
+ parent::__construct();
+ }
+
+ function onEndShowScripts($action)
+ {
+ $action->script('plugins/TabFocus/tabfocus.js');
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'TabFocus',
+ 'version' => STATUSNET_VERSION,
+ '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.'));
+ return true;
+ }
+}
diff --git a/plugins/TabFocus/tabfocus.js b/plugins/TabFocus/tabfocus.js
new file mode 100644
index 000000000..e2c1c6521
--- /dev/null
+++ b/plugins/TabFocus/tabfocus.js
@@ -0,0 +1,7 @@
+jQuery(function($){
+ $('#notice_data-text').bind('keydown',function(e){
+ if (e.which==9) {
+ setTimeout(function(){ $('#notice_action-submit').focus(); },15);
+ }
+ });
+});
diff --git a/plugins/TwitterBridge/README b/plugins/TwitterBridge/README
index d3bcda598..d0d34b7ef 100644
--- a/plugins/TwitterBridge/README
+++ b/plugins/TwitterBridge/README
@@ -1,47 +1,104 @@
+Twitter Bridge Plugin
+=====================
+
This Twitter "bridge" plugin allows you to integrate your StatusNet
instance with Twitter. Installing it will allow your users to:
- - automatically post notices to thier Twitter accounts
+ - automatically post notices to their Twitter accounts
- automatically subscribe to other Twitter users who are also using
your StatusNet install, if possible (requires running a daemon)
- import their Twitter friends' tweets (requires running a daemon)
+ - allow users to authenticate using Twitter ('Sign in with Twitter')
Installation
------------
-To enable the plugin, add the following to your config.php:
-
- addPlugin("TwitterBridge");
-
-OAuth is used to to access protected resources on Twitter (as opposed to
-HTTP Basic Auth)*. To use Twitter bridging you will need to register
-your instance of StatusNet as an application on Twitter
-(http://twitter.com/apps), and update the following variables in your
-config.php with the consumer key and secret Twitter generates for you:
-
- $config['twitter']['consumer_key'] = 'YOURKEY';
- $config['twitter']['consumer_secret'] = 'YOURSECRET';
+OAuth 1.0a (http://oauth.net) is used to to access protected resources
+on Twitter (as opposed to HTTP Basic Auth)*. To use Twitter bridging
+you will need to register your instance of StatusNet as an application
+on Twitter (http://twitter.com/apps). During the application
+registration process your application will be assigned a "consumer" key
+and secret, which the plugin will use to make OAuth requests to Twitter.
+You can either pass the consumer key and secret in when you enable the
+plugin, or set it using the Twitter administration panel**.
When registering your application with Twitter set the type to "Browser"
and your Callback URL to:
http://example.org/mublog/twitter/authorization
-The default access type should be, "Read & Write".
+(Change "example.org" to your site domain and "mublog" to your site
+path.)
+
+The default access type should be "Read & Write".
+
+To enable the plugin, add the following to your config.php:
+
+ addPlugin(
+ 'TwitterBridge',
+ array(
+ 'consumer_key' => 'YOUR_CONSUMER_KEY',
+ 'consumer_secret' => 'YOUR_CONSUMER_SECRET'
+ )
+ );
+
+or just:
+
+ addPlugin('TwitterBridge');
+
+if you want to set the consumer key and secret from the Twitter bridge
+administration panel. (The Twitter bridge wont work at all
+unless you configure it with a consumer key and secret.)
* Note: The plugin will still push notices to Twitter for users who
- have previously setup the Twitter bridge using their Twitter name and
- password under an older versions of StatusNet, but all new Twitter
+ have previously set up the Twitter bridge using their Twitter name and
+ password under an older version of StatusNet, but all new Twitter
bridge connections will use OAuth.
-Deamons
+** For multi-site setups you can also set a global consumer key and
+ secret. The Twitter bridge will fall back on the global key pair if
+ it can't find a local pair, e.g.:
+
+ $config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY'
+ $config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET'
+
+Administration panel
+--------------------
+
+As of StatusNet 0.9.0 there is a new administration panel that allows
+you to configure Twitter bridge settings within StatusNet itself,
+instead of having to specify them manually in your config.php. To enable
+the administration panel, you will need to add it to the list of active
+administration panels. You can do this via your config.php. E.g.:
+
+ $config['admin']['panels'][] = 'twitter';
+
+And to access it, you'll need to use a user with the "administrator"
+role (see: scripts/userrole.php).
+
+Sign in with Twitter
+--------------------
+
+With 0.9.0, StatusNet optionally allows users to register and
+authenticate using their Twitter credentials via the "Sign in with
+Twitter" pattern described here:
+
+ http://apiwiki.twitter.com/Sign-in-with-Twitter
+
+The option is _on_ by default when you install the plugin, but it can
+disabled via the Twitter bridge administration panel, or by adding the
+following line to your config.php:
+
+ $config['twitter']['signin'] = false;
+
+Daemons
-------
-For friend syncing and importing notices running two additional daemon
-scripts is necessary (synctwitterfriends.php and
-twitterstatusfetcher.php).
+For friend syncing and importing Twitter tweets, running two
+additional daemon scripts is necessary: synctwitterfriends.php and
+twitterstatusfetcher.php.
-In the daemons subidrectory of the plugin are three scripts:
+In the daemons subdirectory of the plugin are three scripts:
* Twitter Friends Syncing (daemons/synctwitterfriends.php)
@@ -51,13 +108,13 @@ subscribe to "friends" (people they "follow") on Twitter who also have
accounts on your StatusNet system, and who have previously set up a link
for automatically posting notices to Twitter.
-The plugin will try to start this daemon when you run
-scripts/startdaemons.sh.
+The plugin will start this daemon when you run scripts/startdaemons.sh.
* Importing statuses from Twitter (daemons/twitterstatusfetcher.php)
-To allow your users to import their friends' Twitter statuses, you will
-need to enable the bidirectional Twitter bridge in your config.php:
+You can allow uses to enable importing of your friends' Twitter
+timelines either in the Twitter bridge administration panel or in your
+config.php using the following configuration line:
$config['twitterimport']['enabled'] = true;
@@ -66,8 +123,9 @@ other daemons when you run scripts/startdaemons.sh.
Additionally, you will want to set the integration source variable,
which will keep notices posted to Twitter via StatusNet from looping
-back. The integration source should be set to the name of your
-application, exactly as you specified it on the settings page for your
+back. You can do this in the Twitter bridge administration panel, or
+via config.php. The integration source should be set to the name of your
+application _exactly_ as you specified it on the settings page for your
StatusNet application on Twitter, e.g.:
$config['integration']['source'] = 'YourApp';
@@ -79,7 +137,9 @@ set up Twitter bridging.
It's not strictly necessary to run this queue handler, and sites that
haven't enabled queuing are still able to push notices to Twitter, but
-for larger sites and sites that wish to improve performance, this
-script allows notices to be sent "offline" via a separate process.
+for larger sites and sites that wish to improve performance the script
+allows notices to be sent "offline" via a separate process.
-The plugin will start this script when you run scripts/startdaemons.sh.
+StatusNet will automatically use the TwitterQueueHandler if you have
+enabled the queuing subsystem. See the "Queues and daemons" section of
+the main README file for more information about how to do that.
diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php
index c7f57ffc7..1a0a69682 100644
--- a/plugins/TwitterBridge/TwitterBridgePlugin.php
+++ b/plugins/TwitterBridge/TwitterBridgePlugin.php
@@ -23,7 +23,7 @@
* @author Julien C <chaumond@gmail.com>
* @copyright 2009-2010 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
*/
if (!defined('STATUSNET')) {
@@ -32,8 +32,6 @@ if (!defined('STATUSNET')) {
require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
-define('TWITTERBRIDGEPLUGIN_VERSION', '0.9');
-
/**
* Plugin for sending and importing Twitter statuses
*
@@ -44,19 +42,65 @@ define('TWITTERBRIDGEPLUGIN_VERSION', '0.9');
* @author Zach Copley <zach@status.net>
* @author Julien C <chaumond@gmail.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
* @link http://twitter.com/
*/
class TwitterBridgePlugin extends Plugin
{
+
+ const VERSION = STATUSNET_VERSION;
+
/**
* Initializer for the plugin.
*/
- function __construct()
+ function initialize()
{
- parent::__construct();
+ // Allow the key and secret to be passed in
+ // Control panel will override
+
+ if (isset($this->consumer_key)) {
+ $key = common_config('twitter', 'consumer_key');
+ if (empty($key)) {
+ Config::save('twitter', 'consumer_key', $this->consumer_key);
+ }
+ }
+
+ if (isset($this->consumer_secret)) {
+ $secret = common_config('twitter', 'consumer_secret');
+ if (empty($secret)) {
+ Config::save(
+ 'twitter',
+ 'consumer_secret',
+ $this->consumer_secret
+ );
+ }
+ }
+ }
+
+ /**
+ * Check to see if there is a consumer key and secret defined
+ * for Twitter integration.
+ *
+ * @return boolean result
+ */
+
+ static function hasKeys()
+ {
+ $ckey = common_config('twitter', 'consumer_key');
+ $csecret = common_config('twitter', 'consumer_secret');
+
+ if (empty($ckey) && empty($csecret)) {
+ $ckey = common_config('twitter', 'global_consumer_key');
+ $csecret = common_config('twitter', 'global_consumer_secret');
+ }
+
+ if (!empty($ckey) && !empty($csecret)) {
+ return true;
+ }
+
+ return false;
}
/**
@@ -71,10 +115,25 @@ class TwitterBridgePlugin extends Plugin
function onRouterInitialized($m)
{
- $m->connect('twitter/authorization',
- array('action' => 'twitterauthorization'));
- $m->connect('settings/twitter', array('action' => 'twittersettings'));
- $m->connect('main/twitterlogin', array('action' => 'twitterlogin'));
+ $m->connect('admin/twitter', array('action' => 'twitteradminpanel'));
+
+ if (self::hasKeys()) {
+ $m->connect(
+ 'twitter/authorization',
+ array('action' => 'twitterauthorization')
+ );
+ $m->connect(
+ 'settings/twitter', array(
+ 'action' => 'twittersettings'
+ )
+ );
+ if (common_config('twitter', 'signin')) {
+ $m->connect(
+ 'main/twitterlogin',
+ array('action' => 'twitterlogin')
+ );
+ }
+ }
return true;
}
@@ -88,13 +147,16 @@ class TwitterBridgePlugin extends Plugin
*/
function onEndLoginGroupNav(&$action)
{
-
$action_name = $action->trimmed('action');
- $action->menuItem(common_local_url('twitterlogin'),
- _('Twitter'),
- _('Login or register using Twitter'),
- 'twitterlogin' === $action_name);
+ if (self::hasKeys() && common_config('twitter', 'signin')) {
+ $action->menuItem(
+ common_local_url('twitterlogin'),
+ _m('Twitter'),
+ _m('Login or register using Twitter'),
+ 'twitterlogin' === $action_name
+ );
+ }
return true;
}
@@ -108,13 +170,16 @@ class TwitterBridgePlugin extends Plugin
*/
function onEndConnectSettingsNav(&$action)
{
- $action_name = $action->trimmed('action');
-
- $action->menuItem(common_local_url('twittersettings'),
- _m('Twitter'),
- _m('Twitter integration options'),
- $action_name === 'twittersettings');
+ if (self::hasKeys()) {
+ $action_name = $action->trimmed('action');
+ $action->menuItem(
+ common_local_url('twittersettings'),
+ _m('Twitter'),
+ _m('Twitter integration options'),
+ $action_name === 'twittersettings'
+ );
+ }
return true;
}
@@ -132,6 +197,7 @@ class TwitterBridgePlugin extends Plugin
case 'TwittersettingsAction':
case 'TwitterauthorizationAction':
case 'TwitterloginAction':
+ case 'TwitteradminpanelAction':
include_once INSTALLDIR . '/plugins/TwitterBridge/' .
strtolower(mb_substr($cls, 0, -6)) . '.php';
return false;
@@ -155,12 +221,12 @@ class TwitterBridgePlugin extends Plugin
*/
function onStartEnqueueNotice($notice, &$transports)
{
- // Avoid a possible loop
-
- if ($notice->source != 'twitter') {
- array_push($transports, 'twitter');
+ if (self::hasKeys()) {
+ // Avoid a possible loop
+ if ($notice->source != 'twitter') {
+ array_push($transports, 'twitter');
+ }
}
-
return true;
}
@@ -173,12 +239,19 @@ class TwitterBridgePlugin extends Plugin
*/
function onGetValidDaemons($daemons)
{
- array_push($daemons, INSTALLDIR .
- '/plugins/TwitterBridge/daemons/synctwitterfriends.php');
-
- if (common_config('twitterimport', 'enabled')) {
- array_push($daemons, INSTALLDIR
- . '/plugins/TwitterBridge/daemons/twitterstatusfetcher.php');
+ if (self::hasKeys()) {
+ array_push(
+ $daemons,
+ INSTALLDIR
+ . '/plugins/TwitterBridge/daemons/synctwitterfriends.php'
+ );
+ if (common_config('twitterimport', 'enabled')) {
+ array_push(
+ $daemons,
+ INSTALLDIR
+ . '/plugins/TwitterBridge/daemons/twitterstatusfetcher.php'
+ );
+ }
}
return true;
@@ -193,21 +266,61 @@ class TwitterBridgePlugin extends Plugin
*/
function onEndInitializeQueueManager($manager)
{
- $manager->connect('twitter', 'TwitterQueueHandler');
+ if (self::hasKeys()) {
+ $manager->connect('twitter', 'TwitterQueueHandler');
+ }
return true;
}
+ /**
+ * Add a Twitter tab to the admin panel
+ *
+ * @param Widget $nav Admin panel nav
+ *
+ * @return boolean hook value
+ */
+
+ function onEndAdminPanelNav($nav)
+ {
+ if (AdminPanelAction::canAdmin('twitter')) {
+
+ $action_name = $nav->action->trimmed('action');
+
+ $nav->out->menuItem(
+ common_local_url('twitteradminpanel'),
+ _m('Twitter'),
+ _m('Twitter bridge configuration'),
+ $action_name == 'twitteradminpanel',
+ 'nav_twitter_admin_panel'
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Plugin version data
+ *
+ * @param array &$versions array of version blocks
+ *
+ * @return boolean hook value
+ */
+
function onPluginVersion(&$versions)
{
- $versions[] = array('name' => 'TwitterBridge',
- 'version' => TWITTERBRIDGEPLUGIN_VERSION,
- 'author' => 'Zach Copley',
- 'homepage' => 'http://status.net/wiki/Plugin:TwitterBridge',
- 'rawdescription' =>
- _m('The Twitter "bridge" plugin allows you to integrate ' .
- 'your StatusNet instance with ' .
- '<a href="http://twitter.com/">Twitter</a>.'));
+ $versions[] = array(
+ 'name' => 'TwitterBridge',
+ 'version' => self::VERSION,
+ '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 ' .
+ '<a href="http://twitter.com/">Twitter</a>.'
+ )
+ );
return true;
}
}
+
diff --git a/plugins/TwitterBridge/locale/TwitterBridge.po b/plugins/TwitterBridge/locale/TwitterBridge.po
index 14c30f1c9..eff125579 100644
--- a/plugins/TwitterBridge/locale/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/TwitterBridge.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,23 +16,48 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: twitterauthorization.php:81
-msgid "Not logged in."
+#: twitter.php:320
+msgid "Your Twitter bridge has been disabled."
msgstr ""
-#: twitterauthorization.php:131 twitterauthorization.php:150
-#: twitterauthorization.php:170 twitterauthorization.php:217
+#: twitter.php:324
+#, 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"
+"\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"
+msgstr ""
+
+#: twitterauthorization.php:181 twitterauthorization.php:229
msgid "Couldn't link your Twitter account."
msgstr ""
-#: TwitterBridgePlugin.php:89
+#: twitterauthorization.php:201
+msgid "Couldn't link your Twitter account: oauth_token mismatch."
+msgstr ""
+
+#: TwitterBridgePlugin.php:114
msgid "Twitter"
msgstr ""
-#: TwitterBridgePlugin.php:90
+#: TwitterBridgePlugin.php:115
msgid "Twitter integration options"
msgstr ""
+#: TwitterBridgePlugin.php:207
+msgid ""
+"The Twitter \"bridge\" plugin allows you to integrate your StatusNet "
+"instance with <a href=\"http://twitter.com/\">Twitter</a>."
+msgstr ""
+
#: twittersettings.php:59
msgid "Twitter settings"
msgstr ""
@@ -51,78 +76,81 @@ msgstr ""
msgid "Connected Twitter account"
msgstr ""
-#: twittersettings.php:125
-msgid "Remove"
+#: twittersettings.php:128
+msgid "Disconnect my account from Twitter"
+msgstr ""
+
+#: twittersettings.php:133
+msgid "Disconnecting your Twitter could make it impossible to log in! Please "
+msgstr ""
+
+#: twittersettings.php:137
+msgid "set a password"
msgstr ""
-#: twittersettings.php:131
+#: twittersettings.php:139
+msgid " first."
+msgstr ""
+
+#: twittersettings.php:143
+#, 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
+msgid "Disconnect"
+msgstr ""
+
+#: twittersettings.php:158
msgid "Preferences"
msgstr ""
-#: twittersettings.php:135
+#: twittersettings.php:162
msgid "Automatically send my notices to Twitter."
msgstr ""
-#: twittersettings.php:142
+#: twittersettings.php:169
msgid "Send local \"@\" replies to Twitter."
msgstr ""
-#: twittersettings.php:149
+#: twittersettings.php:176
msgid "Subscribe to my Twitter friends here."
msgstr ""
-#: twittersettings.php:158
+#: twittersettings.php:185
msgid "Import my Friends Timeline."
msgstr ""
-#: twittersettings.php:174
+#: twittersettings.php:201
msgid "Save"
msgstr ""
-#: twittersettings.php:176
+#: twittersettings.php:203
msgid "Add"
msgstr ""
-#: twittersettings.php:201
+#: twittersettings.php:228
msgid "There was a problem with your session token. Try again, please."
msgstr ""
-#: twittersettings.php:211
+#: twittersettings.php:238
msgid "Unexpected form submission."
msgstr ""
-#: twittersettings.php:230
+#: twittersettings.php:257
msgid "Couldn't remove Twitter user."
msgstr ""
-#: twittersettings.php:234
-msgid "Twitter account removed."
+#: twittersettings.php:261
+msgid "Twitter account disconnected."
msgstr ""
-#: twittersettings.php:255 twittersettings.php:265
+#: twittersettings.php:282 twittersettings.php:292
msgid "Couldn't save Twitter preferences."
msgstr ""
-#: twittersettings.php:269
+#: twittersettings.php:296
msgid "Twitter preferences saved."
msgstr ""
-
-#: twitter.php:333
-msgid "Your Twitter bridge has been disabled."
-msgstr ""
-
-#: twitter.php:337
-#, 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"
-"\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"
-msgstr ""
diff --git a/plugins/TwitterBridge/twitteradminpanel.php b/plugins/TwitterBridge/twitteradminpanel.php
new file mode 100644
index 000000000..a78a92c66
--- /dev/null
+++ b/plugins/TwitterBridge/twitteradminpanel.php
@@ -0,0 +1,289 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Twitter bridge administration panel
+ *
+ * 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 Settings
+ * @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);
+}
+
+/**
+ * Administer global Twitter bridge settings
+ *
+ * @category Admin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class TwitteradminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return _m('Twitter');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _m('Twitter bridge settings');
+ }
+
+ /**
+ * Show the Twitter admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new TwitterAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $settings = array(
+ 'twitter' => array('consumer_key', 'consumer_secret'),
+ 'integration' => array('source')
+ );
+
+ static $booleans = array(
+ 'twitter' => array('signin'),
+ 'twitterimport' => array('enabled')
+ );
+
+ $values = array();
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting]
+ = $this->trimmed($setting);
+ }
+ }
+
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting]
+ = ($this->boolean($setting)) ? 1 : 0;
+ }
+ }
+
+ // This throws an exception on validation errors
+
+ $this->validate($values);
+
+ // assert(all values are valid);
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ foreach ($settings as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+ function validate(&$values)
+ {
+ // Validate consumer key and secret (can't be too long)
+
+ if (mb_strlen($values['twitter']['consumer_key']) > 255) {
+ $this->clientError(
+ _m("Invalid consumer key. Max length is 255 characters.")
+ );
+ }
+
+ if (mb_strlen($values['twitter']['consumer_secret']) > 255) {
+ $this->clientError(
+ _m("Invalid consumer secret. Max length is 255 characters.")
+ );
+ }
+ }
+}
+
+class TwitterAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'twitteradminpanel';
+ }
+
+ /**
+ * class of the form
+ *
+ * @return string class of the form
+ */
+
+ function formClass()
+ {
+ return 'form_settings';
+ }
+
+ /**
+ * Action of the form
+ *
+ * @return string URL of the action
+ */
+
+ function action()
+ {
+ return common_local_url('twitteradminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart(
+ 'fieldset',
+ array('id' => 'settings_twitter-application')
+ );
+ $this->out->element('legend', null, _m('Twitter application settings'));
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->li();
+ $this->input(
+ 'consumer_key',
+ _m('Consumer key'),
+ _m('Consumer key assigned by Twitter'),
+ 'twitter'
+ );
+ $this->unli();
+
+ $this->li();
+ $this->input(
+ 'consumer_secret',
+ _m('Consumer secret'),
+ _m('Consumer secret assigned by Twitter'),
+ 'twitter'
+ );
+ $this->unli();
+
+ $globalConsumerKey = common_config('twitter', 'global_consumer_key');
+ $globalConsumerSec = common_config('twitter', 'global_consumer_secret');
+
+ if (!empty($globalConsumerKey) && !empty($globalConsumerSec)) {
+ $this->li();
+ $this->out->element('p', 'form_guide', _('Note: a global consumer key and secret are set.'));
+ $this->unli();
+ }
+
+ $this->li();
+ $this->input(
+ 'source',
+ _m('Integration source'),
+ _m('Name of your Twitter application'),
+ 'integration'
+ );
+ $this->unli();
+
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+
+ $this->out->elementStart(
+ 'fieldset',
+ array('id' => 'settings_twitter-options')
+ );
+ $this->out->element('legend', null, _m('Options'));
+
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->li();
+
+ $this->out->checkbox(
+ 'signin', _m('Enable "Sign-in with Twitter"'),
+ (bool) $this->value('signin', 'twitter'),
+ _m('Allow users to login with their Twitter credentials')
+ );
+ $this->unli();
+
+ $this->li();
+ $this->out->checkbox(
+ 'enabled', _m('Enable Twitter import'),
+ (bool) $this->value('enabled', 'twitterimport'),
+ _m('Allow users to import their Twitter friends\' timelines')
+ );
+ $this->unli();
+
+ $this->out->elementEnd('ul');
+
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('submit', _('Save'), 'submit', null, _('Save Twitter settings'));
+ }
+}
diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php
index e20731e5c..bc004cb95 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -47,7 +47,7 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
* @author Zach Copley <zach@status.net>
* @author Julien C <chaumond@gmail.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
*
*/
class TwitterauthorizationAction extends Action
diff --git a/plugins/TwitterBridge/twitteroauthclient.php b/plugins/TwitterBridge/twitteroauthclient.php
index ba45b533d..93f6aadd1 100644
--- a/plugins/TwitterBridge/twitteroauthclient.php
+++ b/plugins/TwitterBridge/twitteroauthclient.php
@@ -22,7 +22,7 @@
* @category Integration
* @package StatusNet
* @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009-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/
*/
@@ -61,8 +61,23 @@ class TwitterOAuthClient extends OAuthClient
$consumer_key = common_config('twitter', 'consumer_key');
$consumer_secret = common_config('twitter', 'consumer_secret');
- parent::__construct($consumer_key, $consumer_secret,
- $oauth_token, $oauth_token_secret);
+ if (empty($consumer_key) && empty($consumer_secret)) {
+ $consumer_key = common_config(
+ 'twitter',
+ 'global_consumer_key'
+ );
+ $consumer_secret = common_config(
+ 'twitter',
+ 'global_consumer_secret'
+ );
+ }
+
+ parent::__construct(
+ $consumer_key,
+ $consumer_secret,
+ $oauth_token,
+ $oauth_token_secret
+ );
}
// XXX: the following two functions are to support the horrible hack
diff --git a/scripts/createsim.php b/scripts/createsim.php
index 882d74456..e0b5fc906 100644
--- a/scripts/createsim.php
+++ b/scripts/createsim.php
@@ -119,6 +119,9 @@ function newSub($i)
function main($usercount, $noticeavg, $subsavg, $tagmax)
{
+ global $config;
+ $config['site']['dupelimit'] = -1;
+
$n = 1;
newUser(0);
diff --git a/scripts/init_conversation.php b/scripts/init_conversation.php
new file mode 100755
index 000000000..675e7cabd
--- /dev/null
+++ b/scripts/init_conversation.php
@@ -0,0 +1,49 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+common_log(LOG_INFO, 'Initializing conversation table...');
+
+$notice = new Notice();
+$notice->query('select distinct conversation from notice');
+
+while ($notice->fetch()) {
+ $id = $notice->conversation;
+
+ if ($id) {
+ $uri = common_local_url('conversation', array('id' => $id));
+
+ // @fixme db_dataobject won't save our value for an autoincrement
+ // so we're bypassing the insert wrappers
+ $conv = new Conversation();
+ $sql = "insert into conversation (id,uri,created) values(%d,'%s','%s')";
+ $sql = sprintf($sql,
+ $id,
+ $conv->escape($uri),
+ $conv->escape(common_sql_now()));
+ echo "$id ";
+ $conv->query($sql);
+ print "... ";
+ }
+}
+print "done.\n";
diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php
index d372d898f..6dba16f95 100755
--- a/scripts/queuedaemon.php
+++ b/scripts/queuedaemon.php
@@ -126,8 +126,7 @@ class QueueDaemon extends SpawningDaemon
class QueueMaster extends IoMaster
{
/**
- * Initialize IoManagers for the currently configured site
- * which are appropriate to this instance.
+ * Initialize IoManagers which are appropriate to this instance.
*/
function initManagers()
{
diff --git a/scripts/setup_status_network.sh b/scripts/setup_status_network.sh
index 89d15415f..4ebb696c7 100755
--- a/scripts/setup_status_network.sh
+++ b/scripts/setup_status_network.sh
@@ -54,6 +54,8 @@ for top in $AVATARBASE $FILEBASE $BACKGROUNDBASE; do
chmod a+w $top/$nickname
done
+php $PHPBASE/scripts/checkschema.php -s"$server"
+
php $PHPBASE/scripts/registeruser.php \
-s"$server" \
-n"$nickname" \
diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php
index f882f673a..0bfa62a22 100755
--- a/scripts/update_po_templates.php
+++ b/scripts/update_po_templates.php
@@ -36,7 +36,11 @@ xgettext \
--default-domain=$domain \
--output=locale/$domain.po \
--language=PHP \
- --keyword="_m:1" \
+ --add-comments=TRANS \
+ --keyword="_m:1,1t" \
+ --keyword="_m:1c,2,2t" \
+ --keyword="_m:1,2,3t" \
+ --keyword="_m:1c,2,3,4t" \
--keyword="pgettext:1c,2" \
--keyword="npgettext:1c,2,3" \
actions/*.php \
@@ -62,8 +66,12 @@ xgettext \
--default-domain=$domain \
--output=locale/$domain.po \
--language=PHP \
+ --add-comments=TRANS \
--keyword='' \
- --keyword="_m:1" \
+ --keyword="_m:1,1t" \
+ --keyword="_m:1c,2,2t" \
+ --keyword="_m:1,2,3t" \
+ --keyword="_m:1c,2,3,4t" \
END;
foreach ($files as $file) {
@@ -186,6 +194,9 @@ foreach ($args as $arg) {
$allplugins = true;
} elseif (substr($arg, 0, 9) == "--plugin=") {
$plugins[] = substr($arg, 9);
+ } elseif ($arg == '--help') {
+ echo "options: --all --core --plugins --plugin=Foo\n\n";
+ exit(0);
}
}
diff --git a/scripts/updateavatarurl.php b/scripts/updateavatarurl.php
index 617c2e24c..3b6681bae 100644
--- a/scripts/updateavatarurl.php
+++ b/scripts/updateavatarurl.php
@@ -94,11 +94,11 @@ function updateAvatars($user)
}
}
- $orig = clone($avatar);
+ $orig_url = $avatar->url;
$avatar->url = Avatar::url($avatar->filename);
- if ($avatar->url != $orig->url) {
+ if ($avatar->url != $orig_url) {
$sql =
"UPDATE avatar SET url = '" . $avatar->url . "' ".
"WHERE profile_id = " . $avatar->profile_id . " ".
diff --git a/scripts/updateavatarurl_group.php b/scripts/updateavatarurl_group.php
new file mode 100644
index 000000000..ada42de20
--- /dev/null
+++ b/scripts/updateavatarurl_group.php
@@ -0,0 +1,99 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'i:n:a';
+$longoptions = array('id=', 'nickname=', 'all');
+
+$helptext = <<<END_OF_UPDATEAVATARURL_HELP
+updateavatarurl_group.php [options]
+update the URLs of all group avatars in the system
+
+ -i --id ID of group to update
+ -n --nickname nickname of the group to update
+ -a --all update all
+
+END_OF_UPDATEAVATARURL_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+try {
+ $user = null;
+
+ if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $group = User_group::staticGet('id', $id);
+ if (empty($group)) {
+ throw new Exception("Can't find group with id '$id'.");
+ }
+ updateGroupAvatars($group);
+ } else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $group = User_group::staticGet('nickname', $nickname);
+ if (empty($group)) {
+ throw new Exception("Can't find group with nickname '$nickname'");
+ }
+ updateGroupAvatars($group);
+ } else if (have_option('a', 'all')) {
+ $group = new User_group();
+ if ($group->find()) {
+ while ($group->fetch()) {
+ updateGroupAvatars($group);
+ }
+ }
+ } else {
+ show_help();
+ exit(1);
+ }
+} catch (Exception $e) {
+ print $e->getMessage()."\n";
+ exit(1);
+}
+
+function updateGroupAvatars($group)
+{
+ if (!have_option('q', 'quiet')) {
+ print "Updating avatars for group '".$group->nickname."' (".$group->id.")...";
+ }
+
+ if (empty($group->original_logo)) {
+ print "(none found)...";
+ } else {
+ // Using clone here was screwing up the group->find() iteration
+ $orig = User_group::staticGet('id', $group->id);
+
+ $group->original_logo = Avatar::url(basename($group->original_logo));
+ $group->homepage_logo = Avatar::url(basename($group->homepage_logo));
+ $group->stream_logo = Avatar::url(basename($group->stream_logo));
+ $group->mini_logo = Avatar::url(basename($group->mini_logo));
+
+ if (!$group->update($orig)) {
+ throw new Exception("Can't update avatars for group " . $group->nickname . ".");
+ }
+ }
+
+ if (have_option('v', 'verbose')) {
+ print "DONE.";
+ }
+ if (!have_option('q', 'quiet') || have_option('v', 'verbose')) {
+ print "\n";
+ }
+}
diff --git a/tests/ActivityParseTests.php b/tests/ActivityParseTests.php
new file mode 100644
index 000000000..7bf9cec7c
--- /dev/null
+++ b/tests/ActivityParseTests.php
@@ -0,0 +1,332 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+// XXX: we should probably have some common source for this stuff
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+define('STATUSNET', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+
+class ActivityParseTests extends PHPUnit_Framework_TestCase
+{
+ public function testExample1()
+ {
+ global $_example1;
+ $dom = DOMDocument::loadXML($_example1);
+ $act = new Activity($dom->documentElement);
+
+ $this->assertFalse(empty($act));
+
+ $this->assertEquals($act->time, 1243860840);
+ $this->assertEquals($act->verb, ActivityVerb::POST);
+
+ $this->assertFalse(empty($act->object));
+ $this->assertEquals($act->object->title, 'Punctuation Changeset');
+ $this->assertEquals($act->object->type, 'http://versioncentral.example.org/activity/changeset');
+ $this->assertEquals($act->object->summary, 'Fixing punctuation because it makes it more readable.');
+ $this->assertEquals($act->object->id, 'tag:versioncentral.example.org,2009:/change/1643245');
+ }
+
+ public function testExample3()
+ {
+ global $_example3;
+ $dom = DOMDocument::loadXML($_example3);
+
+ $feed = $dom->documentElement;
+
+ $entries = $feed->getElementsByTagName('entry');
+
+ $entry = $entries->item(0);
+
+ $act = new Activity($entry, $feed);
+
+ $this->assertFalse(empty($act));
+ $this->assertEquals($act->time, 1071340202);
+ $this->assertEquals($act->link, 'http://example.org/2003/12/13/atom03.html');
+
+ $this->assertEquals($act->verb, ActivityVerb::POST);
+
+ $this->assertFalse(empty($act->actor));
+ $this->assertEquals($act->actor->type, ActivityObject::PERSON);
+ $this->assertEquals($act->actor->title, 'John Doe');
+ $this->assertEquals($act->actor->id, 'mailto:johndoe@example.com');
+
+ $this->assertFalse(empty($act->object));
+ $this->assertEquals($act->object->type, ActivityObject::NOTE);
+ $this->assertEquals($act->object->id, 'urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a');
+ $this->assertEquals($act->object->title, 'Atom-Powered Robots Run Amok');
+ $this->assertEquals($act->object->summary, 'Some text.');
+ $this->assertEquals($act->object->link, 'http://example.org/2003/12/13/atom03.html');
+
+ $this->assertFalse(empty($act->context));
+
+ $this->assertTrue(empty($act->target));
+
+ $this->assertEquals($act->entry, $entry);
+ $this->assertEquals($act->feed, $feed);
+ }
+
+ public function testExample4()
+ {
+ global $_example4;
+ $dom = DOMDocument::loadXML($_example4);
+
+ $entry = $dom->documentElement;
+
+ $act = new Activity($entry);
+
+ $this->assertFalse(empty($act));
+ $this->assertEquals(1266547958, $act->time);
+ $this->assertEquals('http://example.net/notice/14', $act->link);
+
+ $this->assertFalse(empty($act->context));
+ $this->assertEquals('http://example.net/notice/12', $act->context->replyToID);
+ $this->assertEquals('http://example.net/notice/12', $act->context->replyToUrl);
+ $this->assertEquals('http://example.net/conversation/11', $act->context->conversation);
+ $this->assertEquals(array('http://example.net/user/1'), $act->context->attention);
+
+ $this->assertFalse(empty($act->object));
+ $this->assertEquals($act->object->content,
+ '@<span class="vcard"><a href="http://example.net/user/1" class="url"><span class="fn nickname">evan</span></a></span> now is the time for all good men to come to the aid of their country. #<span class="tag"><a href="http://example.net/tag/thetime" rel="tag">thetime</a></span>');
+
+ $this->assertFalse(empty($act->actor));
+ }
+
+ public function testExample5()
+ {
+ global $_example5;
+ $dom = DOMDocument::loadXML($_example5);
+
+ $feed = $dom->documentElement;
+
+ // @todo Test feed elements
+
+ $entries = $feed->getElementsByTagName('entry');
+ $entry = $entries->item(0);
+
+ $act = new Activity($entry, $feed);
+
+ // Post
+ $this->assertEquals($act->verb, ActivityVerb::POST);
+ $this->assertFalse(empty($act->context));
+
+ // Actor w/Portable Contacts stuff
+ $this->assertFalse(empty($act->actor));
+ $this->assertEquals($act->actor->type, ActivityObject::PERSON);
+ $this->assertEquals($act->actor->title, 'Test User');
+ $this->assertEquals($act->actor->id, 'http://example.net/mysite/user/3');
+ $this->assertEquals($act->actor->link, 'http://example.net/mysite/testuser');
+
+ $avatars = $act->actor->avatarLinks;
+
+ $this->assertEquals(
+ $avatars[0]->url,
+ 'http://example.net/mysite/avatar/3-96-20100224004207.jpeg'
+ );
+
+ $this->assertEquals($act->actor->displayName, 'Test User');
+
+ $poco = $act->actor->poco;
+ $this->assertEquals($poco->preferredUsername, 'testuser');
+ $this->assertEquals($poco->address->formatted, 'San Francisco, CA');
+ $this->assertEquals($poco->urls[0]->type, 'homepage');
+ $this->assertEquals($poco->urls[0]->value, 'http://example.com/blog.html');
+ $this->assertEquals($poco->urls[0]->primary, 'true');
+ $this->assertEquals($act->actor->geopoint, '37.7749295 -122.4194155');
+
+ }
+
+}
+
+$_example1 = <<<EXAMPLE1
+<?xml version='1.0' encoding='UTF-8'?>
+<entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
+ <id>tag:versioncentral.example.org,2009:/commit/1643245</id>
+ <published>2009-06-01T12:54:00Z</published>
+ <title>Geraldine committed a change to yate</title>
+ <content type="xhtml">Geraldine just committed a change to yate on VersionCentral</content>
+ <link rel="alternate" type="text/html"
+ href="http://versioncentral.example.org/geraldine/yate/commit/1643245" />
+ <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
+ <activity:verb>http://versioncentral.example.org/activity/commit</activity:verb>
+ <activity:object>
+ <activity:object-type>http://versioncentral.example.org/activity/changeset</activity:object-type>
+ <id>tag:versioncentral.example.org,2009:/change/1643245</id>
+ <title>Punctuation Changeset</title>
+ <summary>Fixing punctuation because it makes it more readable.</summary>
+ <link rel="alternate" type="text/html" href="..." />
+ </activity:object>
+</entry>
+EXAMPLE1;
+
+$_example2 = <<<EXAMPLE2
+<?xml version='1.0' encoding='UTF-8'?>
+<entry xmlns='http://www.w3.org/2005/Atom' xmlns:activity='http://activitystrea.ms/spec/1.0/'>
+ <id>tag:photopanic.example.com,2008:activity01</id>
+ <title>Geraldine posted a Photo on PhotoPanic</title>
+ <published>2008-11-02T15:29:00Z</published>
+ <link rel="alternate" type="text/html" href="/geraldine/activities/1" />
+ <activity:verb>
+ http://activitystrea.ms/schema/1.0/post
+ </activity:verb>
+ <activity:object>
+ <id>tag:photopanic.example.com,2008:photo01</id>
+ <title>My Cat</title>
+ <published>2008-11-02T15:29:00Z</published>
+ <link rel="alternate" type="text/html" href="/geraldine/photos/1" />
+ <activity:object-type>
+ tag:atomactivity.example.com,2008:photo
+ </activity:object-type>
+ <source>
+ <title>Geraldine's Photos</title>
+ <link rel="self" type="application/atom+xml" href="/geraldine/photofeed.xml" />
+ <link rel="alternate" type="text/html" href="/geraldine/" />
+ </source>
+ </activity:object>
+ <content type="html">
+ &lt;p&gt;Geraldine posted a Photo on PhotoPanic&lt;/p&gt;
+ &lt;img src="/geraldine/photo1.jpg"&gt;
+ </content>
+</entry>
+EXAMPLE2;
+
+$_example3 = <<<EXAMPLE3
+<?xml version="1.0" encoding="utf-8"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title>Example Feed</title>
+ <subtitle>A subtitle.</subtitle>
+ <link href="http://example.org/feed/" rel="self" />
+ <link href="http://example.org/" />
+ <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+ <author>
+ <name>John Doe</name>
+ <email>johndoe@example.com</email>
+ </author>
+
+ <entry>
+ <title>Atom-Powered Robots Run Amok</title>
+ <link href="http://example.org/2003/12/13/atom03" />
+ <link rel="alternate" type="text/html" href="http://example.org/2003/12/13/atom03.html"/>
+ <link rel="edit" href="http://example.org/2003/12/13/atom03/edit"/>
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+ <summary>Some text.</summary>
+ </entry>
+
+</feed>
+EXAMPLE3;
+
+$_example4 = <<<EXAMPLE4
+<?xml version='1.0' encoding='UTF-8'?>
+<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:ostatus="http://ostatus.org/schema/1.0">
+ <title>@evan now is the time for all good men to come to the aid of their country. #thetime</title>
+ <summary>@evan now is the time for all good men to come to the aid of their country. #thetime</summary>
+<author>
+ <name>spock</name>
+ <uri>http://example.net/user/2</uri>
+</author>
+<activity:actor>
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
+ <id>http://example.net/user/2</id>
+ <title>spock</title>
+ <link type="image/png" rel="avatar" href="http://example.net/theme/identica/default-avatar-profile.png"></link>
+</activity:actor>
+ <link rel="alternate" type="text/html" href="http://example.net/notice/14"/>
+ <id>http://example.net/notice/14</id>
+ <published>2010-02-19T02:52:38+00:00</published>
+ <updated>2010-02-19T02:52:38+00:00</updated>
+ <link rel="related" href="http://example.net/notice/12"/>
+ <thr:in-reply-to ref="http://example.net/notice/12" href="http://example.net/notice/12"></thr:in-reply-to>
+ <link rel="ostatus:conversation" href="http://example.net/conversation/11"/>
+ <link rel="ostatus:attention" href="http://example.net/user/1"/>
+ <content type="html">@&lt;span class=&quot;vcard&quot;&gt;&lt;a href=&quot;http://example.net/user/1&quot; class=&quot;url&quot;&gt;&lt;span class=&quot;fn nickname&quot;&gt;evan&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; now is the time for all good men to come to the aid of their country. #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/tag/thetime&quot; rel=&quot;tag&quot;&gt;thetime&lt;/a&gt;&lt;/span&gt;</content>
+ <category term="thetime"></category>
+</entry>
+EXAMPLE4;
+
+$_example5 = <<<EXAMPLE5
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0">
+ <id>3</id>
+ <title>testuser timeline</title>
+ <subtitle>Updates from testuser on Zach Dev!</subtitle>
+ <logo>http://example.net/mysite/avatar/3-96-20100224004207.jpeg</logo>
+ <updated>2010-02-24T06:38:49+00:00</updated>
+<author>
+ <name>testuser</name>
+ <uri>http://example.net/mysite/user/3</uri>
+
+</author>
+ <link href="http://example.net/mysite/testuser" rel="alternate" type="text/html"/>
+ <link href="http://example.net/mysite/api/statuses/user_timeline/3.atom" rel="self" type="application/atom+xml"/>
+ <link href="http://example.net/mysite/main/sup#3" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
+ <link href="http://example.net/mysite/main/push/hub" rel="hub"/>
+ <link href="http://example.net/mysite/main/salmon/user/3" rel="salmon"/>
+<activity:subject>
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
+ <id>http://example.net/mysite/user/3</id>
+ <title>Test User</title>
+ <link rel="alternate" type="text/html" href="http://example.net/mysite/testuser"/>
+ <link type="image/jpeg" rel="avatar" href="http://example.net/mysite/avatar/3-96-20100224004207.jpeg"/>
+ <georss:point>37.7749295 -122.4194155</georss:point>
+
+<poco:preferredUsername>testuser</poco:preferredUsername>
+<poco:displayName>Test User</poco:displayName>
+<poco:note>Just another test user.</poco:note>
+<poco:address>
+ <poco:formatted>San Francisco, CA</poco:formatted>
+</poco:address>
+<poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>http://example.com/blog.html</poco:value>
+ <poco:primary>true</poco:primary>
+
+</poco:urls>
+</activity:subject>
+<entry>
+ <title>Hey man, is that Freedom Code?! #freedom #hippy</title>
+ <summary>Hey man, is that Freedom Code?! #freedom #hippy</summary>
+<author>
+ <name>testuser</name>
+ <uri>http://example.net/mysite/user/3</uri>
+</author>
+<activity:actor>
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
+ <id>http://example.net/mysite/user/3</id>
+ <title>Test User</title>
+ <link rel="alternate" type="text/html" href="http://example.net/mysite/testuser"/>
+ <link type="image/jpeg" rel="avatar" href="http://example.net/mysite/avatar/3-96-20100224004207.jpeg"/>
+ <georss:point>37.7749295 -122.4194155</georss:point>
+
+<poco:preferredUsername>testuser</poco:preferredUsername>
+<poco:displayName>Test User</poco:displayName>
+<poco:note>Just another test user.</poco:note>
+<poco:address>
+ <poco:formatted>San Francisco, CA</poco:formatted>
+</poco:address>
+<poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>http://example.com/blog.html</poco:value>
+ <poco:primary>true</poco:primary>
+
+</poco:urls>
+</activity:actor>
+ <link rel="alternate" type="text/html" href="http://example.net/mysite/notice/7"/>
+ <id>http://example.net/mysite/notice/7</id>
+ <published>2010-02-24T00:53:06+00:00</published>
+ <updated>2010-02-24T00:53:06+00:00</updated>
+ <link rel="ostatus:conversation" href="http://example.net/mysite/conversation/7"/>
+ <content type="html">Hey man, is that Freedom Code?! #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/mysite/tag/freedom&quot; rel=&quot;tag&quot;&gt;freedom&lt;/a&gt;&lt;/span&gt; #&lt;span class=&quot;tag&quot;&gt;&lt;a href=&quot;http://example.net/mysite/tag/hippy&quot; rel=&quot;tag&quot;&gt;hippy&lt;/a&gt;&lt;/span&gt;</content>
+ <georss:point>37.8313160 -122.2852473</georss:point>
+
+</entry>
+</feed>
+EXAMPLE5;
diff --git a/tests/TagURITest.php b/tests/TagURITest.php
new file mode 100644
index 000000000..d23f8bfe6
--- /dev/null
+++ b/tests/TagURITest.php
@@ -0,0 +1,36 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+define('STATUSNET', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+
+$config['site']['server'] = 'example.net';
+$config['site']['path'] = '/apps/statusnet';
+
+class TagURITest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testProduction($format, $args, $uri)
+ {
+ $minted = call_user_func_array(array('TagURI', 'mint'),
+ array_merge(array($format), $args));
+
+ $this->assertEquals($uri, $minted);
+ }
+
+ static public function provider()
+ {
+ return array(array('favorite:%d:%d',
+ array(1, 3),
+ 'tag:example.net,'.date('Y-m-d').':apps:statusnet:favorite:1:3'));
+ }
+}
+
diff --git a/tests/UserFeedParseTest.php b/tests/UserFeedParseTest.php
new file mode 100644
index 000000000..b3f9a6417
--- /dev/null
+++ b/tests/UserFeedParseTest.php
@@ -0,0 +1,131 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+define('STATUSNET', true);
+
+require_once INSTALLDIR . '/lib/common.php';
+
+class UserFeedParseTests extends PHPUnit_Framework_TestCase
+{
+ public function testFeed1()
+ {
+ global $_testfeed1;
+ $dom = DOMDocument::loadXML($_testfeed1);
+ $this->assertFalse(empty($dom));
+
+ $entries = $dom->getElementsByTagName('entry');
+
+ $entry1 = $entries->item(0);
+ $this->assertFalse(empty($entry1));
+
+ $feedEl = $dom->getElementsByTagName('feed')->item(0);
+ $this->assertFalse(empty($feedEl));
+
+ // Test actor (from activity:subject)
+
+ $act1 = new Activity($entry1, $feedEl);
+ $this->assertFalse(empty($act1));
+ $this->assertFalse(empty($act1->actor));
+ $this->assertEquals($act1->actor->type, ActivityObject::PERSON);
+ $this->assertEquals($act1->actor->title, 'Zach Copley');
+ $this->assertEquals($act1->actor->id, 'http://localhost/statusnet/user/1');
+ $this->assertEquals($act1->actor->link, 'http://localhost/statusnet/zach');
+
+ $avatars = $act1->actor->avatarLinks;
+
+ $this->assertEquals(
+ $avatars[0]->url,
+ 'http://localhost/statusnet/theme/default/default-avatar-profile.png'
+ );
+
+ $this->assertEquals(
+ $avatars[1]->url,
+ 'http://localhost/statusnet/theme/default/default-avatar-stream.png'
+ );
+
+ $this->assertEquals(
+ $avatars[2]->url,
+ 'http://localhost/statusnet/theme/default/default-avatar-mini.png'
+ );
+
+ $this->assertEquals($act1->actor->displayName, 'Zach Copley');
+
+ $poco = $act1->actor->poco;
+ $this->assertEquals($poco->preferredUsername, 'zach');
+ $this->assertEquals($poco->address->formatted, 'El Cerrito, CA');
+ $this->assertEquals($poco->urls[0]->type, 'homepage');
+ $this->assertEquals($poco->urls[0]->value, 'http://zach.copley.name');
+ $this->assertEquals($poco->urls[0]->primary, 'true');
+ $this->assertEquals($poco->note, 'Zach Hack Attack');
+
+ // test the post
+
+ //var_export($act1);
+ $this->assertEquals($act1->object->type, 'http://activitystrea.ms/schema/1.0/note');
+ $this->assertEquals($act1->object->title, 'And now for something completely insane...');
+
+ $this->assertEquals($act1->object->content, 'And now for something completely insane...');
+ $this->assertEquals($act1->object->id, 'http://localhost/statusnet/notice/3');
+
+ }
+
+}
+
+$_testfeed1 = <<<TESTFEED1
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0">
+ <id>http://localhost/statusnet/api/statuses/user_timeline/1.atom</id>
+ <title>zach timeline</title>
+ <subtitle>Updates from zach on Zach Dev!</subtitle>
+ <logo>http://localhost/statusnet/theme/default/default-avatar-profile.png</logo>
+ <updated>2010-03-04T01:41:14+00:00</updated>
+<author>
+ <name>zach</name>
+ <uri>http://localhost/statusnet/user/1</uri>
+
+</author>
+ <link href="http://localhost/statusnet/zach" rel="alternate" type="text/html"/>
+ <link href="http://localhost/statusnet/main/sup#1" rel="http://api.friendfeed.com/2008/03#sup" type="application/json"/>
+ <link href="http://localhost/statusnet/main/push/hub" rel="hub"/>
+ <link href="http://localhost/statusnet/main/salmon/user/1" rel="http://salmon-protocol.org/ns/salmon-replies"/>
+ <link href="http://localhost/statusnet/main/salmon/user/1" rel="http://salmon-protocol.org/ns/salmon-mention"/>
+ <link href="http://localhost/statusnet/api/statuses/user_timeline/1.atom" rel="self" type="application/atom+xml"/>
+<activity:subject>
+ <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
+ <id>http://localhost/statusnet/user/1</id>
+ <title>Zach Copley</title>
+ <link rel="alternate" type="text/html" href="http://localhost/statusnet/zach"/>
+ <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://localhost/statusnet/theme/default/default-avatar-profile.png"/>
+ <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://localhost/statusnet/theme/default/default-avatar-stream.png"/>
+ <link rel="avatar" type="image/png" media:width="24" media:height="24" href="http://localhost/statusnet/theme/default/default-avatar-mini.png"/>
+
+<poco:preferredUsername>zach</poco:preferredUsername>
+<poco:displayName>Zach Copley</poco:displayName>
+<poco:note>Zach Hack Attack</poco:note>
+<poco:address>
+ <poco:formatted>El Cerrito, CA</poco:formatted>
+</poco:address>
+<poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>http://zach.copley.name</poco:value>
+ <poco:primary>true</poco:primary>
+
+</poco:urls>
+</activity:subject>
+<entry>
+ <title>And now for something completely insane...</title>
+ <link rel="alternate" type="text/html" href="http://localhost/statusnet/notice/3"/>
+ <id>http://localhost/statusnet/notice/3</id>
+ <published>2010-03-04T01:41:07+00:00</published>
+ <updated>2010-03-04T01:41:07+00:00</updated>
+ <link rel="ostatus:conversation" href="http://localhost/statusnet/conversation/3"/>
+ <content type="html">And now for something completely insane...</content>
+</entry>
+
+</feed>
+TESTFEED1;
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 89fe810c6..0246065a7 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -345,10 +345,14 @@ list-style-type:none;
float:left;
text-decoration:none;
padding:4px 11px;
+border-radius-topleft:4px;
+border-radius-topright:4px;
-moz-border-radius-topleft:4px;
-moz-border-radius-topright:4px;
-webkit-border-top-left-radius:4px;
-webkit-border-top-right-radius:4px;
+border-radius-topleft:0;
+border-radius-topright:0;
border-width:1px;
border-style:solid;
border-bottom:0;
@@ -359,6 +363,54 @@ float:left;
width:100%;
}
+body[id$=adminpanel] #site_nav_local_views {
+position:relative;
+z-index:9;
+float:right;
+margin-right:10.65%;
+width:22.25%;
+}
+body[id$=adminpanel] #site_nav_local_views li {
+width:100%;
+margin-right:0;
+margin-bottom:7px;
+}
+body[id$=adminpanel] #site_nav_local_views a {
+display:block;
+width:80%;
+padding-right:10%;
+padding-left:10%;
+border-radius-toprleft:0;
+-moz-border-radius-topleft:0;
+-webkit-border-top-left-radius:0;
+border-radius-topright:4px;
+-moz-border-radius-topright:4px;
+-webkit-border-top-right-radius:4px;
+border-radius-bottomright:4px;
+-moz-border-radius-bottomright:4px;
+-webkit-border-bottom-right-radius:4px;
+}
+body[id$=adminpanel] #site_nav_local_views li.current {
+box-shadow:none;
+-moz-box-shadow:none;
+-webkit-box-shadow:none;
+}
+
+body[id$=adminpanel] #content {
+border-radius-topleft:7px;
+border-radius-topright:7px;
+-moz-border-radius-topleft:7px;
+-moz-border-radius-topright:7px;
+-webkit-border-top-left-radius:7px;
+-webkit-border-top-right-radius:7px;
+border-radius-topright:0;
+-moz-border-radius-topright:0;
+-webkit-border-top-right-radius:0;
+}
+body[id$=adminpanel] #aside_primary {
+display:none;
+}
+
#site_nav_global_primary dt,
#site_nav_global_secondary dt {
display:none;
@@ -764,10 +816,12 @@ display:none;
text-align:center;
}
-.entity_moderation {
+.entity_moderation,
+.entity_role {
position:relative;
}
-.entity_moderation p {
+.entity_moderation p,
+.entity_role p {
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
@@ -775,13 +829,14 @@ font-weight:bold;
padding-bottom:2px;
margin-bottom:7px;
}
-.entity_moderation ul {
+.entity_moderation ul,
+.entity_role ul {
display:none;
}
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.entity_role:hover ul {
display:block;
-min-width:21%;
-width:100%;
+width:110%;
padding:11px;
position:absolute;
top:-1px;
@@ -799,8 +854,8 @@ list-style-type:none;
display:inline;
}
.entity_tags li {
-float:left;
-margin-right:11px;
+display:inline;
+margin-right:7px;
}
.aside .section {
@@ -1035,6 +1090,7 @@ text-decoration:underline;
.notice .entry-title {
overflow:hidden;
+word-wrap:break-word;
}
.notice .entry-title.ov {
overflow:visible;
@@ -1489,6 +1545,7 @@ text-align:center;
}
.aside .tag-cloud {
font-size:0.8em;
+word-wrap:break-word;
}
.tag-cloud li {
display:inline;
diff --git a/theme/base/css/ie.css b/theme/base/css/ie.css
index 70a6fd11a..41d053ac4 100644
--- a/theme/base/css/ie.css
+++ b/theme/base/css/ie.css
@@ -47,3 +47,7 @@ z-index:9999;
.notice .thumbnail img {
z-index:9999;
}
+
+.form_settings fieldset fieldset legend {
+line-height:auto;
+}
diff --git a/theme/base/images/icons/README b/theme/base/images/icons/README
new file mode 100644
index 000000000..f701959ca
--- /dev/null
+++ b/theme/base/images/icons/README
@@ -0,0 +1,59 @@
+/**
+ * @author Paul Jarvis http://code.google.com/p/twotiny/
+ * @license http://dev.perl.org/licenses/ Artistic License/GPL
+ * @note
+ White left arrow with green background
+ White right arrow with green background
+ White clip with green background
+ White heart with green background
+ White reply with green background
+ White garbage with green background
+ White pencil with green background
+ White envelope with green background
+ White speech bubble with green background
+ White shield with green background
+ White asterisk with green background
+ White x with green background
+ White plus with green background
+ White minus with green background
+ White skull with green background
+ White recycle with green background
+ White external with green background
+ White key with green background
+ White flag with green background
+ White checkmark with green background
+ White reject with green background
+ White play with green background
+ White pause with green background
+ */
+
+
+/**
+ * @author Sarven Capadisli <csarven@status.net>
+ * @copyright 2008-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/
+ * @note
+ Green clip with transparent background
+ Green heart with white background
+ White person with tie with green background
+ White sherif badge with green background
+ White boxes with green background
+ White speech bubble broken with green background
+ Green recycle with transparent background
+ Green pin with white background
+ White pin with green background
+ White underscore with green background
+ White C with green background
+ White magic wand with green background
+ Green badge with white background
+ Green sandbox with white background
+ Green speech bubble broken with white background
+ Green person with tie with white background
+ */
+
+Created by various authors
+* FOAF icon from http://iandavis.com/2006/foaf-icons/ with Public Domain license
+* Atom feed icon from http://intertwingly.net/wiki/pie/Icon with Public Domain license
+* RSS feed icon from http://www.feedicons.com/ (Mozilla, Microsoft, Matt Brett) with MPL/GPL/LGPL tri-license
+* Processing icon from/by Unknown with Unknown license //FIXME
diff --git a/theme/base/images/icons/icon_geo.png b/theme/base/images/icons/icon_geo.png
deleted file mode 100644
index 8df245699..000000000
--- a/theme/base/images/icons/icon_geo.png
+++ /dev/null
Binary files differ
diff --git a/theme/base/images/icons/icons-01.gif b/theme/base/images/icons/icons-01.gif
index 6f284f023..bf0f1230e 100644
--- a/theme/base/images/icons/icons-01.gif
+++ b/theme/base/images/icons/icons-01.gif
Binary files differ
diff --git a/theme/cloudy/css/display.css b/theme/cloudy/css/display.css
index 726062e47..285c2ad83 100644
--- a/theme/cloudy/css/display.css
+++ b/theme/cloudy/css/display.css
@@ -1628,15 +1628,23 @@ button.close,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
.notice-options .repeated,
-.form_notice a#notice_data-geo_name,
.form_notice label[for=notice_data-geo],
-button.minimize {
+button.minimize,
+.form_reset_key input.submit,
+.entity_clear input.submit,
+.entity_flag input.submit,
+.entity_flag p,
+.entity_subscribe input.submit,
+#realtime_play,
+#realtime_pause,
+#realtime_popup {
background-image:url(../../base/images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
@@ -1899,6 +1907,31 @@ background-position: 5px -1445px;
.entity_delete input.submit {
background-position: 5px -1511px;
}
+.form_reset_key input.submit {
+background-position: 5px -1973px;
+}
+.entity_clear input.submit {
+background-position: 5px -2039px;
+}
+.entity_flag input.submit,
+.entity_flag p {
+background-position: 5px -2105px;
+}
+.entity_subscribe input.accept {
+background-position: 5px -2171px;
+}
+.entity_subscribe input.reject {
+background-position: 5px -2237px;
+}
+#realtime_play {
+background-position: 0 -2308px;
+}
+#realtime_pause {
+background-position: 0 -2374px;
+}
+#realtime_popup {
+background-position: 0 -1714px;
+}
/* NOTICES */
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index a2f101342..be341813a 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -49,6 +49,7 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_next a,
.form_settings fieldset fieldset,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
border-color:#DDDDDD;
}
@@ -67,6 +68,7 @@ input.submit,
.entity_actions a,
.entity_actions input,
.entity_moderation p,
+.entity_role p,
button {
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
@@ -127,7 +129,8 @@ a,
.notice-options input,
.entity_actions a,
.entity_actions input,
-.entity_moderation p {
+.entity_moderation p,
+.entity_role p {
color:#002FA7;
}
@@ -184,11 +187,15 @@ button.close,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
+.entity_role p,
+.entity_role_administrator input.submit,
+.entity_role_moderator input.submit,
.notice-options .repeated,
.form_notice label[for=notice_data-geo],
button.minimize,
@@ -196,7 +203,10 @@ button.minimize,
.entity_clear input.submit,
.entity_flag input.submit,
.entity_flag p,
-.entity_subscribe input.submit {
+.entity_subscribe input.submit,
+#realtime_play,
+#realtime_pause,
+#realtime_popup {
background-image:url(../../base/images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
@@ -225,6 +235,7 @@ border-color:transparent;
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
background-color:#FFFFFF;
}
@@ -291,6 +302,7 @@ background-position:0 1px;
.form_group_leave input.submit,
.form_user_subscribe input.submit,
.form_user_unsubscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a {
background-color:#AAAAAA;
color:#FFFFFF;
@@ -301,18 +313,20 @@ background-position:5px -1246px;
}
.form_group_join input.submit,
.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a {
background-position:5px -1181px;
}
.entity_edit a {
-background-position: 5px -718px;
+background-position: 5px -719px;
}
.entity_send-a-message a {
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
@@ -344,6 +358,27 @@ background-position: 5px -1445px;
.entity_delete input.submit {
background-position: 5px -1511px;
}
+.entity_sandbox .form_user_unsandbox input.submit {
+background-position: 5px -2568px;
+}
+.entity_silence .form_user_unsilence input.submit {
+background-position: 5px -2633px;
+}
+.entity_role p {
+background-position: 5px -2436px;
+}
+.entity_role_administrator .form_user_grantrole input.submit {
+background-position: 5px -983px;
+}
+.entity_role_moderator .form_user_grantrole input.submit {
+background-position: 5px -1313px;
+}
+.entity_role_administrator .form_user_revokerole input.submit {
+background-position: 5px -2699px;
+}
+.entity_role_moderator .form_user_revokerole input.submit {
+background-position: 5px -2501px;
+}
.form_reset_key input.submit {
background-position: 5px -1973px;
}
@@ -360,6 +395,16 @@ background-position: 5px -2171px;
.entity_subscribe input.reject {
background-position: 5px -2237px;
}
+#realtime_play {
+background-position: 0 -2308px;
+}
+#realtime_pause {
+background-position: 0 -2374px;
+}
+#realtime_popup {
+background-position: 0 -1714px;
+}
+
/* NOTICES */
.notice .attachment {
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index e21404745..db85408eb 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -49,6 +49,7 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_next a,
.form_settings fieldset fieldset,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
border-color:#DDDDDD;
}
@@ -67,6 +68,7 @@ input.submit,
.entity_actions a,
.entity_actions input,
.entity_moderation p,
+.entity_role p,
button {
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
@@ -81,7 +83,8 @@ background-color:transparent;
input:focus, textarea:focus, select:focus,
.form_notice.warning #notice_data-text,
.form_notice.warning #notice_text-count,
-.form_settings .form_note {
+.form_settings .form_note,
+.entity_actions .dialogbox .form_data input:focus {
border-color:#9BB43E;
}
input.submit {
@@ -127,7 +130,8 @@ a,
.notice-options input,
.entity_actions a,
.entity_actions input,
-.entity_moderation p {
+.entity_moderation p,
+.entity_role p {
color:#002FA7;
}
@@ -184,11 +188,15 @@ button.close,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
+.entity_role p,
+.entity_role_administrator input.submit,
+.entity_role_moderator input.submit,
.notice-options .repeated,
.form_notice label[for=notice_data-geo],
button.minimize,
@@ -196,7 +204,10 @@ button.minimize,
.entity_clear input.submit,
.entity_flag input.submit,
.entity_flag p,
-.entity_subscribe input.submit {
+.entity_subscribe input.submit,
+#realtime_play,
+#realtime_pause,
+#realtime_popup {
background-image:url(../../base/images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
@@ -225,6 +236,7 @@ border-color:transparent;
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
background-color:#FFFFFF;
}
@@ -290,6 +302,7 @@ background-position:0 1px;
.form_group_leave input.submit,
.form_user_subscribe input.submit,
.form_user_unsubscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a {
background-color:#AAAAAA;
color:#FFFFFF;
@@ -300,18 +313,20 @@ background-position:5px -1246px;
}
.form_group_join input.submit,
.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
.entity_subscribe a {
background-position:5px -1181px;
}
.entity_edit a {
-background-position: 5px -718px;
+background-position: 5px -719px;
}
.entity_send-a-message a {
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
+.entity_role:hover ul,
.dialogbox {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
@@ -343,6 +358,27 @@ background-position: 5px -1445px;
.entity_delete input.submit {
background-position: 5px -1511px;
}
+.entity_sandbox .form_user_unsandbox input.submit {
+background-position: 5px -2568px;
+}
+.entity_silence .form_user_unsilence input.submit {
+background-position: 5px -2633px;
+}
+.entity_role p {
+background-position: 5px -2436px;
+}
+.entity_role_administrator .form_user_grantrole input.submit {
+background-position: 5px -983px;
+}
+.entity_role_moderator .form_user_grantrole input.submit {
+background-position: 5px -1313px;
+}
+.entity_role_administrator .form_user_revokerole input.submit {
+background-position: 5px -2699px;
+}
+.entity_role_moderator .form_user_revokerole input.submit {
+background-position: 5px -2501px;
+}
.form_reset_key input.submit {
background-position: 5px -1973px;
}
@@ -359,6 +395,15 @@ background-position: 5px -2171px;
.entity_subscribe input.reject {
background-position: 5px -2237px;
}
+#realtime_play {
+background-position: 0 -2308px;
+}
+#realtime_pause {
+background-position: 0 -2374px;
+}
+#realtime_popup {
+background-position: 0 -1714px;
+}
/* NOTICES */
.notice .attachment {
diff --git a/theme/otalk/css/base.css b/theme/otalk/css/base.css
deleted file mode 100644
index 8af86f9db..000000000
--- a/theme/otalk/css/base.css
+++ /dev/null
@@ -1,1211 +0,0 @@
-/** theme: otalk base
- *
- * @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-* { margin:0; padding:0; }
-img { display:block; border:0; }
-a abbr { cursor: pointer; border-bottom:0; }
-table { border-collapse:collapse; }
-ol { list-style-position:inside; }
-html { font-size: 87.5%; background-color:#fff; }
-body {
-background-color:#fff;
-color:#000;
-font-family:sans-serif;
-font-size:1em;
-line-height:1.65;
-position:relative;
-}
-h1,h2,h3,h4,h5,h6 {
-margin-bottom:7px;
-overflow:hidden;
-}
-h1 {
-font-size:1.4em;
-margin-bottom:18px;
-}
-#showstream h1 { display:none; }
-h2 { font-size:1.3em; }
-h3 { font-size:1.2em; }
-h4 { font-size:1.1em; }
-h5 { font-size:1em; }
-h6 { font-size:0.9em; }
-
-caption {
-font-weight:bold;
-}
-legend {
-font-weight:bold;
-font-size:1.3em;
-}
-input, textarea, select, option {
-padding:4px;
-font-family:sans-serif;
-font-size:1em;
-}
-input, textarea, select {
-border-width:2px;
-border-style: solid;
-border-radius:4px;
--moz-border-radius:4px;
--webkit-border-radius:4px;
-}
-
-input.submit {
-font-weight:bold;
-cursor:pointer;
-}
-textarea {
-overflow:auto;
-}
-option {
-padding-bottom:0;
-}
-fieldset {
-padding:0;
-border:0;
-}
-form ul li {
-list-style-type:none;
-margin:0 0 18px 0;
-}
-form label {
-font-weight:bold;
-}
-input.checkbox {
-position:relative;
-top:2px;
-left:0;
-border:0;
-}
-
-.error,
-.success {
-padding:4px 7px;
-border-radius:4px;
--moz-border-radius:4px;
--webkit-border-radius:4px;
-margin-bottom:18px;
-}
-form label.submit {
-display:none;
-}
-
-.form_settings {
-clear:both;
-}
-
-.form_settings fieldset {
-margin-bottom:29px;
-}
-.form_settings input.remove {
-margin-left:11px;
-}
-.form_settings .form_data li {
-width:100%;
-float:left;
-}
-.form_settings .form_data label {
-float:left;
-}
-.form_settings .form_data textarea,
-.form_settings .form_data select,
-.form_settings .form_data input {
-margin-left:11px;
-float:left;
-}
-.form_settings .form_data input.submit {
-margin-left:0;
-}
-
-.form_settings label {
-margin-top:2px;
-width:152px;
-}
-
-.form_actions label {
-display:none;
-}
-.form_guide {
-font-style:italic;
-}
-
-.form_settings #settings_autosubscribe label {
-display:inline;
-font-weight:bold;
-}
-
-#form_settings_profile legend,
-#form_login legend,
-#form_register legend,
-#form_password legend,
-#form_settings_avatar legend,
-#newgroup legend,
-#editgroup legend,
-#form_tag_user legend,
-#form_remote_subscribe legend,
-#form_openid_login legend,
-#form_search legend,
-#form_invite legend,
-#form_notice_delete legend,
-#form_password_recover legend,
-#form_password_change legend {
-display:none;
-}
-
-.form_settings .form_data p.form_guide {
-clear:both;
-margin-left:163px;
-margin-bottom:0;
-}
-
-.form_settings p {
-margin-bottom:11px;
-}
-
-.form_settings input.checkbox {
-margin-top:3px;
-margin-left:0;
-}
-.form_settings label.checkbox {
-font-weight:normal;
-margin-top:0;
-margin-right:0;
-margin-left:11px;
-float:left;
-width:90%;
-}
-
-
-#form_login p.form_guide,
-#form_register #settings_rememberme p.form_guide,
-#form_openid_login #settings_rememberme p.form_guide,
-#settings_twitter_remove p.form_guide,
-#form_search ul.form_data #q {
-margin-left:0;
-}
-
-.form_settings .form_note {
-border-radius:4px;
--moz-border-radius:4px;
--webkit-border-radius:4px;
-padding:0 7px;
-}
-
-
-.form_settings input.form_action-primary {
-padding:0;
-}
-.form_settings input.form_action-secondary {
-margin-left:29px;
-}
-
-#form_search .submit {
-margin-left:11px;
-}
-
-address {
-float:left;
-margin-bottom:18px;
-margin-left:18px;
-}
-address.vcard img.logo {
-margin-right:0;
-}
-address .fn {
-font-weight:bold;
-}
-address img + .fn {
-display:none;
-}
-
-#header {
-width:100%;
-position:relative;
-float:left;
-padding-top:18px;
-margin-bottom:29px;
-}
-
-#site_nav_global_primary {
-float:right;
-margin-right:18px;
-margin-bottom:11px;
-margin-left:18px;
-}
-#site_nav_global_primary ul li {
-display:inline;
-margin-left:11px;
-}
-
-.system_notice dt {
-font-weight:bold;
-text-transform:uppercase;
-display:none;
-}
-
-#site_notice {
-position:absolute;
-top:65px;
-right:18px;
-width:250px;
-width:24%;
-}
-#page_notice {
-clear:both;
-margin-bottom:18px;
-}
-
-
-#anon_notice {
-float:left;
-width:43.2%;
-padding:1.1%;
-border-radius:7px;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-border-width:2px;
-border-style:solid;
-line-height:1.5;
-font-size:1.1em;
-font-weight:bold;
-}
-
-
-#footer {
-float:left;
-width:64%;
-padding:18px;
-}
-
-#site_nav_local_views {
-float:left;
-}
-#site_nav_local_views dt {
-display:none;
-}
-#site_nav_local_views li {
-float:left;
-margin-right:18px;
-list-style-type:none;
-}
-#site_nav_local_views a {
-float:left;
-text-decoration:none;
-padding:4px 11px;
--moz-border-radius-topleft:4px;
--moz-border-radius-topright:4px;
--webkit-border-top-left-radius:4px;
--webkit-border-top-right-radius:4px;
-border-width:0;
-border-style:solid;
-border-bottom:0;
-text-shadow: 2px 2px 2px #ddd;
-font-weight:bold;
-}
-#site_nav_local_views .nav {
-float:left;
-width:100%;
-border-bottom-width:1px;
-border-bottom-style:solid;
-}
-
-#site_nav_global_primary dt,
-#site_nav_global_secondary dt {
-display:none;
-}
-
-#site_nav_global_secondary {
-margin-bottom:11px;
-}
-
-#site_nav_global_secondary ul li {
-display:inline;
-margin-right:11px;
-}
-#export_data li a {
-padding-left:20px;
-}
-#export_data li a.foaf {
-padding-left:30px;
-}
-#export_data li a.export_vcard {
-padding-left:28px;
-}
-
-#export_data ul {
-display:inline;
-}
-#export_data li {
-list-style-type:none;
-display:inline;
-margin-left:11px;
-}
-#export_data li:first-child {
-margin-left:0;
-}
-
-#licenses {
-font-size:0.9em;
-}
-
-#licenses dt {
-font-weight:bold;
-display:none;
-}
-#licenses dd {
-margin-bottom:11px;
-line-height:1.5;
-}
-
-#site_content_license_cc {
-margin-bottom:0;
-}
-#site_content_license_cc img {
-display:inline;
-vertical-align:top;
-margin-right:4px;
-}
-
-#wrap {
-margin:0 auto;
-width:100%;
-min-width:760px;
-max-width:1003px;
-overflow:hidden;
-}
-
-#core {
-position:relative;
-width:100%;
-float:left;
-margin-bottom:1em;
-}
-
-#content {
-width:67.9%;
-min-height:259px;
-padding-top:1.795%;
-padding-bottom:1.795%;
-float:left;
-clear:left;
-border-radius:7px;
--moz-border-radius:7px;
--moz-border-radius-topleft:0;
--webkit-border-radius:7px;
--webkit-border-top-left-radius:0;
-border-style:solid;
-border-width:0;
-margin-bottom:18px;
-}
-
-#content_inner {
-position:relative;
-width:100%;
-float:left;
-}
-
-#aside_primary {
-width:27.917%;
-min-height:259px;
-float:left;
-padding:1.795%;
-margin-left:0.385%;
-border-radius:7px;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-border-width:1px;
-border-style:solid;
-}
-
-#form_notice {
-width:45.664%;
-float:left;
-position:relative;
-line-height:1;
-}
-#form_notice fieldset {
-border:0;
-padding:0;
-}
-#form_notice legend {
-display:none;
-}
-#form_notice textarea {
-float:left;
-border-radius:7px;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-width:80.789%;
-height:67px;
-line-height:1.5;
-padding:7px 7px 16px 7px;
-}
-#form_notice label {
-display:block;
-float:left;
-font-size:1.3em;
-margin-bottom:7px;
-}
-#form_notice #notice_submit label {
-display:none;
-}
-#form_notice .form_note {
-position:absolute;
-top:99px;
-right:98px;
-z-index:9;
-}
-#form_notice .form_note dt {
-font-weight:bold;
-display:none;
-}
-#notice_text-count {
-font-weight:bold;
-line-height:1.15;
-padding:1px 2px;
-}
-#form_notice #notice_action-submit {
-width:14%;
-height:47px;
-padding:0;
-position:absolute;
-bottom:0;
-right:0;
-}
-#form_notice label[for=to] {
-margin-top:7px;
-}
-#form_notice select[id=to] {
-margin-bottom:7px;
-margin-left:18px;
-float:left;
-}
-
-
-/* entity_profile */
-.entity_profile {
-position:relative;
-width:521px;
-min-height:123px;
-float:left;
-margin-bottom:18px;
-margin-left:0;
-overflow:hidden;
-}
-.entity_profile dt,
-#entity_statistics dt {
-font-weight:bold;
-}
-.entity_profile dd {
-display:inline;
-}
-
-.entity_profile .entity_depiction {
-float:left;
-width:96px;
-margin-right:18px;
-margin-bottom:18px;
-}
-
-.entity_profile .entity_fn,
-.entity_profile .entity_nickname,
-.entity_profile .entity_location,
-.entity_profile .entity_url,
-.entity_profile .entity_note,
-.entity_profile .entity_tags {
-margin-left:113px;
-margin-bottom:4px;
-}
-
-.entity_profile .entity_fn,
-.entity_profile .entity_nickname {
-margin-left:11px;
-display:inline;
-font-weight:bold;
-}
-.entity_profile .entity_nickname {
-margin-left:0;
-}
-
-.entity_profile .entity_fn dd:before {
-content: "(";
-font-weight:normal;
-}
-.entity_profile .entity_fn dd:after {
-content: ")";
-font-weight:normal;
-}
-
-.entity_profile dt {
-display:none;
-}
-.entity_profile h2 {
-display:none;
-}
-/* entity_profile */
-
-
-/*entity_actions*/
-.entity_actions {
-float:left;
-margin-left:4.35%;
-max-width:25%;
-}
-.entity_actions h2 {
-display:none;
-}
-.entity_actions ul {
-list-style-type:none;
-}
-.entity_actions li {
-margin-bottom:4px;
-}
-.entity_actions li:first-child {
-border-top:0;
-}
-.entity_actions fieldset {
-border:0;
-padding:0;
-}
-.entity_actions legend {
-display:none;
-}
-
-.entity_actions input.submit {
-display:block;
-text-align:left;
-width:100%;
-}
-.entity_actions a,
-.entity_nudge p,
-.entity_remote_subscribe {
-text-decoration:none;
-font-weight:bold;
-display:block;
-}
-
-.form_user_block input.submit,
-.form_user_unblock input.submit,
-.entity_send-a-message a,
-.entity_edit a,
-.form_user_nudge input.submit,
-.entity_nudge p {
-border:0;
-padding-left:20px;
-}
-
-.entity_edit a,
-.entity_send-a-message a,
-.entity_nudge p {
-padding:4px 4px 4px 23px;
-}
-
-.entity_remote_subscribe {
-padding:4px;
-border-width:2px;
-border-style:solid;
-border-radius:4px;
--moz-border-radius:4px;
--webkit-border-radius:4px;
-}
-.entity_actions .accept {
-margin-bottom:18px;
-}
-
-.entity_tags ul {
-list-style-type:none;
-display:inline;
-}
-.entity_tags li {
-display:inline;
-margin-right:4px;
-}
-
-.aside .section {
-margin-bottom:29px;
-clear:both;
-float:left;
-width:100%;
-}
-.aside .section h2 {
-text-transform:uppercase;
-font-size:1em;
-}
-
-#entity_statistics dt,
-#entity_statistics dd {
-display:inline;
-}
-#entity_statistics dt:after {
-content: ":";
-}
-
-.section ul.entities {
-float:left;
-width:100%;
-}
-.section .entities li {
-list-style-type:none;
-float:left;
-margin-right:7px;
-margin-bottom:7px;
-}
-.section .entities li .photo {
-margin-right:0;
-margin-bottom:0;
-}
-.section .entities li .fn {
-display:none;
-}
-
-.aside .section p,
-.aside .section .more {
-clear:both;
-}
-
-.profile .entity_profile {
-margin-bottom:0;
-min-height:60px;
-}
-
-
-.profile .form_group_join legend,
-.profile .form_group_leave legend,
-.profile .form_user_subscribe legend,
-.profile .form_user_unsubscribe legend {
-display:none;
-}
-
-.profiles {
-list-style-type:none;
-}
-.profile .entity_profile .entity_location {
-width:auto;
-clear:none;
-margin-left:11px;
-}
-.profile .entity_profile dl,
-.profile .entity_profile dd {
-display:inline;
-float:none;
-}
-.profile .entity_profile .entity_note,
-.profile .entity_profile .entity_url,
-.profile .entity_profile .entity_tags,
-.profile .entity_profile .form_subscription_edit {
-margin-left:59px;
-clear:none;
-display:block;
-width:auto;
-}
-.profile .entity_profile .entity_tags dt {
-display:inline;
-margin-right:11px;
-}
-
-
-.profile .entity_profile .form_subscription_edit label {
-font-weight:normal;
-margin-right:11px;
-}
-
-
-/* NOTICE */
-.notice,
-.profile {
-position:relative;
-clear:both;
-float:left;
-width:100%;
-border-width:0;
-border-style:solid;
-margin-bottom:29px;
-}
-.notices li {
-list-style-type:none;
-}
-
-#content .notice {
-width:37%;
-margin-left:17px;
-margin-bottom:47px;
-clear:none;
-overflow:hidden;
-padding: 0 0 0 65px;
-min-height:235px;
-}
-
-#aside_primary .notice {
-margin-bottom:18px;
-}
-
-#shownotice #content .notice {
-width:96%;
-}
-
-
-/* NOTICES */
-#notices_primary {
-float:left;
-width:100%;
-border-radius:7px;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-}
-#notices_primary h2 {
-display:none;
-}
-.notice-data a span {
-display:block;
-padding-left:28px;
-}
-
-.notice .author {
-margin-right:11px;
-}
-
-#content .notice .author {
-/*overflow:hidden;*/
-}
-
-.fn {
-overflow:hidden;
-}
-
-.notice .author .fn {
-font-weight:bold;
-}
-
-.notice .author .photo {
-margin-bottom:0;
-}
-
-#content .notice .author .photo {
-margin-left:-83px;
-padding-right:17px;
-}
-
-
-.vcard .photo {
-display:inline;
-margin-right:11px;
-margin-bottom:11px;
-float:left;
-}
-.vcard .url {
-text-decoration:none;
-}
-.vcard .url:hover {
-text-decoration:underline;
-}
-
-.notice .entry-title {
-float:left;
-width:100%;
-overflow:hidden;
-}
-#content .notice .entry-title {
-overflow:visible;
-margin-bottom:11px;
-padding:18px;
-width:85%;
-border-radius:7px;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-min-height:161px;
-}
-
-#shownotice .notice .entry-title {
-font-size:2.2em;
-}
-
-.notice p.entry-content {
-display:inline;
-}
-
-#content .notice p.entry-content
-overflow:hidden;
-}
-
-.notice p.entry-content .vcard a {
-border-radius:4px;
--moz-border-radius:4px;
--webkit-border-radius:4px;
-}
-
-.notice div.entry-content {
-clear:left;
-float:left;
-font-size:0.95em;
-}
-#showstream .notice div.entry-content {
-margin-left:0;
-}
-
-.notice .notice-options a,
-.notice .notice-options input {
-float:left;
-font-size:1.025em;
-}
-
-.notice div.entry-content dl,
-.notice div.entry-content dt,
-.notice div.entry-content dd {
-display:inline;
-}
-
-.notice div.entry-content .timestamp dt,
-.notice div.entry-content .response dt {
-display:none;
-}
-.notice div.entry-content .timestamp a {
-display:inline-block;
-}
-.notice div.entry-content .device dt {
-text-transform:lowercase;
-}
-
-
-
-.notice-data {
-position:absolute;
-top:18px;
-right:0;
-min-height:50px;
-margin-bottom:4px;
-}
-.notice .entry-content .notice-data dt {
-display:none;
-}
-
-.notice-data a {
-display:block;
-outline:none;
-}
-
-.notice-options {
-position:absolute;
-top:120px;
-left:30px;
-font-size:0.95em;
-}
-
-.notice-options a {
-float:left;
-}
-.notice-options .notice_delete,
-.notice-options .notice_reply,
-.notice-options .form_favor,
-.notice-options .form_disfavor {
-position:absolute;
-left:0;
-}
-.notice-options .form_favor,
-.notice-options .form_disfavor {
-top:0;
-}
-.notice-options .notice_reply {
-top:29px;
-}
-.notice-options .notice_delete {
-top:58px;
-}
-.notice-options .notice_reply dt {
-display:none;
-}
-
-.notice-options input,
-.notice-options a {
-text-indent:-9999px;
-outline:none;
-}
-
-.notice-options .notice_reply a,
-.notice-options input.submit {
-display:block;
-border:0;
-}
-.notice-options .notice_reply a,
-.notice-options .notice_delete a {
-text-decoration:none;
-padding-left:16px;
-}
-
-.notice-options form input.submit {
-width:16px;
-padding:2px 0;
-}
-
-.notice-options .notice_delete dt,
-.notice-options .form_favor legend,
-.notice-options .form_disfavor legend {
-display:none;
-}
-.notice-options .notice_delete fieldset,
-.notice-options .form_favor fieldset,
-.notice-options .form_disfavor fieldset {
-border:0;
-padding:0;
-}
-
-
-#usergroups #new_group {
-float: left;
-margin-right: 2em;
-}
-#new_group, #group_search {
-margin-bottom:18px;
-}
-#new_group a {
-padding-left:20px;
-}
-
-
-#filter_tags {
-margin-bottom:11px;
-float:left;
-}
-#filter_tags dt {
-display:none;
-}
-#filter_tags ul {
-list-style-type:none;
-}
-#filter_tags ul li {
-float:left;
-margin-left:7px;
-padding-left:7px;
-border-left-width:1px;
-border-left-style:solid;
-}
-#filter_tags ul li.child_1 {
-margin-left:0;
-border-left:0;
-padding-left:0;
-}
-#filter_tags ul li#filter_tags_all a {
-font-weight:bold;
-margin-top:7px;
-float:left;
-}
-
-#filter_tags ul li#filter_tags_item label {
-margin-right:7px;
-}
-#filter_tags ul li#filter_tags_item label,
-#filter_tags ul li#filter_tags_item select {
-display:inline;
-}
-#filter_tags ul li#filter_tags_item p {
-float:left;
-margin-left:38px;
-}
-#filter_tags ul li#filter_tags_item input {
-position:relative;
-top:3px;
-left:3px;
-}
-
-
-
-.pagination {
-float:left;
-clear:both;
-width:100%;
-margin-top:18px;
-}
-
-.pagination dt {
-font-weight:bold;
-display:none;
-}
-
-.pagination .nav {
-float:left;
-width:100%;
-list-style-type:none;
-}
-
-.pagination .nav_prev {
-float:left;
-}
-.pagination .nav_next {
-float:right;
-}
-
-.pagination a {
-display:block;
-text-decoration:none;
-font-weight:bold;
-padding:7px;
-border-width:1px;
-border-style:solid;
--moz-border-radius:7px;
--webkit-border-radius:7px;
-border-radius:7px;
-}
-
-.pagination .nav_prev a {
-padding-left:30px;
-}
-.pagination .nav_next a {
-padding-right:30px;
-}
-/* END: NOTICE */
-
-
-.hentry .entry-content p {
-margin-bottom:18px;
-}
-.hentry entry-content ol,
-.hentry .entry-content ul {
-list-style-position:inside;
-}
-.hentry .entry-content li {
-margin-bottom:18px;
-}
-.hentry .entry-content li li {
-margin-left:18px;
-}
-
-
-
-
-/* TOP_POSTERS */
-.section tbody td {
-padding-right:11px;
-padding-bottom:11px;
-}
-.section .vcard .photo {
-margin-right:7px;
-margin-bottom:0;
-}
-
-.section .notice {
-padding-top:7px;
-padding-bottom:7px;
-border-top:0;
-}
-
-.section .notice:first-child {
-padding-top:0;
-}
-
-.section .notice .author {
-margin-right:0;
-}
-.section .notice .author .fn {
-display:none;
-}
-
-
-/* tagcloud */
-.tag-cloud {
-list-style-type:none;
-text-align:center;
-}
-.aside .tag-cloud {
-font-size:0.8em;
-}
-.tag-cloud li {
-display:inline;
-margin-right:7px;
-line-height:1.25;
-}
-.aside .tag-cloud li {
-line-height:1.5;
-}
-.tag-cloud li a {
-text-decoration:none;
-}
-#tagcloud.section dt {
-text-transform:uppercase;
-font-weight:bold;
-}
-.tag-cloud-1 {
-font-size:1em;
-}
-.tag-cloud-2 {
-font-size:1.25em;
-}
-.tag-cloud-3 {
-font-size:1.75em;
-}
-.tag-cloud-4 {
-font-size:2em;
-}
-.tag-cloud-5 {
-font-size:2.25em;
-}
-.tag-cloud-6 {
-font-size:2.75em;
-}
-.tag-cloud-7 {
-font-size:3.25em;
-}
-
-#publictagcloud #tagcloud.section dt {
-display:none;
-}
-
-#form_settings_photo .form_data {
-clear:both;
-}
-
-#form_settings_avatar li {
-width:auto;
-}
-#form_settings_avatar input {
-margin-left:0;
-}
-#avatar_original,
-#avatar_preview {
-float:left;
-}
-#avatar_preview {
-margin-left:29px;
-}
-#avatar_preview_view {
-height:96px;
-width:96px;
-margin-bottom:18px;
-overflow:hidden;
-}
-
-#settings_attach,
-#form_settings_avatar .form_actions {
-clear:both;
-}
-
-#form_settings_avatar .form_actions {
-margin-bottom:0;
-}
-
-#form_settings_design #settings_design_color .form_data,
-#form_settings_design #color-picker {
-float:left;
-}
-#form_settings_design #settings_design_color .form_data {
-width:400px;
-margin-right:28px;
-}
-
-.instructions ul {
-list-style-position:inside;
-}
-.instructions p,
-.instructions ul {
-margin-bottom:18px;
-}
-.help dt {
-display:none;
-}
-.guide {
-clear:both;
-}
diff --git a/theme/otalk/css/display.css b/theme/otalk/css/display.css
deleted file mode 100644
index bdfaea749..000000000
--- a/theme/otalk/css/display.css
+++ /dev/null
@@ -1,292 +0,0 @@
-/** theme: otalk
- *
- * @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://status.net/
- */
-
-@import url(base.css);
-
-html {
-}
-
-html,
-body,
-a:active {
-}
-body {
-font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
-font-size:1em;
-background:#ddd url(../images/illustrations/illu_pattern-01.png) repeat 0 0;
-background-color:rgba(127, 127, 127, 0.1);
-}
-address {
-margin-right:7.18%;
-}
-
-input, textarea, select, option {
-font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
-}
-input, textarea, select,
-.entity_remote_subscribe {
-border-color:#aaa;
-}
-#filter_tags ul li {
-border-color:#ddd;
-}
-
-.form_settings input.form_action-primary {
-background:none;
-}
-
-input.submit,
-#form_notice.warning #notice_text-count,
-.form_settings .form_note,
-.entity_remote_subscribe {
-background-color:#9BB43E;
-}
-
-input:focus, textarea:focus, select:focus,
-#form_notice.warning #notice_data-text {
-border-color:#9BB43E;
-}
-input.submit,
-.entity_remote_subscribe {
-color:#fff;
-}
-
-a,
-div.notice-options input,
-.form_user_block input.submit,
-.form_user_unblock input.submit,
-.entity_send-a-message a,
-.form_user_nudge input.submit,
-.entity_nudge p,
-.form_settings input.form_action-primary {
-color:#8F0000;
-}
-
-.notice,
-.profile {
-border-color:#CEE1E9;
-}
-#content .notice .entry-title,
-input, textarea, select, option,
-.pagination .nav_prev a,
-.pagination .nav_next a {
-background-color:rgba(255,255,255,0.8);
-}
-
-#content .notices li.hover .entry-title {
-background-color:rgba(255,255,255,0.9);
-}
-
-#content .notice:nth-child(1) .entry-title {
-background-color:rgba(255,255,255,0.95);
-}
-#content .notice:nth-child(2) .entry-title {
-background-color:rgba(255,255,255,0.9);
-}
-#content .notice:nth-child(3) .entry-title {
-background-color:rgba(255,255,255,0.8);
-}
-#content .notice:nth-child(4) .entry-title {
-background-color:rgba(255,255,255,0.7);
-}
-#content .notice:nth-child(5) .entry-title {
-background-color:rgba(255,255,255,0.6);
-}
-#content .notice:nth-child(6) .entry-title {
-background-color:rgba(255,255,255,0.5);
-}
-#content .notice:nth-child(7) .entry-title {
-background-color:rgba(255,255,255,0.4);
-}
-#content .notice:nth-child(8) .entry-title {
-background-color:rgba(255,255,255,0.3);
-}
-#content .notice:nth-child(9) .entry-title {
-background-color:rgba(255,255,255,0.2);
-}
-#content .notice:nth-child(10) {
-background-color:rgba(255,255,255,0.1);
-}
-
-
-#content .notice .author .photo {
-background:url(../images/illustrations/illu_arrow-left-01.gif) no-repeat 100% 0;
-}
-
-.section .profile {
-border-top-color:#87B4C8;
-}
-
-#aside_primary {
-background-color:rgba(206, 225, 233,0.5);
-}
-
-#notice_text-count {
-color:#333;
-}
-#form_notice.warning #notice_text-count {
-color:#000;
-}
-#form_notice.processing #notice_action-submit {
-background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
-cursor:wait;
-text-indent:-9999px;
-}
-
-#content,
-#site_nav_local_views .nav,
-#site_nav_local_views a,
-#aside_primary {
-border-color:#fff;
-}
-#content,
-#site_nav_local_views .current a {
-background-color:transparent;
-/*background-color:red;*/
-}
-
-#site_nav_local_views .current a {
-background-color:transparent;
-}
-
-#site_nav_local_views a {
-background-color:rgba(127, 127, 127, 0.2);
-}
-#site_nav_local_views a:hover {
-background-color:rgba(255, 255, 255, 0.8);
-}
-
-.error {
-background-color:#F7E8E8;
-}
-.success {
-background-color:#EFF3DC;
-}
-
-#anon_notice {
-background-color:rgba(206, 225, 233, 0.7);
-color:#fff;
-border-color:#fff;
-}
-
-#showstream #anon_notice {
-background-color:rgba(155, 180, 62, 0.7);
-}
-
-#export_data li a {
-background-repeat:no-repeat;
-background-position:0 45%;
-}
-#export_data li a.rss {
-background-image:url(../../base/images/icons/icon_rss.png);
-}
-#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.png);
-}
-#export_data li a.foaf {
-background-image:url(../../base/images/icons/icon_foaf.gif);
-}
-
-.entity_edit a,
-.entity_send-a-message a,
-.form_user_nudge input.submit,
-.form_user_block input.submit,
-.form_user_unblock input.submit,
-.entity_nudge p {
-background-position: 0 40%;
-background-repeat: no-repeat;
-background-color:transparent;
-}
-.form_group_join input.submit,
-.form_group_leave input.submit
-.form_user_subscribe input.submit,
-.form_user_unsubscribe input.submit {
-background-color:#9BB43E;
-color:#fff;
-}
-.form_user_unsubscribe input.submit,
-.form_group_leave input.submit,
-.form_user_authorization input.reject {
-background-color:#87B4C8;
-}
-
-.entity_edit a {
-background-image:url(../../base/images/icons/twotone/green/edit.gif);
-}
-.entity_send-a-message a {
-background-image:url(../../base/images/icons/twotone/green/quote.gif);
-}
-.entity_nudge p,
-.form_user_nudge input.submit {
-background-image:url(../../base/images/icons/twotone/green/mail.gif);
-}
-.form_user_block input.submit,
-.form_user_unblock input.submit {
-background-image:url(../../base/images/icons/twotone/green/shield.gif);
-}
-
-/* NOTICES */
-.notices li.over {
-background-color:#fcfcfc;
-}
-
-.notice-options .notice_reply a,
-.notice-options form input.submit {
-background-color:transparent;
-}
-.notice-options .notice_reply a {
-background:transparent url(../../base/images/icons/twotone/green/reply.gif) no-repeat 0 45%;
-}
-.notice-options form.form_favor input.submit {
-background:transparent url(../../base/images/icons/twotone/green/favourite.gif) no-repeat 0 45%;
-}
-.notice-options form.form_disfavor input.submit {
-background:transparent url(../../base/images/icons/twotone/green/disfavourite.gif) no-repeat 0 45%;
-}
-.notice-options .notice_delete a {
-background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-repeat 0 45%;
-}
-
-.notices div.entry-content,
-.notices div.notice-options {
-opacity:0.4;
-}
-.notices li.hover div.entry-content,
-.notices li.hover div.notice-options {
-opacity:1;
-}
-div.entry-content {
-color:#333;
-}
-div.notice-options a,
-div.notice-options input {
-font-family:sans-serif;
-}
-.notices li.hover {
-/*background-color:#fcfcfc;*/
-}
-/*END: NOTICES */
-
-#new_group a {
-background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
-}
-
-.pagination .nav_prev a,
-.pagination .nav_next a {
-background-repeat:no-repeat;
-border-color:#CEE1E9;
-}
-.pagination .nav_prev a {
-background-image:url(../../base/images/icons/twotone/green/arrow-left.gif);
-background-position:10% 45%;
-}
-.pagination .nav_next a {
-background-image:url(../../base/images/icons/twotone/green/arrow-right.gif);
-background-position:90% 45%;
-}
diff --git a/theme/otalk/css/ie.css b/theme/otalk/css/ie.css
deleted file mode 100644
index 2f463bb44..000000000
--- a/theme/otalk/css/ie.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* IE specific styles */
-
-.notice-options input.submit {
-color:#fff;
-}
-
-#site_nav_local_views a {
-background-color:#D0DFE7;
-}
diff --git a/theme/otalk/default-avatar-mini.png b/theme/otalk/default-avatar-mini.png
deleted file mode 100644
index 38b8692b4..000000000
--- a/theme/otalk/default-avatar-mini.png
+++ /dev/null
Binary files differ
diff --git a/theme/otalk/default-avatar-profile.png b/theme/otalk/default-avatar-profile.png
deleted file mode 100644
index f8357d4fc..000000000
--- a/theme/otalk/default-avatar-profile.png
+++ /dev/null
Binary files differ
diff --git a/theme/otalk/default-avatar-stream.png b/theme/otalk/default-avatar-stream.png
deleted file mode 100644
index 6b63baa70..000000000
--- a/theme/otalk/default-avatar-stream.png
+++ /dev/null
Binary files differ
diff --git a/theme/otalk/images/illustrations/illu_arrow-left-01.gif b/theme/otalk/images/illustrations/illu_arrow-left-01.gif
deleted file mode 100644
index 197775976..000000000
--- a/theme/otalk/images/illustrations/illu_arrow-left-01.gif
+++ /dev/null
Binary files differ
diff --git a/theme/otalk/images/illustrations/illu_pattern-01.png b/theme/otalk/images/illustrations/illu_pattern-01.png
deleted file mode 100644
index 5a72eafcb..000000000
--- a/theme/otalk/images/illustrations/illu_pattern-01.png
+++ /dev/null
Binary files differ
diff --git a/theme/otalk/logo.png b/theme/otalk/logo.png
deleted file mode 100644
index fdead6c4a..000000000
--- a/theme/otalk/logo.png
+++ /dev/null
Binary files differ
diff --git a/theme/pigeonthoughts/css/base.css b/theme/pigeonthoughts/css/base.css
index 4b30710fb..2814260bd 100644
--- a/theme/pigeonthoughts/css/base.css
+++ b/theme/pigeonthoughts/css/base.css
@@ -232,6 +232,17 @@ font-weight:bold;
address img + .fn {
display:none;
}
+address a {
+text-decoration:none;
+}
+address .poweredby {
+float:left;
+clear:left;
+display:block;
+position:relative;
+top:7px;
+margin-right:-47px;
+}
#header {
width:98.5%;
@@ -486,13 +497,59 @@ margin-bottom:7px;
margin-left:18px;
float:left;
}
-#form_notice .error {
+.form_notice .error,
+.form_notice .success {
float:left;
clear:both;
-width:96.9%;
+width:81.5%;
margin-bottom:0;
line-height:1.618;
}
+.form_notice #notice_data-attach_selected code {
+float:left;
+width:80%;
+display:block;
+overflow:auto;
+margin-right:2.5%;
+font-size:1.1em;
+}
+.form_notice #notice_data-attach_selected button.close {
+float:right;
+font-size:0.8em;
+}
+
+.form_notice #notice_data-geo_wrap label,
+.form_notice #notice_data-geo_wrap input {
+position:absolute;
+top:25px;
+right:4px;
+left:auto;
+cursor:pointer;
+width:16px;
+height:16px;
+display:block;
+}
+.form_notice #notice_data-geo_wrap input {
+visibility:hidden;
+}
+.form_notice #notice_data-geo_wrap label {
+font-weight:normal;
+font-size:1em;
+margin-bottom:0;
+text-indent:-9999px;
+}
+
+button.close,
+button.minimize {
+width:16px;
+height:16px;
+text-indent:-9999px;
+padding:0;
+border:0;
+text-align:center;
+font-weight:bold;
+cursor:pointer;
+}
/* entity_profile */
.entity_profile {
@@ -850,6 +907,67 @@ font-size:1.025em;
.notice div.entry-content .timestamp {
display:inline-block;
}
+.entry-content .repeat {
+display:block;
+}
+.entry-content .repeat .photo {
+float:none;
+margin-right:1px;
+position:relative;
+top:4px;
+left:0;
+}
+
+.dialogbox {
+position:absolute;
+top:-1px;
+right:-1px;
+z-index:9;
+float:none;
+padding:11px;
+border-radius:7px;
+-moz-border-radius:7px;
+-webkit-border-radius:7px;
+border-style:solid;
+border-width:1px;
+}
+
+.dialogbox legend {
+display:block !important;
+margin-right:18px;
+margin-bottom:18px;
+}
+
+.dialogbox button.close {
+position:absolute;
+right:3px;
+top:3px;
+}
+
+.dialogbox .form_guide {
+font-weight:normal;
+padding:0;
+}
+
+.dialogbox .submit_dialogbox {
+font-weight:bold;
+text-indent:0;
+min-width:46px;
+}
+.dialogbox input {
+padding-left:4px;
+}
+.dialogbox fieldset {
+margin-bottom:0;
+}
+
+#wrap form.processing input.submit,
+.entity_actions a.processing,
+.dialogbox.processing .submit_dialogbox {
+cursor:wait;
+outline:none;
+text-indent:-9999px;
+}
.notice-options {
position:relative;
diff --git a/theme/pigeonthoughts/css/display.css b/theme/pigeonthoughts/css/display.css
index 2b9174182..dfeb01b48 100644
--- a/theme/pigeonthoughts/css/display.css
+++ b/theme/pigeonthoughts/css/display.css
@@ -60,6 +60,36 @@ input.submit,
color:#FFFFFF;
}
+.dialogbox .submit_dialogbox,
+input.submit,
+.form_notice input.submit {
+background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
+text-shadow:0 1px 0 #FFFFFF;
+color:#000000;
+border-color:#AAAAAA;
+border-top-color:#CCCCCC;
+border-left-color:#CCCCCC;
+}
+.dialogbox .submit_dialogbox:hover,
+input.submit:hover {
+background-position:0 -5px;
+}
+.dialogbox .submit_dialogbox:focus,
+input.submit:focus {
+background-position:0 -15px;
+box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+text-shadow:none;
+}
+
+.form_notice label[for=notice_data-geo] {
+background-position:0 -1780px;
+}
+.form_notice label[for=notice_data-geo].checked {
+background-position:0 -1846px;
+}
+
a,
div.notice-options input,
.form_user_block input.submit,
@@ -158,16 +188,69 @@ color:#333333;
color:#000000;
}
#form_notice label[for=notice_data-attach] {
-background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
+background-position:0 -328px;
}
#form_notice #notice_data-attach {
opacity:0;
}
-#form_notice.processing #notice_action-submit {
+.form_notice label[for=notice_data-attach],
+#export_data li a.rss,
+#export_data li a.atom,
+#export_data li a.foaf,
+.entity_edit a,
+.entity_send-a-message a,
+.entity_nudge p,
+.form_user_nudge input.submit,
+.form_user_block input.submit,
+.form_user_unblock input.submit,
+.form_group_block input.submit,
+.form_group_unblock input.submit,
+.form_make_admin input.submit,
+.notice .attachment,
+.notice-options .notice_reply,
+.notice-options form.form_favor input.submit,
+.notice-options form.form_disfavor input.submit,
+.notice-options .notice_delete,
+.notice-options form.form_repeat input.submit,
+#new_group a,
+.pagination .nav_prev a,
+.pagination .nav_next a,
+button.close,
+.form_group_leave input.submit,
+.form_user_unsubscribe input.submit,
+.form_group_join input.submit,
+.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
+.entity_subscribe a,
+.entity_moderation p,
+.entity_sandbox input.submit,
+.entity_silence input.submit,
+.entity_delete input.submit,
+.notice-options .repeated,
+.form_notice label[for=notice_data-geo],
+button.minimize,
+.form_reset_key input.submit,
+.entity_clear input.submit,
+.entity_flag input.submit,
+.entity_flag p,
+.entity_subscribe input.submit,
+#realtime_play,
+#realtime_pause,
+#realtime_popup {
+background-image:url(../../base/images/icons/icons-01.gif);
+background-repeat:no-repeat;
+background-color:transparent;
+}
+
+
+#wrap form.processing input.submit,
+.entity_actions a.processing,
+.dialogbox.processing .submit_dialogbox {
background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
-cursor:wait;
-text-indent:-9999px;
+}
+.notice-options .form_repeat.processing {
+background-image:none;
}
#content,
@@ -190,6 +273,12 @@ color:#8F0000;
text-shadow: rgba(194,194,194,0.5) 1px 1px 1px;
}
+.processing {
+background-image:url(../../base/images/icons/icon_processing.gif);
+background-repeat:no-repeat;
+background-position:47% 47%;
+}
+
.error {
background-color:#F7E8E8;
}
@@ -197,6 +286,14 @@ background-color:#F7E8E8;
background-color:#EFF3DC;
}
+button.close {
+background-position:0 -1120px;
+}
+button.minimize {
+background-position:0 -1912px;
+}
+
+
#anon_notice {
color:#000000;
}
@@ -207,81 +304,138 @@ background-repeat:no-repeat;
background-position:0 45%;
}
#export_data li a.rss {
-background-image:url(../../base/images/icons/icon_rss.png);
+background-position:0 -130px;
}
#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.png);
+background-position:0 -64px;
}
#export_data li a.foaf {
-background-image:url(../../base/images/icons/icon_foaf.gif);
+background-position:0 1px;
}
-.entity_edit a,
-.entity_send-a-message a,
-.form_user_nudge input.submit,
-.form_user_block input.submit,
-.form_user_unblock input.submit,
-.form_group_block input.submit,
-.form_group_unblock input.submit,
-.entity_nudge p,
-.form_make_admin input.submit {
-background-position: 0 40%;
-background-repeat: no-repeat;
-background-color:transparent;
+#export_data li a.rss {
+background-position:0 -130px;
+}
+#export_data li a.atom {
+background-position:0 -64px;
}
+#export_data li a.foaf {
+background-position:0 1px;
+}
+
.form_group_join input.submit,
-.form_group_leave input.submit
+.form_group_leave input.submit,
.form_user_subscribe input.submit,
-.form_user_unsubscribe input.submit {
+.form_user_unsubscribe input.submit,
+.form_remote_authorize input.submit,
+.entity_subscribe a {
background-color:#8F0000;
color:#FFFFFF;
}
-.form_user_unsubscribe input.submit,
.form_group_leave input.submit,
-.form_user_authorization input.reject {
+.form_user_unsubscribe input.submit {
+background-position:5px -1246px;
background-color:#87B4C8;
}
+.form_group_join input.submit,
+.form_user_subscribe input.submit,
+.form_remote_authorize input.submit,
+.entity_subscribe a {
+background-position:5px -1181px;
+}
.entity_edit a {
-background-image:url(../../base/images/icons/twotone/green/edit.gif);
+background-position: 5px -719px;
}
.entity_send-a-message a {
-background-image:url(../../base/images/icons/twotone/green/quote.gif);
+background-position: 5px -852px;
}
+.entity_send-a-message .form_notice,
+.entity_moderation:hover ul,
+.dialogbox {
+box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
+-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
+-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
+}
+
.entity_nudge p,
.form_user_nudge input.submit {
-background-image:url(../../base/images/icons/twotone/green/mail.gif);
+background-position: 5px -785px;
}
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit {
-background-image:url(../../base/images/icons/twotone/green/shield.gif);
+background-position: 5px -918px;
}
.form_make_admin input.submit {
-background-image:url(../../base/images/icons/twotone/green/admin.gif);
+background-position: 5px -983px;
+}
+.entity_moderation p {
+background-position: 5px -1313px;
+}
+.entity_sandbox input.submit {
+background-position: 5px -1380px;
+}
+.entity_silence input.submit {
+background-position: 5px -1445px;
+}
+.entity_delete input.submit {
+background-position: 5px -1511px;
+}
+.form_reset_key input.submit {
+background-position: 5px -1973px;
+}
+.entity_clear input.submit {
+background-position: 5px -2039px;
+}
+.entity_flag input.submit,
+.entity_flag p {
+background-position: 5px -2105px;
+}
+.entity_subscribe input.accept {
+background-position: 5px -2171px;
+}
+.entity_subscribe input.reject {
+background-position: 5px -2237px;
+}
+#realtime_play {
+background-position: 0 -2308px;
+}
+#realtime_pause {
+background-position: 0 -2374px;
+}
+#realtime_popup {
+background-position: 0 -1714px;
}
/* NOTICES */
.notice .attachment {
-background:transparent url(../../base/images/icons/twotone/green/clip-02.gif) no-repeat 0 45%;
+background-position:0 -394px;
}
#attachments .attachment {
background:none;
}
.notice-options .notice_reply {
-background:transparent url(../../base/images/icons/twotone/green/reply.gif) no-repeat 0 45%;
+background-position:0 -592px;
}
.notice-options form.form_favor input.submit {
-background:transparent url(../../base/images/icons/twotone/green/favourite.gif) no-repeat 0 45%;
+background-position:0 -460px;
}
.notice-options form.form_disfavor input.submit {
-background:transparent url(../../base/images/icons/twotone/green/disfavourite.gif) no-repeat 0 45%;
+background-position:0 -526px;
}
.notice-options .notice_delete {
-background:transparent url(../../base/images/icons/twotone/green/trash.gif) no-repeat 0 45%;
+background-position:0 -658px;
+}
+.notice-options form.form_repeat input.submit {
+background-position:0 -1582px;
+}
+.notice-options .repeated {
+background-position:0 -1648px;
}
+
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
@@ -319,19 +473,26 @@ background-color:rgba(200, 200, 200, 0.300);
/*END: NOTICES */
#new_group a {
-background:transparent url(../../base/images/icons/twotone/green/news.gif) no-repeat 0 45%;
+background-position:0 -1054px;
}
-.pagination .nav_prev a,
-.pagination .nav_next a {
-background-repeat:no-repeat;
-border-color:#000000;
-}
.pagination .nav_prev a {
-background-image:url(../../base/images/icons/twotone/green/arrow-left.gif);
-background-position:10% 45%;
+background-position:10% -187px;
}
.pagination .nav_next a {
-background-image:url(../../base/images/icons/twotone/green/arrow-right.gif);
-background-position:90% 45%;
+background-position:105% -252px;
+}
+.pagination .nav .processing {
+background-image:url(../../base/images/icons/icon_processing.gif);
+box-shadow:none;
+-moz-box-shadow:none;
+-webkit-box-shadow:none;
+outline:none;
+}
+.pagination .nav_next a.processing {
+background-position:90% 47%;
}
+.pagination .nav_prev a.processing {
+background-position:10% 47%;
+}
+
diff --git a/theme/pigeonthoughts/logo.png b/theme/pigeonthoughts/logo.png
index 550d373fe..cf1839194 100644
--- a/theme/pigeonthoughts/logo.png
+++ b/theme/pigeonthoughts/logo.png
Binary files differ