summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--EVENTS.txt119
-rw-r--r--README981
-rw-r--r--actions/accessadminpanel.php206
-rw-r--r--actions/all.php32
-rw-r--r--actions/allrss.php2
-rw-r--r--actions/apiaccountratelimitstatus.php17
-rw-r--r--actions/apiaccountupdateprofile.php4
-rw-r--r--actions/apiaccountverifycredentials.php33
-rw-r--r--actions/apidirectmessage.php7
-rw-r--r--actions/apifriendshipsdestroy.php9
-rw-r--r--actions/apifriendshipsexists.php15
-rw-r--r--actions/apifriendshipsshow.php16
-rw-r--r--actions/apigroupcreate.php8
-rw-r--r--actions/apigroupismember.php15
-rw-r--r--actions/apigrouplist.php5
-rw-r--r--actions/apigrouplistall.php12
-rw-r--r--actions/apigroupmembership.php3
-rw-r--r--actions/apigroupshow.php15
-rw-r--r--actions/apihelptest.php15
-rw-r--r--actions/apioauthaccesstoken.php2
-rw-r--r--actions/apioauthauthorize.php65
-rw-r--r--actions/apioauthrequesttoken.php2
-rw-r--r--actions/apistatusesretweet.php2
-rw-r--r--actions/apistatusesupdate.php18
-rw-r--r--actions/apistatusnetconfig.php31
-rw-r--r--actions/apistatusnetversion.php15
-rw-r--r--actions/apitimelinefavorites.php71
-rw-r--r--actions/apitimelinefriends.php80
-rw-r--r--actions/apitimelinegroup.php69
-rw-r--r--actions/apitimelinehome.php66
-rw-r--r--actions/apitimelinementions.php38
-rw-r--r--actions/apitimelinepublic.php29
-rw-r--r--actions/apitimelineretweetedtome.php2
-rw-r--r--actions/apitimelineretweetsofme.php38
-rw-r--r--actions/apitimelinetag.php53
-rw-r--r--actions/apitimelineuser.php44
-rw-r--r--actions/apiusershow.php15
-rw-r--r--actions/avatarsettings.php4
-rw-r--r--actions/blockedfromgroup.php9
-rw-r--r--actions/deleteapplication.php176
-rw-r--r--actions/deleteuser.php31
-rw-r--r--actions/designadminpanel.php4
-rw-r--r--actions/doc.php10
-rw-r--r--actions/editapplication.php26
-rw-r--r--actions/editgroup.php17
-rw-r--r--actions/favor.php2
-rw-r--r--actions/favorited.php3
-rw-r--r--actions/foafgroup.php17
-rw-r--r--actions/geocode.php12
-rw-r--r--actions/getfile.php2
-rw-r--r--actions/grantrole.php99
-rw-r--r--actions/groupdesignsettings.php5
-rw-r--r--actions/grouplogo.php9
-rw-r--r--actions/groupmembers.php13
-rw-r--r--actions/grouprss.php9
-rw-r--r--actions/groups.php18
-rw-r--r--actions/hcard.php120
-rw-r--r--actions/inbox.php4
-rw-r--r--actions/invite.php3
-rw-r--r--actions/joingroup.php32
-rw-r--r--actions/leavegroup.php32
-rw-r--r--actions/makeadmin.php3
-rw-r--r--actions/newapplication.php22
-rw-r--r--actions/newgroup.php10
-rw-r--r--actions/newnotice.php5
-rw-r--r--actions/oauthconnectionssettings.php28
-rw-r--r--actions/outbox.php4
-rw-r--r--actions/pathsadminpanel.php33
-rw-r--r--actions/postnotice.php11
-rw-r--r--actions/profilesettings.php4
-rw-r--r--actions/public.php11
-rw-r--r--actions/publictagcloud.php3
-rw-r--r--actions/recoverpassword.php2
-rw-r--r--actions/register.php4
-rw-r--r--actions/repeat.php2
-rw-r--r--actions/replies.php3
-rw-r--r--actions/revokerole.php99
-rw-r--r--actions/robotstxt.php100
-rw-r--r--actions/rsd.php226
-rw-r--r--actions/sessionsadminpanel.php201
-rw-r--r--actions/showapplication.php73
-rw-r--r--actions/showfavorites.php5
-rw-r--r--actions/showgroup.php41
-rw-r--r--actions/showstream.php32
-rw-r--r--actions/siteadminpanel.php114
-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.php7
-rw-r--r--actions/tagrss.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.php23
-rw-r--r--actions/userauthorization.php21
-rw-r--r--actions/usergroups.php32
-rw-r--r--actions/userrss.php37
-rw-r--r--classes/Avatar.php15
-rw-r--r--classes/Consumer.php30
-rwxr-xr-xclasses/Conversation.php78
-rw-r--r--classes/Design.php15
-rw-r--r--classes/Fave.php50
-rw-r--r--classes/File.php45
-rw-r--r--classes/Foreign_link.php17
-rw-r--r--classes/Group_alias.php2
-rw-r--r--classes/Inbox.php70
-rw-r--r--classes/Local_group.php46
-rw-r--r--classes/Memcached_DataObject.php274
-rw-r--r--classes/Nonce.php15
-rw-r--r--classes/Notice.php886
-rw-r--r--classes/Notice_inbox.php4
-rw-r--r--classes/Notice_tag.php16
-rw-r--r--classes/Oauth_application.php17
-rw-r--r--classes/Profile.php144
-rw-r--r--classes/Profile_role.php18
-rw-r--r--classes/Reply.php10
-rw-r--r--classes/Safe_DataObject.php250
-rw-r--r--classes/Session.php43
-rw-r--r--classes/Status_network.php64
-rw-r--r--classes/Subscription.php176
-rw-r--r--classes/User.php298
-rw-r--r--classes/User_group.php183
-rw-r--r--classes/status_network.ini1
-rw-r--r--classes/statusnet.ini44
-rw-r--r--classes/statusnet.links.ini7
-rw-r--r--config.php.sample11
-rw-r--r--db/08to09.sql78
-rw-r--r--db/beta5tobeta6.sql28
-rw-r--r--db/rc3to09.sql16
-rw-r--r--db/rc3torc4.sql50
-rw-r--r--db/site.sql2
-rw-r--r--db/statusnet.sql33
-rwxr-xr-xextlib/libomb/service_provider.php4
-rw-r--r--index.php139
-rw-r--r--install.php246
-rw-r--r--js/jquery.js6403
-rw-r--r--js/jquery.min.js166
-rw-r--r--js/util.js356
-rw-r--r--lib/action.php98
-rw-r--r--lib/activity.php1288
-rw-r--r--lib/adminpanelaction.php106
-rw-r--r--lib/apiaction.php (renamed from lib/api.php)76
-rw-r--r--lib/apiauth.php208
-rw-r--r--lib/apioauthstore.php27
-rw-r--r--lib/applicationeditform.php2
-rw-r--r--lib/atom10feed.php327
-rw-r--r--lib/atomgroupnoticefeed.php95
-rw-r--r--lib/atomnoticefeed.php125
-rw-r--r--lib/atomusernoticefeed.php119
-rw-r--r--lib/authenticationplugin.php18
-rw-r--r--lib/authorizationplugin.php2
-rw-r--r--lib/cache.php30
-rw-r--r--lib/command.php62
-rw-r--r--lib/commandinterpreter.php11
-rw-r--r--lib/common.php22
-rw-r--r--lib/dbqueuemanager.php7
-rw-r--r--lib/default.php60
-rw-r--r--lib/designsettings.php4
-rw-r--r--lib/distribqueuehandler.php97
-rw-r--r--lib/error.php10
-rw-r--r--lib/grantroleform.php93
-rw-r--r--lib/grouplist.php4
-rw-r--r--lib/groupsection.php3
-rw-r--r--lib/grouptagcloudsection.php1
-rw-r--r--lib/htmloutputter.php48
-rw-r--r--lib/httpclient.php5
-rw-r--r--lib/imagefile.php135
-rw-r--r--lib/iomanager.php5
-rw-r--r--lib/iomaster.php140
-rw-r--r--lib/jabber.php4
-rw-r--r--lib/jabberqueuehandler.php2
-rw-r--r--lib/joinform.php2
-rw-r--r--lib/language.php1
-rw-r--r--lib/leaveform.php2
-rw-r--r--lib/liberalstomp.php24
-rw-r--r--lib/mail.php67
-rw-r--r--lib/mailhandler.php2
-rw-r--r--lib/mediafile.php2
-rw-r--r--lib/messageform.php2
-rw-r--r--lib/mysqlschema.php538
-rw-r--r--lib/noticeform.php2
-rw-r--r--lib/noticelist.php111
-rw-r--r--lib/noticesection.php1
-rw-r--r--lib/oauthclient.php88
-rw-r--r--lib/oauthstore.php5
-rw-r--r--lib/omb.php21
-rw-r--r--lib/ombqueuehandler.php2
-rw-r--r--lib/personalgroupnav.php7
-rw-r--r--lib/personaltagcloudsection.php1
-rw-r--r--lib/pgsqlschema.php503
-rw-r--r--lib/popularnoticesection.php7
-rw-r--r--lib/profileaction.php70
-rw-r--r--lib/profilelist.php11
-rw-r--r--lib/profilequeuehandler.php52
-rw-r--r--lib/profilesection.php2
-rw-r--r--lib/publicqueuehandler.php2
-rw-r--r--lib/queued_xmpp.php2
-rw-r--r--lib/queuemanager.php153
-rw-r--r--lib/revokeroleform.php93
-rw-r--r--lib/right.php3
-rw-r--r--lib/router.php233
-rw-r--r--lib/schema.php67
-rw-r--r--lib/spawningdaemon.php64
-rw-r--r--lib/statusnet.php71
-rw-r--r--lib/stompqueuemanager.php684
-rw-r--r--lib/subs.php141
-rw-r--r--lib/taguri.php96
-rw-r--r--lib/theme.php15
-rw-r--r--lib/uapplugin.php204
-rw-r--r--lib/userprofile.php35
-rw-r--r--lib/util.php383
-rw-r--r--lib/xmppmanager.php12
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po2043
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po2135
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po2018
-rw-r--r--locale/br/LC_MESSAGES/statusnet.po6106
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po2012
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po1932
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po2469
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po1941
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po2710
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po2887
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po1948
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po1960
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po2144
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po1945
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po1935
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po1953
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po3255
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po1952
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po2114
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po2141
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po1955
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po1919
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po2453
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po1928
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po1955
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po2039
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po1956
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po1964
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po2105
-rw-r--r--locale/statusnet.po1831
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po2092
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po2155
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po1931
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po1948
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po1946
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po1953
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po1921
-rw-r--r--plugins/Adsense/AdsensePlugin.php160
-rw-r--r--plugins/Autocomplete/jquery-autocomplete/indicator.gifbin0 -> 673 bytes
-rw-r--r--plugins/Blacklist/BlacklistPlugin.php238
-rw-r--r--plugins/Blacklist/blacklistadminpanel.php222
-rw-r--r--plugins/BlankAd/BlankAdPlugin.php124
-rw-r--r--plugins/BlankAd/redpixel.pngbin0 -> 159 bytes
-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/Comet/CometPlugin.php2
-rw-r--r--plugins/Facebook/FacebookPlugin.php242
-rw-r--r--plugins/Facebook/README84
-rw-r--r--plugins/Facebook/facebookaction.php4
-rw-r--r--plugins/Facebook/facebookadminpanel.php223
-rw-r--r--plugins/Facebook/facebookapp.js (renamed from js/facebookapp.js)0
-rw-r--r--plugins/Facebook/locale/Facebook.po231
-rw-r--r--plugins/FeedSub/FeedSubPlugin.php115
-rw-r--r--plugins/FeedSub/README24
-rw-r--r--plugins/FeedSub/actions/feedsubcallback.php100
-rw-r--r--plugins/FeedSub/actions/feedsubsettings.php255
-rw-r--r--plugins/FeedSub/extlib/README9
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser.php351
-rw-r--r--plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php365
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php261
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/Exception.php42
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php214
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php62
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php277
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php276
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php151
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php116
-rw-r--r--plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php335
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php171
-rw-r--r--plugins/FeedSub/extlib/XML/Feed/Parser/Type.php467
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml28
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml20
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml45
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/delicious.feed177
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/flickr.feed184
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml7
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/hoder.xml102
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml13
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml47
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml30
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml15
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml103
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml62
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml67
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml42
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml226
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/samples/technorati.feed54
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc338
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc113
-rwxr-xr-xplugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc218
-rw-r--r--plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch14
-rw-r--r--plugins/FeedSub/feedinfo.php268
-rw-r--r--plugins/FeedSub/feedinfo.sql14
-rw-r--r--plugins/FeedSub/feedmunger.php238
-rw-r--r--plugins/FeedSub/locale/FeedSub.po104
-rw-r--r--plugins/FeedSub/tests/FeedMungerTest.php147
-rw-r--r--plugins/GeonamesPlugin.php78
-rw-r--r--plugins/Gravatar/locale/Gravatar.po8
-rw-r--r--plugins/LdapAuthentication/LdapAuthenticationPlugin.php44
-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/MemcachePlugin.php56
-rw-r--r--plugins/Minify/MinifyPlugin.php8
-rw-r--r--plugins/MobileProfile/MobileProfilePlugin.php37
-rw-r--r--plugins/MobileProfile/mp-screen.css5
-rw-r--r--plugins/OStatus/OStatusPlugin.php852
-rw-r--r--plugins/OStatus/README34
-rw-r--r--plugins/OStatus/actions/groupsalmon.php188
-rw-r--r--plugins/OStatus/actions/hostmeta.php48
-rw-r--r--plugins/OStatus/actions/ostatusgroup.php181
-rw-r--r--plugins/OStatus/actions/ostatusinit.php205
-rw-r--r--plugins/OStatus/actions/ostatussub.php450
-rw-r--r--plugins/OStatus/actions/ownerxrd.php56
-rw-r--r--plugins/OStatus/actions/pushcallback.php122
-rw-r--r--plugins/OStatus/actions/pushhub.php202
-rw-r--r--plugins/OStatus/actions/usersalmon.php212
-rw-r--r--plugins/OStatus/actions/userxrd.php48
-rw-r--r--plugins/OStatus/classes/FeedSub.php452
-rw-r--r--plugins/OStatus/classes/HubSub.php311
-rw-r--r--plugins/OStatus/classes/Magicsig.php233
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php1516
-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/hkit/hcard.profile.php105
-rw-r--r--plugins/OStatus/extlib/hkit/hkit.class.php475
-rw-r--r--plugins/OStatus/images/24px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/24px-Feed-icon.svg.png)bin1204 -> 1204 bytes
-rw-r--r--plugins/OStatus/images/48px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/48px-Feed-icon.svg.png)bin2434 -> 2434 bytes
-rw-r--r--plugins/OStatus/images/96px-Feed-icon.svg.png (renamed from plugins/FeedSub/images/96px-Feed-icon.svg.png)bin5440 -> 5440 bytes
-rw-r--r--plugins/OStatus/images/README (renamed from plugins/FeedSub/images/README)0
-rw-r--r--plugins/OStatus/js/ostatus.js102
-rw-r--r--plugins/OStatus/lib/discovery.php310
-rw-r--r--plugins/OStatus/lib/feeddiscovery.php (renamed from plugins/FeedSub/feeddiscovery.php)84
-rw-r--r--plugins/OStatus/lib/hubconfqueuehandler.php54
-rw-r--r--plugins/OStatus/lib/huboutqueuehandler.php60
-rw-r--r--plugins/OStatus/lib/magicenvelope.php215
-rw-r--r--plugins/OStatus/lib/ostatusqueuehandler.php186
-rw-r--r--plugins/OStatus/lib/pushinqueuehandler.php53
-rw-r--r--plugins/OStatus/lib/salmon.php110
-rw-r--r--plugins/OStatus/lib/salmonaction.php196
-rw-r--r--plugins/OStatus/lib/salmonqueuehandler.php46
-rw-r--r--plugins/OStatus/lib/xrd.php193
-rw-r--r--plugins/OStatus/lib/xrdaction.php105
-rw-r--r--plugins/OStatus/locale/OStatus.po312
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po (renamed from plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po)0
-rw-r--r--plugins/OStatus/scripts/updateostatus.php127
-rw-r--r--plugins/OStatus/tests/FeedDiscoveryTest.php (renamed from plugins/FeedSub/tests/FeedDiscoveryTest.php)0
-rw-r--r--plugins/OStatus/tests/gettext-speedtest.php (renamed from plugins/FeedSub/tests/gettext-speedtest.php)0
-rw-r--r--plugins/OStatus/theme/base/css/ostatus.css74
-rw-r--r--plugins/OpenID/OpenIDPlugin.php11
-rw-r--r--plugins/OpenID/doc-src/openid2
-rw-r--r--plugins/OpenID/finishopenidlogin.php47
-rw-r--r--plugins/OpenID/locale/OpenID.po320
-rw-r--r--plugins/OpenX/OpenXPlugin.php165
-rw-r--r--plugins/Orbited/OrbitedPlugin.php4
-rw-r--r--plugins/PostDebug/PostDebugPlugin.php150
-rw-r--r--plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php6
-rw-r--r--plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po32
-rw-r--r--plugins/PubSubHubBub/PubSubHubBubPlugin.php259
-rw-r--r--plugins/PubSubHubBub/publisher.php86
-rw-r--r--plugins/Realtime/RealtimePlugin.php4
-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.css12
-rw-r--r--plugins/Realtime/realtimeupdate.js14
-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/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php7
-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/Sign-in-with-Twitter-lighter.pngbin0 -> 2490 bytes
-rw-r--r--plugins/TwitterBridge/TwitterBridgePlugin.php209
-rwxr-xr-xplugins/TwitterBridge/daemons/synctwitterfriends.php2
-rwxr-xr-xplugins/TwitterBridge/daemons/twitterstatusfetcher.php53
-rw-r--r--plugins/TwitterBridge/locale/TwitterBridge.po114
-rw-r--r--plugins/TwitterBridge/twitter.php96
-rw-r--r--plugins/TwitterBridge/twitteradminpanel.php289
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php492
-rw-r--r--plugins/TwitterBridge/twitterlogin.php97
-rw-r--r--plugins/TwitterBridge/twitteroauthclient.php56
-rw-r--r--plugins/TwitterBridge/twittersettings.php35
-rw-r--r--plugins/UserFlag/UserFlagPlugin.php19
-rw-r--r--plugins/UserFlag/User_flag_profile.php11
-rw-r--r--plugins/UserFlag/clearflagform.php2
-rw-r--r--plugins/UserFlag/userflag.css4
-rw-r--r--plugins/UserLimitPlugin.php92
-rw-r--r--scripts/clearcache.php70
-rwxr-xr-xscripts/console.php10
-rw-r--r--scripts/createsim.php3
-rw-r--r--scripts/decache.php8
-rwxr-xr-xscripts/delete_status_network.sh4
-rwxr-xr-xscripts/fixup_utf8.php2
-rwxr-xr-xscripts/init_conversation.php49
-rwxr-xr-xscripts/queuectl.php85
-rwxr-xr-xscripts/queuedaemon.php42
-rwxr-xr-xscripts/sendemail.php82
-rwxr-xr-x[-rw-r--r--]scripts/setconfig.php16
-rw-r--r--scripts/settag.php84
-rw-r--r--scripts/setup.cfg.sample6
-rwxr-xr-xscripts/setup_status_network.sh70
-rw-r--r--scripts/showcache.php6
-rwxr-xr-xscripts/update_po_templates.php15
-rw-r--r--scripts/updateavatarurl.php4
-rw-r--r--scripts/updateavatarurl_group.php99
-rw-r--r--scripts/updateprofileurl.php99
-rwxr-xr-xscripts/xmppdaemon.php30
-rw-r--r--tests/ActivityParseTests.php332
-rw-r--r--tests/TagURITest.php36
-rw-r--r--tests/UserFeedParseTest.php131
-rw-r--r--tests/oauth/statusupdate.php115
-rw-r--r--theme/README51
-rw-r--r--theme/base/css/display.css147
-rw-r--r--theme/base/css/ie.css4
-rw-r--r--theme/base/css/uap.css54
-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.gifbin3650 -> 4080 bytes
-rw-r--r--theme/base/images/icons/twotone/green/against.gifbin0 -> 85 bytes
-rw-r--r--theme/base/images/icons/twotone/green/checkmark.gifbin0 -> 76 bytes
-rw-r--r--theme/base/images/icons/twotone/green/clear.gifbin0 -> 82 bytes
-rw-r--r--theme/base/images/icons/twotone/green/flag.gif (renamed from plugins/UserFlag/icon_flag.gif)bin80 -> 80 bytes
-rw-r--r--theme/base/logo.pngbin4988 -> 10107 bytes
-rw-r--r--theme/biz/css/base.css265
-rw-r--r--theme/biz/css/display.css304
-rw-r--r--theme/cloudy/css/display.css37
-rw-r--r--theme/default/css/display.css104
-rw-r--r--theme/default/logo.pngbin6389 -> 10107 bytes
-rw-r--r--theme/default/mobilelogo.pngbin2238 -> 4017 bytes
-rw-r--r--theme/identica/css/display.css102
-rw-r--r--theme/identica/mobilelogo.pngbin2238 -> 4017 bytes
-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
489 files changed, 89621 insertions, 47079 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index 1ed670697..2da6f3da6 100644
--- a/EVENTS.txt
+++ b/EVENTS.txt
@@ -355,6 +355,22 @@ EndShowHeadElements: Right before the </head> tag; put <script>s here if you nee
CheckSchema: chance to check the schema
+StartProfileRemoteSubscribe: Before showing the link to remote subscription
+- $userprofile: UserProfile widget
+- &$profile: the profile being shown
+
+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.)
@@ -699,3 +715,106 @@ StartShowContentLicense: Showing the default license for content
EndShowContentLicense: Showing the default license for content
- $action: the current action
+
+StartUserRegister: When a new user is being registered
+- &$profile: new profile data (no ID)
+- &$user: new user account (no ID or URI)
+
+EndUserRegister: When a new user has been registered
+- &$profile: new profile data
+- &$user: new user account
+
+StartRobotsTxt: Before outputting the robots.txt page
+- &$action: RobotstxtAction being shown
+
+EndRobotsTxt: After the default robots.txt page (good place for customization)
+- &$action: RobotstxtAction being shown
+
+StartGetProfileUri: When determining the canonical URI for a given profile
+- $profile: the current profile
+- &$uri: the URI
+
+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 602288789..45b72e9ac 100644
--- a/README
+++ b/README
@@ -2,40 +2,40 @@
README
------
-StatusNet 0.9.0 ("Stand") Beta 3
-20 Jan 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,127 +77,57 @@ for additional terms.
New this version
================
-This is a major feature release since version 0.8.2, released Nov 1 2009.
+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
+- 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
=============
@@ -236,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
@@ -285,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.
@@ -302,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.)
@@ -312,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.
@@ -347,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,
@@ -361,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,
@@ -391,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
@@ -425,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.
@@ -436,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
------
@@ -448,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.
@@ -477,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
@@ -557,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
@@ -567,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
@@ -586,37 +521,31 @@ 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 eight (for now) queue handlers:
+This will run the queue handlers:
+* queuedaemon.php - polls for queued items for inbox processing and
+ pushing out to OStatus, SMS, XMPP, etc.
* xmppdaemon.php - listens for new XMPP messages from users and stores
- them as notices in the database.
-* jabberqueuehandler.php - sends queued notices in the database to
- registered users who should receive them.
-* publicqueuehandler.php - sends queued notices in the database to
- public feed listeners.
-* ombqueuehandler.php - sends queued notices to OpenMicroBlogging
- recipients on foreign servers.
-* smsqueuehandler.php - sends queued notices to SMS-over-email addresses
- of registered users.
-* xmppconfirmhandler.php - sends confirmation messages to registered
- users.
-
-Note that these queue daemons are pretty raw, and need your care. In
-particular, they leak memory, and you may want to restart them on a
-regular (daily or so) basis with a cron job. Also, if they lose
-the connection to the XMPP server for too long, they'll simply die. It
-may be a good idea to use a daemon-monitoring service, like 'monit',
+ them as notices in the database; also pulls queued XMPP output from
+ queuedaemon.php to push out to clients.
+
+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.
All the daemons write their process IDs (pids) to /var/run/ by
@@ -624,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.
-
-2. To generate your sitemaps, run the following command on your server:
+our kind of hacky home-grown DB-based queue solution. This is strongly
+recommended for best response time, especially when using XMPP.
- 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
------
@@ -686,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.
@@ -712,10 +606,12 @@ subdirectory to add a new language to your system. You'll need to
compile the ".po" files into ".mo" files, however.
Contributions of translation information to StatusNet are very easy:
-you can use the Web interface at http://status.net/pootle/ to add one
+you can use the Web interface at TranslateWiki.net to add one
or a few or lots of new translations -- or even new languages. You can
also download more up-to-date .po files there, if you so desire.
+For info on helping with translations, see http://status.net/wiki/Translations
+
Backups
-------
@@ -732,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
=========
@@ -770,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
@@ -790,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
@@ -872,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:
@@ -889,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.
@@ -901,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
--
@@ -983,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
------
@@ -1029,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
-----
@@ -1046,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
-------
@@ -1067,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.
@@ -1083,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
--------
@@ -1093,34 +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.
+ 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
------
@@ -1128,28 +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'.
+ 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.
xmpp
----
@@ -1159,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
------
@@ -1194,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
-------
@@ -1203,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
------
@@ -1212,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
---------
@@ -1229,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
@@ -1244,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
---
@@ -1252,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
-----------
@@ -1267,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
--------
@@ -1276,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
@@ -1285,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
-------
@@ -1298,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.
@@ -1321,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
-----------
@@ -1346,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
@@ -1361,24 +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.
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
-----
@@ -1386,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
--------
@@ -1404,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
--------
@@ -1416,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
----------
@@ -1429,12 +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.
ping
----
@@ -1443,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
------
@@ -1465,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
-------
@@ -1474,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
------------
@@ -1483,14 +1431,37 @@ 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
+----------
+
+If an installation has only one user, this can simplify a lot of the
+interface. It also makes the user's profile the root URL.
+
+enabled: Whether to run in "single user mode". Default false.
+nickname: nickname of the single user.
+
+robotstxt
+---------
+
+We put out a default robots.txt file to guide the processing of
+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.
+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.
Plugins
=======
@@ -1549,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.
@@ -1582,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
@@ -1604,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
new file mode 100644
index 000000000..73354e97a
--- /dev/null
+++ b/actions/accessadminpanel.php
@@ -0,0 +1,206 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Site access 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 site access 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 AccessadminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ // TRANS: Page title
+ return _('Access');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ // TRANS: Page notice
+ return _('Site access settings');
+ }
+
+ /**
+ * Show the site admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new AccessAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $booleans = array('site' => array('private', 'inviteonly', 'closed'));
+
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting] = ($this->boolean($setting)) ? 1 : 0;
+ }
+ }
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+}
+
+class AccessAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'form_site_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('accessadminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ 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();
+ // 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'),
+ $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'),
+ $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'),
+ $instructions);
+ $this->unli();
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ // 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/apiaccountratelimitstatus.php b/actions/apiaccountratelimitstatus.php
index 1a5afd552..f19e315bf 100644
--- a/actions/apiaccountratelimitstatus.php
+++ b/actions/apiaccountratelimitstatus.php
@@ -105,7 +105,22 @@ class ApiAccountRateLimitStatusAction extends ApiBareAuthAction
print json_encode($out);
}
- $this->endDocument($this->format);
+ $this->endDocument($this->format);
+ }
+
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
}
}
diff --git a/actions/apiaccountupdateprofile.php b/actions/apiaccountupdateprofile.php
index fd4384a25..9b371ea95 100644
--- a/actions/apiaccountupdateprofile.php
+++ b/actions/apiaccountupdateprofile.php
@@ -115,11 +115,11 @@ class ApiAccountUpdateProfileAction extends ApiAuthAction
$original = clone($profile);
- if (empty($this->name)) {
+ if (!empty($this->name)) {
$profile->fullname = $this->name;
}
- if (empty($this->url)) {
+ if (!empty($this->url)) {
$profile->homepage = $this->url;
}
diff --git a/actions/apiaccountverifycredentials.php b/actions/apiaccountverifycredentials.php
index 1095d5162..ea61a3205 100644
--- a/actions/apiaccountverifycredentials.php
+++ b/actions/apiaccountverifycredentials.php
@@ -66,18 +66,21 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
{
parent::handle($args);
- switch ($this->format) {
- case 'xml':
- case 'json':
- $args['id'] = $this->auth_user->id;
- $action_obj = new ApiUserShowAction();
- if ($action_obj->prepare($args)) {
- $action_obj->handle($args);
- }
- break;
- default:
- header('Content-Type: text/html; charset=utf-8');
- print 'Authorized';
+ if (!in_array($this->format, array('xml', 'json'))) {
+ $this->clientError(_('API method not found.'), $code = 404);
+ return;
+ }
+
+ $twitter_user = $this->twitterUserArray($this->auth_user->getProfile(), true);
+
+ if ($this->format == 'xml') {
+ $this->initDocument('xml');
+ $this->showTwitterXmlUser($twitter_user);
+ $this->endDocument('xml');
+ } elseif ($this->format == 'json') {
+ $this->initDocument('json');
+ $this->showJsonObjects($twitter_user);
+ $this->endDocument('json');
}
}
@@ -86,14 +89,14 @@ class ApiAccountVerifyCredentialsAction extends ApiAuthAction
* Is this action read only?
*
* @param array $args other arguments
- *
+ *
* @return boolean true
*
**/
-
+
function isReadOnly($args)
{
return true;
}
-
+
}
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/apifriendshipsexists.php b/actions/apifriendshipsexists.php
index c040b9f6a..ca62b5f51 100644
--- a/actions/apifriendshipsexists.php
+++ b/actions/apifriendshipsexists.php
@@ -116,4 +116,19 @@ class ApiFriendshipsExistsAction extends ApiPrivateAuthAction
}
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/apifriendshipsshow.php b/actions/apifriendshipsshow.php
index 73ecc9249..f29e63713 100644
--- a/actions/apifriendshipsshow.php
+++ b/actions/apifriendshipsshow.php
@@ -87,7 +87,6 @@ class ApiFriendshipsShowAction extends ApiBareAuthAction
return true;
}
-
/**
* Determines whether this API resource requires auth. Overloaded to look
* return true in case source_id and source_screen_name are both empty
@@ -165,4 +164,19 @@ class ApiFriendshipsShowAction extends ApiBareAuthAction
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
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/apigroupismember.php b/actions/apigroupismember.php
index 69ead0b53..97f843561 100644
--- a/actions/apigroupismember.php
+++ b/actions/apigroupismember.php
@@ -119,4 +119,19 @@ class ApiGroupIsMemberAction extends ApiBareAuthAction
}
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ 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/apigroupshow.php b/actions/apigroupshow.php
index ef9cbf0e7..5745a81f4 100644
--- a/actions/apigroupshow.php
+++ b/actions/apigroupshow.php
@@ -158,4 +158,19 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
return null;
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/apihelptest.php b/actions/apihelptest.php
index 7b4017531..d0e9e4926 100644
--- a/actions/apihelptest.php
+++ b/actions/apihelptest.php
@@ -92,5 +92,20 @@ class ApiHelpTestAction extends ApiPrivateAuthAction
}
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/apioauthaccesstoken.php b/actions/apioauthaccesstoken.php
index 085ef6f0b..887df4c20 100644
--- a/actions/apioauthaccesstoken.php
+++ b/actions/apioauthaccesstoken.php
@@ -70,7 +70,7 @@ class ApiOauthAccessTokenAction extends ApiOauthAction
$atok = $server->fetch_access_token($req);
} catch (OAuthException $e) {
- common_log(LOG_WARN, 'API OAuthException - ' . $e->getMessage());
+ common_log(LOG_WARNING, 'API OAuthException - ' . $e->getMessage());
common_debug(var_export($req, true));
$this->outputError($e->getMessage());
return;
diff --git a/actions/apioauthauthorize.php b/actions/apioauthauthorize.php
index 19128bdce..e7c6f3761 100644
--- a/actions/apioauthauthorize.php
+++ b/actions/apioauthauthorize.php
@@ -67,8 +67,6 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
{
parent::prepare($args);
- common_debug("apioauthauthorize");
-
$this->nickname = $this->trimmed('nickname');
$this->password = $this->arg('password');
$this->oauth_token = $this->arg('oauth_token');
@@ -99,24 +97,17 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
} else {
- // XXX: make better error messages
-
if (empty($this->oauth_token)) {
-
- common_debug("No request token found.");
-
- $this->clientError(_('Bad request.'));
+ $this->clientError(_('No oauth_token parameter provided.'));
return;
}
if (empty($this->app)) {
- common_debug('No app for that token.');
- $this->clientError(_('Bad request.'));
+ $this->clientError(_('Invalid token.'));
return;
}
$name = $this->app->name;
- common_debug("Requesting auth for app: " . $name);
$this->showForm();
}
@@ -124,8 +115,6 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
function handlePost()
{
- common_debug("handlePost()");
-
// check session token for CSRF protection.
$token = $this->trimmed('token');
@@ -167,7 +156,7 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
if (!$result) {
common_log_db_error($appUser, 'DELETE', __FILE__);
- throw new ServerException(_('DB error deleting OAuth app user.'));
+ throw new ServerException(_('Database error deleting OAuth application user.'));
return;
}
}
@@ -193,7 +182,7 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
if (!$result) {
common_log_db_error($appUser, 'INSERT', __FILE__);
- throw new ServerException(_('DB error inserting OAuth app user.'));
+ throw new ServerException(_('Database error inserting OAuth application user.'));
return;
}
@@ -202,21 +191,15 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
// A callback specified in the app setup overrides whatever
// is passed in with the request.
- common_debug("Req token is authorized - doing callback");
-
if (!empty($this->app->callback_url)) {
$this->callback = $this->app->callback_url;
}
if (!empty($this->callback)) {
- // XXX: Need better way to build this redirect url.
-
$target_url = $this->getCallback($this->callback,
array('oauth_token' => $this->oauth_token));
- common_debug("Doing callback to $target_url");
-
common_redirect($target_url, 303);
} else {
common_debug("callback was empty!");
@@ -236,9 +219,12 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
} else if ($this->arg('deny')) {
+ $datastore = new ApiStatusNetOAuthDataStore();
+ $datastore->revoke_token($this->oauth_token, 0);
+
$this->elementStart('p');
- $this->raw(sprintf(_("The request token %s has been denied."),
+ $this->raw(sprintf(_("The request token %s has been denied and revoked."),
$this->oauth_token));
$this->elementEnd('p');
@@ -303,13 +289,17 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
$access = ($this->app->access_type & Oauth_application::$writeAccess) ?
'access and update' : 'access';
- $msg = _("The application <strong>%1$s</strong> by <strong>%2$s</strong> would like " .
- "the ability to <strong>%3$s</strong> your account data.");
+ $msg = _('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.');
$this->raw(sprintf($msg,
$this->app->name,
$this->app->organization,
- $access));
+ $access,
+ common_config('site', 'name')));
$this->elementEnd('p');
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -371,6 +361,31 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
function showLocalNav()
{
+ // NOP
+ }
+
+ /**
+ * Show site notice.
+ *
+ * @return nothing
+ */
+
+ function showSiteNotice()
+ {
+ // NOP
+ }
+
+ /**
+ * Show notice form.
+ *
+ * Show the form for posting a new notice
+ *
+ * @return nothing
+ */
+
+ function showNoticeForm()
+ {
+ // NOP
}
}
diff --git a/actions/apioauthrequesttoken.php b/actions/apioauthrequesttoken.php
index 467640b9a..4fa626d86 100644
--- a/actions/apioauthrequesttoken.php
+++ b/actions/apioauthrequesttoken.php
@@ -89,7 +89,7 @@ class ApiOauthRequestTokenAction extends ApiOauthAction
$token = $server->fetch_request_token($req);
print $token;
} catch (OAuthException $e) {
- common_log(LOG_WARN, 'API OAuthException - ' . $e->getMessage());
+ common_log(LOG_WARNING, 'API OAuthException - ' . $e->getMessage());
header('HTTP/1.1 401 Unauthorized');
header('Content-Type: text/html; charset=utf-8');
print $e->getMessage() . "\n";
diff --git a/actions/apistatusesretweet.php b/actions/apistatusesretweet.php
index d9d4820c0..128c881e2 100644
--- a/actions/apistatusesretweet.php
+++ b/actions/apistatusesretweet.php
@@ -112,7 +112,7 @@ class ApiStatusesRetweetAction extends ApiAuthAction
$repeat = $this->original->repeat($this->user->id, $this->source);
- common_broadcast_notice($repeat);
+
$this->showNotice($repeat);
}
diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php
index f8bf7cf87..bf367e1e1 100644
--- a/actions/apistatusesupdate.php
+++ b/actions/apistatusesupdate.php
@@ -28,7 +28,7 @@
* @author Mike Cochrane <mikec@mikenz.geek.nz>
* @author Robin Millette <robin@millette.info>
* @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/
*/
@@ -79,7 +79,6 @@ class ApiStatusesUpdateAction extends ApiAuthAction
{
parent::prepare($args);
- $this->user = $this->auth_user;
$this->status = $this->trimmed('status');
$this->source = $this->trimmed('source');
$this->lat = $this->trimmed('lat');
@@ -145,7 +144,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
return;
}
- if (empty($this->user)) {
+ if (empty($this->auth_user)) {
$this->clientError(_('No such user.'), 404, $this->format);
return;
}
@@ -172,7 +171,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
// Check for commands
$inter = new CommandInterpreter();
- $cmd = $inter->handle_command($this->user, $status_shortened);
+ $cmd = $inter->handle_command($this->auth_user, $status_shortened);
if ($cmd) {
@@ -184,7 +183,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
// And, it returns your last status whether the cmd was successful
// or not!
- $this->notice = $this->user->getCurrentNotice();
+ $this->notice = $this->auth_user->getCurrentNotice();
} else {
@@ -211,7 +210,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
$upload = null;
try {
- $upload = MediaFile::fromUpload('media', $this->user);
+ $upload = MediaFile::fromUpload('media', $this->auth_user);
} catch (ClientException $ce) {
$this->clientError($ce->getMessage());
return;
@@ -234,19 +233,19 @@ class ApiStatusesUpdateAction extends ApiAuthAction
$options = array('reply_to' => $reply_to);
- if ($this->user->shareLocation()) {
+ if ($this->auth_user->shareLocation()) {
$locOptions = Notice::locationOptions($this->lat,
$this->lon,
null,
null,
- $this->user->getProfile());
+ $this->auth_user->getProfile());
$options = array_merge($options, $locOptions);
}
$this->notice =
- Notice::saveNew($this->user->id,
+ Notice::saveNew($this->auth_user->id,
$content,
$this->source,
$options);
@@ -255,7 +254,6 @@ class ApiStatusesUpdateAction extends ApiAuthAction
$upload->attachToNotice($this->notice);
}
- common_broadcast_notice($this->notice);
}
$this->showNotice();
diff --git a/actions/apistatusnetconfig.php b/actions/apistatusnetconfig.php
index ab96f2e5f..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
@@ -52,13 +50,17 @@ require_once INSTALLDIR . '/lib/api.php';
class ApiStatusnetConfigAction extends ApiAction
{
var $keys = array(
- 'site' => array('name', 'server', 'theme', 'path', 'fancy', 'language',
- 'email', 'broughtby', 'broughtbyurl', 'closed',
- 'inviteonly', 'private'),
- 'license' => array('url', 'title', 'image'),
+ 'site' => array('name', 'server', 'theme', 'path', 'logo', 'fancy', 'language',
+ 'email', 'broughtby', 'broughtbyurl', 'timezone', 'closed',
+ 'inviteonly', 'private', 'textlimit', 'ssl', 'sslserver', 'shorturllength'),
+ 'license' => array('type', 'owner', 'url', 'title', 'image'),
'nickname' => array('featured'),
+ 'profile' => array('biolimit'),
+ 'group' => array('desclimit'),
+ 'notice' => array('contentlimit'),
'throttle' => array('enabled', 'count', 'timespan'),
- 'xmpp' => array('enabled', 'server', 'user')
+ 'xmpp' => array('enabled', 'server', 'port', 'user'),
+ 'integration' => array('source')
);
/**
@@ -138,5 +140,20 @@ class ApiStatusnetConfigAction extends ApiAction
}
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/apistatusnetversion.php b/actions/apistatusnetversion.php
index 5109cd806..d09480759 100644
--- a/actions/apistatusnetversion.php
+++ b/actions/apistatusnetversion.php
@@ -98,5 +98,20 @@ class ApiStatusnetVersionAction extends ApiPrivateAuthAction
}
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php
index 1027d97d4..c89d02247 100644
--- a/actions/apitimelinefavorites.php
+++ b/actions/apitimelinefavorites.php
@@ -100,44 +100,81 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
function showTimeline()
{
- $profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
+ $profile = $this->user->getProfile();
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- $sitename = common_config('site', 'name');
- $title = sprintf(
+ $sitename = common_config('site', 'name');
+ $title = sprintf(
_('%1$s / Favorites from %2$s'),
$sitename,
$this->user->nickname
);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:Favorites:" . $this->user->id;
- $link = common_local_url(
- 'favorites',
- array('nickname' => $this->user->nickname)
- );
- $subtitle = sprintf(
+
+ $subtitle = sprintf(
_('%1$s updates favorited by %2$s / %2$s.'),
$sitename,
$profile->getBestName(),
$this->user->nickname
);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $logo = !empty($avatar)
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+ $link = common_local_url(
+ 'showfavorites',
+ array('nickname' => $this->user->nickname)
+ );
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $selfuri = common_root_url() .
- ltrim($_SERVER['QUERY_STRING'], 'p=');
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link, $subtitle,
- null, $selfuri, $logo
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'showfavorites',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineFavorites', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php
index 4e3827bae..9ef3ace60 100644
--- a/actions/apitimelinefriends.php
+++ b/actions/apitimelinefriends.php
@@ -112,41 +112,73 @@ 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;
- $link = common_local_url(
- 'all', array('nickname' => $this->user->nickname)
- );
- $subtitle = sprintf(
- _('Updates from %1$s and friends on %2$s!'),
- $this->user->nickname, $sitename
- );
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+
+ $subtitle = sprintf(
+ _('Updates from %1$s and friends on %2$s!'),
+ $this->user->nickname, $sitename
+ );
+
+ $logo = (!empty($avatar))
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+
+ $link = common_local_url(
+ 'all', array(
+ 'nickname' => $this->user->nickname
+ )
+ );
+
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $target_id = $this->arg('id');
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
- if (isset($target_id)) {
- $selfuri = common_root_url() .
- 'api/statuses/friends_timeline/' .
- $target_id . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/friends_timeline.atom';
+ $atom->addLink(
+ common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $logo
- );
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineFriends', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -170,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 af414c680..8f971392b 100644
--- a/actions/apitimelinegroup.php
+++ b/actions/apitimelinegroup.php
@@ -104,44 +104,54 @@ 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;
- $link = common_local_url(
- 'showgroup',
- array('nickname' => $this->group->nickname)
- );
- $subtitle = sprintf(
- _('Updates from %1$s on %2$s!'),
- $this->group->nickname,
- $sitename
- );
- $logo = ($avatar) ? $avatar : User_group::defaultLogo(AVATAR_PROFILE_SIZE);
+ // 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->notices, $title, $link, $subtitle, null, $logo);
- break;
- case 'atom':
- $selfuri = common_root_url() .
- 'api/statusnet/groups/timeline/' .
- $this->group->nickname . '.atom';
- $this->showAtomTimeline(
+ $this->showRssTimeline(
$this->notices,
- $title,
- $id,
- $link,
- $subtitle,
+ $atom->title,
+ $this->group->homeUrl(),
+ $atom->subtitle,
null,
- $selfuri,
- $logo
+ $atom->logo
);
break;
+ case 'atom':
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ try {
+
+ $atom->addAuthorRaw($this->group->asAtomAuthor());
+ $atom->setActivitySubject($this->group->asActivitySubject());
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+ $self = $this->getSelfUri('ApiTimelineGroup', $aargs);
+
+ $atom->setId($self);
+ $atom->setSelfLink($self);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
+ } catch (Atom10FeedException $e) {
+ $this->serverError(
+ 'Could not generate feed for group - ' . $e->getMessage()
+ );
+ return;
+ }
+
+ break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
@@ -169,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 828eae6cf..abd387786 100644
--- a/actions/apitimelinehome.php
+++ b/actions/apitimelinehome.php
@@ -113,41 +113,69 @@ 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;
- $link = common_local_url(
- 'all', array('nickname' => $this->user->nickname)
- );
+
$subtitle = sprintf(
_('Updates from %1$s and friends on %2$s!'),
$this->user->nickname, $sitename
);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+
+ $logo = (!empty($avatar))
+ ? $avatar->displayUrl()
+ : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+ $link = common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ );
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo
+ );
break;
case 'atom':
- $target_id = $this->arg('id');
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
- if (isset($target_id)) {
- $selfuri = common_root_url() .
- 'api/statuses/home_timeline/' .
- $target_id . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/home_timeline.atom';
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $logo
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineHome', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -172,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 9dc2162cc..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',
@@ -137,12 +137,36 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
break;
case 'atom':
- $selfuri = common_root_url() .
- ltrim($_SERVER['QUERY_STRING'], 'p=');
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link, $subtitle,
- null, $selfuri, $logo
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'replies',
+ array('nickname' => $this->user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineMentions', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -165,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 3f4a46c0f..3e4dad690 100644
--- a/actions/apitimelinepublic.php
+++ b/actions/apitimelinepublic.php
@@ -105,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);
@@ -118,11 +118,28 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo);
break;
case 'atom':
- $selfuri = common_root_url() . 'api/statuses/public_timeline.atom';
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, null, $selfuri, $sitelogo
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($sitelogo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(common_local_url('public'));
+
+ $atom->addLink(
+ $this->getSelfUri(
+ 'ApiTimelinePublic', array('format' => 'atom')
+ ),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -145,7 +162,7 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$notice = Notice::publicStream(
($this->page - 1) * $this->count, $this->count, $this->since_id,
- $this->max_id, $this->since
+ $this->max_id
);
while ($notice->fetch()) {
diff --git a/actions/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 e4b09e9bd..c77912fd0 100644
--- a/actions/apitimelineretweetsofme.php
+++ b/actions/apitimelineretweetsofme.php
@@ -99,6 +99,8 @@ class ApiTimelineRetweetsOfMeAction extends ApiAuthAction
$strm = $this->auth_user->repeatsOfMe($offset, $limit, $this->since_id, $this->max_id);
+ common_debug(var_export($strm, true));
+
switch ($this->format) {
case 'xml':
$this->showXmlTimeline($strm);
@@ -110,12 +112,40 @@ 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;
- $link = common_local_url('showstream',
- array('nickname' => $this->auth_user->nickname));
- $this->showAtomTimeline($strm, $title, $id, $link);
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'showstream',
+ array('nickname' => $this->auth_user->nickname)
+ )
+ );
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineRetweetsOfMe', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($strm);
+
+ $this->raw($atom->getString());
+
break;
default:
diff --git a/actions/apitimelinetag.php b/actions/apitimelinetag.php
index 1427d23b6..a29061fcc 100644
--- a/actions/apitimelinetag.php
+++ b/actions/apitimelinetag.php
@@ -100,16 +100,12 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$sitename = common_config('site', 'name');
$sitelogo = (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png');
$title = sprintf(_("Notices tagged with %s"), $this->tag);
- $link = common_local_url(
- 'tag',
- array('tag' => $this->tag)
- );
$subtitle = sprintf(
_('Updates tagged with %1$s on %2$s!'),
$this->tag,
$sitename
);
- $taguribase = common_config('integration', 'taguri');
+ $taguribase = TagURI::base();
$id = "tag:$taguribase:TagTimeline:".$tag;
switch($this->format) {
@@ -117,23 +113,52 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo);
- break;
- case 'atom':
- $selfuri = common_root_url() .
- 'api/statusnet/tags/timeline/' .
- $this->tag . '.atom';
- $this->showAtomTimeline(
+ $link = common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ );
+ $this->showRssTimeline(
$this->notices,
$title,
- $id,
$link,
$subtitle,
null,
- $selfuri,
$sitelogo
);
break;
+ case 'atom':
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $atom = new AtomNoticeFeed();
+
+ $atom->setId($id);
+ $atom->setTitle($title);
+ $atom->setSubtitle($subtitle);
+ $atom->setLogo($logo);
+ $atom->setUpdated('now');
+
+ $atom->addLink(
+ common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ )
+ );
+
+ $aargs = array('format' => 'atom');
+ if (!empty($this->tag)) {
+ $aargs['tag'] = $this->tag;
+ }
+
+ $atom->addLink(
+ $this->getSelfUri('ApiTimelineTag', $aargs),
+ array('rel' => 'self', 'type' => 'application/atom+xml')
+ );
+
+ $atom->addEntryFromNotices($this->notices);
+ $this->raw($atom->getString());
+
+ break;
case 'json':
$this->showJsonTimeline($this->notices);
break;
diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php
index 830b16941..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
@@ -145,18 +141,22 @@ class ApiTimelineUserAction extends ApiBareAuthAction
);
break;
case 'atom':
- if (isset($apidata['api_arg'])) {
- $selfuri = common_root_url() .
- 'api/statuses/user_timeline/' .
- $apidata['api_arg'] . '.atom';
- } else {
- $selfuri = common_root_url() .
- 'api/statuses/user_timeline.atom';
+
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
+ $id = $this->arg('id');
+ $aargs = array('format' => 'atom');
+ if (!empty($id)) {
+ $aargs['id'] = $id;
}
- $this->showAtomTimeline(
- $this->notices, $title, $id, $link,
- $subtitle, $suplink, $selfuri, $logo
- );
+ $self = $this->getSelfUri('ApiTimelineUser', $aargs);
+ $atom->setId($self);
+ $atom->setSelfLink($self);
+
+ $atom->addEntryFromNotices($this->notices);
+
+ $this->raw($atom->getString());
+
break;
case 'json':
$this->showJsonTimeline($this->notices);
@@ -180,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/apiusershow.php b/actions/apiusershow.php
index a7fe0dcc1..6c8fad49b 100644
--- a/actions/apiusershow.php
+++ b/actions/apiusershow.php
@@ -123,4 +123,19 @@ class ApiUserShowAction extends ApiPrivateAuthAction
}
+ /**
+ * Return true if read only.
+ *
+ * MAY override
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
}
diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php
index cf4525552..6a7398746 100644
--- a/actions/avatarsettings.php
+++ b/actions/avatarsettings.php
@@ -416,8 +416,8 @@ class AvatarsettingsAction extends AccountSettingsAction
parent::showScripts();
if ($this->mode == 'crop') {
- $this->script('js/jcrop/jquery.Jcrop.min.js');
- $this->script('js/jcrop/jquery.Jcrop.go.js');
+ $this->script('jcrop/jquery.Jcrop.min.js');
+ $this->script('jcrop/jquery.Jcrop.go.js');
}
$this->autofocus('avatarfile');
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/deleteapplication.php b/actions/deleteapplication.php
new file mode 100644
index 000000000..17526e111
--- /dev/null
+++ b/actions/deleteapplication.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Action class to delete an OAuth application
+ *
+ * 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 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') && !defined('LACONICA')) {
+ exit(1);
+}
+
+/**
+ * Delete an OAuth appliction
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class DeleteapplicationAction extends Action
+{
+ var $app = null;
+
+ /**
+ * Take arguments for running
+ *
+ * @param array $args $_REQUEST args
+ *
+ * @return boolean success flag
+ */
+
+ function prepare($args)
+ {
+ if (!parent::prepare($args)) {
+ return false;
+ }
+
+ if (!common_logged_in()) {
+ $this->clientError(_('You must be logged in to delete an application.'));
+ return false;
+ }
+
+ $id = (int)$this->arg('id');
+ $this->app = Oauth_application::staticGet('id', $id);
+
+ if (empty($this->app)) {
+ $this->clientError(_('Application not found.'));
+ return false;
+ }
+
+ $cur = common_current_user();
+
+ if ($cur->id != $this->app->owner) {
+ $this->clientError(_('You are not the owner of this application.'), 401);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Handle request
+ *
+ * Shows a page with list of favorite notices
+ *
+ * @param array $args $_REQUEST args; handled in prepare()
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+
+ // CSRF protection
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->clientError(_('There was a problem with your session token.'));
+ return;
+ }
+
+ if ($this->arg('no')) {
+ common_redirect(common_local_url('showapplication',
+ array('id' => $this->app->id)), 303);
+ } elseif ($this->arg('yes')) {
+ $this->handlePost();
+ common_redirect(common_local_url('oauthappssettings'), 303);
+ } else {
+ $this->showPage();
+ }
+ }
+ }
+
+ function showContent() {
+ $this->areYouSureForm();
+ }
+
+ function title() {
+ return _('Delete application');
+ }
+
+ function showNoticeForm() {
+ // nop
+ }
+
+ /**
+ * Confirm with user.
+ *
+ * Shows a confirmation form.
+ *
+ * @return void
+ */
+ function areYouSureForm()
+ {
+ $id = $this->app->id;
+ $this->elementStart('form', array('id' => 'deleteapplication-' . $id,
+ 'method' => 'post',
+ 'class' => 'form_settings form_entity_block',
+ 'action' => common_local_url('deleteapplication',
+ array('id' => $this->app->id))));
+ $this->elementStart('fieldset');
+ $this->hidden('token', common_session_token());
+ $this->element('legend', _('Delete application'));
+ $this->element('p', null,
+ _('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.'));
+ $this->submit('form_action-no',
+ _('No'),
+ 'submit form_action-primary',
+ 'no',
+ _("Do not delete this application"));
+ $this->submit('form_action-yes',
+ _('Yes'),
+ 'submit form_action-secondary',
+ 'yes', _('Delete this application'));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ }
+
+ /**
+ * Actually delete the app
+ *
+ * @return void
+ */
+
+ function handlePost()
+ {
+ $this->app->delete();
+ }
+}
+
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/designadminpanel.php b/actions/designadminpanel.php
index 72ad6ade2..30e8bde1a 100644
--- a/actions/designadminpanel.php
+++ b/actions/designadminpanel.php
@@ -302,8 +302,8 @@ class DesignadminpanelAction extends AdminPanelAction
{
parent::showScripts();
- $this->script('js/farbtastic/farbtastic.js');
- $this->script('js/userdesign.go.js');
+ $this->script('farbtastic/farbtastic.js');
+ $this->script('userdesign.go.js');
$this->autofocus('design_background-image_file');
}
diff --git a/actions/doc.php b/actions/doc.php
index 25d363472..459f5f096 100644
--- a/actions/doc.php
+++ b/actions/doc.php
@@ -54,6 +54,9 @@ class DocAction extends Action
parent::prepare($args);
$this->title = $this->trimmed('title');
+ if (!preg_match('/^[a-zA-Z0-9_-]*$/', $this->title)) {
+ $this->title = 'help';
+ }
$this->output = null;
$this->loadDoc();
@@ -170,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);
@@ -180,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/editapplication.php b/actions/editapplication.php
index 3b120259a..64cf0a574 100644
--- a/actions/editapplication.php
+++ b/actions/editapplication.php
@@ -51,7 +51,7 @@ class EditApplicationAction extends OwnerDesignAction
function title()
{
- return _('Edit application');
+ return _('Edit Application');
}
/**
@@ -179,6 +179,9 @@ class EditApplicationAction extends OwnerDesignAction
} elseif (mb_strlen($name) > 255) {
$this->showForm(_('Name is too long (max 255 chars).'));
return;
+ } else if ($this->nameExists($name)) {
+ $this->showForm(_('Name already in use. Try another one.'));
+ return;
} elseif (empty($description)) {
$this->showForm(_('Description is required.'));
return;
@@ -260,5 +263,26 @@ class EditApplicationAction extends OwnerDesignAction
common_redirect(common_local_url('oauthappssettings'), 303);
}
+ /**
+ * Does the app name already exist?
+ *
+ * Checks the DB to see someone has already registered an app
+ * with the same name.
+ *
+ * @param string $name app name to check
+ *
+ * @return boolean true if the name already exists
+ */
+
+ function nameExists($name)
+ {
+ $newapp = Oauth_application::staticGet('name', $name);
+ if (empty($newapp)) {
+ return false;
+ } else {
+ return $newapp->id != $this->app->id;
+ }
+ }
+
}
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/favorited.php b/actions/favorited.php
index 9ffa5b844..d8980440d 100644
--- a/actions/favorited.php
+++ b/actions/favorited.php
@@ -186,10 +186,13 @@ class FavoritedAction extends Action
function showContent()
{
$weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+ $cutoff = sprintf("fave.modified > '%s'",
+ common_sql_date(time() - common_config('popular', 'cutoff')));
$qry = 'SELECT notice.*, '.
$weightexpr . ' as weight ' .
'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+ "WHERE $cutoff " .
'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' .
'ORDER BY weight DESC';
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/geocode.php b/actions/geocode.php
index 9671d2c27..e883c6ce4 100644
--- a/actions/geocode.php
+++ b/actions/geocode.php
@@ -42,6 +42,10 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
*/
class GeocodeAction extends Action
{
+ var $lat = null;
+ var $lon = null;
+ var $location = null;
+
function prepare($args)
{
parent::prepare($args);
@@ -52,12 +56,7 @@ class GeocodeAction extends Action
}
$this->lat = $this->trimmed('lat');
$this->lon = $this->trimmed('lon');
- $location = Location::fromLatLon($this->lat, $this->lon);
- if ($location) {
- $this->location = Location::fromId($location->location_id, $location->location_ns);
- $this->lat = $this->location->lat;
- $this->lon = $this->location->lon;
- }
+ $this->location = Location::fromLatLon($this->lat, $this->lon);
return true;
}
@@ -95,4 +94,3 @@ class GeocodeAction extends Action
return true;
}
}
-?>
diff --git a/actions/getfile.php b/actions/getfile.php
index cd327e410..9cbe8e1d9 100644
--- a/actions/getfile.php
+++ b/actions/getfile.php
@@ -71,7 +71,7 @@ class GetfileAction extends Action
$filename = $this->trimmed('filename');
$path = null;
- if ($filename) {
+ if ($filename && File::validFilename($filename)) {
$path = File::path($filename);
}
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 f197aef33..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) {
@@ -437,8 +440,8 @@ class GrouplogoAction extends GroupDesignAction
parent::showScripts();
if ($this->mode == 'crop') {
- $this->script('js/jcrop/jquery.Jcrop.min.js');
- $this->script('js/jcrop/jquery.Jcrop.go.js');
+ $this->script('jcrop/jquery.Jcrop.min.js');
+ $this->script('jcrop/jquery.Jcrop.go.js');
}
$this->autofocus('avatarfile');
diff --git a/actions/groupmembers.php b/actions/groupmembers.php
index 0f47c268d..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);
@@ -192,7 +199,9 @@ class GroupMemberListItem extends ProfileListItem
{
$user = common_current_user();
- if (!empty($user) && $user->id != $this->profile->id && $user->isAdmin($this->group) &&
+ if (!empty($user) &&
+ $user->id != $this->profile->id &&
+ ($user->isAdmin($this->group) || $user->hasRight(Right::MAKEGROUPADMIN)) &&
!$this->profile->isAdmin($this->group)) {
$this->out->elementStart('li', 'entity_make_admin');
$maf = new MakeAdminForm($this->out, $this->profile, $this->group,
diff --git a/actions/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/inbox.php b/actions/inbox.php
index f605cc9e8..8330f753f 100644
--- a/actions/inbox.php
+++ b/actions/inbox.php
@@ -56,10 +56,10 @@ class InboxAction extends MailboxAction
function title()
{
if ($this->page > 1) {
- return sprintf(_("Inbox for %1$s - page %2$d"), $this->user->nickname,
+ return sprintf(_('Inbox for %1$s - page %2$d'), $this->user->nickname,
$this->page);
} else {
- return sprintf(_("Inbox for %s"), $this->user->nickname);
+ return sprintf(_('Inbox for %s'), $this->user->nickname);
}
}
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/makeadmin.php b/actions/makeadmin.php
index 9ad7d6e7c..f19348648 100644
--- a/actions/makeadmin.php
+++ b/actions/makeadmin.php
@@ -87,7 +87,8 @@ class MakeadminAction extends Action
return false;
}
$user = common_current_user();
- if (!$user->isAdmin($this->group)) {
+ if (!$user->isAdmin($this->group) &&
+ !$user->hasRight(Right::MAKEGROUPADMIN)) {
$this->clientError(_('Only an admin can make another user an admin.'), 401);
return false;
}
diff --git a/actions/newapplication.php b/actions/newapplication.php
index bc5b4edaf..0f819b349 100644
--- a/actions/newapplication.php
+++ b/actions/newapplication.php
@@ -49,7 +49,7 @@ class NewApplicationAction extends OwnerDesignAction
function title()
{
- return _('New application');
+ return _('New Application');
}
/**
@@ -158,6 +158,9 @@ class NewApplicationAction extends OwnerDesignAction
if (empty($name)) {
$this->showForm(_('Name is required.'));
return;
+ } else if ($this->nameExists($name)) {
+ $this->showForm(_('Name already in use. Try another one.'));
+ return;
} elseif (mb_strlen($name) > 255) {
$this->showForm(_('Name is too long (max 255 chars).'));
return;
@@ -273,5 +276,22 @@ class NewApplicationAction extends OwnerDesignAction
}
+ /**
+ * Does the app name already exist?
+ *
+ * Checks the DB to see someone has already registered an app
+ * with the same name.
+ *
+ * @param string $name app name to check
+ *
+ * @return boolean true if the name already exists
+ */
+
+ function nameExists($name)
+ {
+ $app = Oauth_application::staticGet('name', $name);
+ return !empty($app);
+ }
+
}
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 a4ed87bb6..ed0fa1b2b 100644
--- a/actions/newnotice.php
+++ b/actions/newnotice.php
@@ -201,7 +201,7 @@ class NewnoticeAction extends Action
$upload->attachToNotice($notice);
}
- common_broadcast_notice($notice);
+
if ($this->boolean('ajax')) {
header('Content-Type: text/xml;charset=utf-8');
@@ -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 c2e8d441b..f125f4c63 100644
--- a/actions/oauthconnectionssettings.php
+++ b/actions/oauthconnectionssettings.php
@@ -33,6 +33,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
require_once INSTALLDIR . '/lib/connectsettingsaction.php';
require_once INSTALLDIR . '/lib/applicationlist.php';
+require_once INSTALLDIR . '/lib/apioauthstore.php';
/**
* Show connected OAuth applications
@@ -71,11 +72,6 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return _('Connected applications');
}
- function isReadOnly($args)
- {
- return true;
- }
-
/**
* Instructions for use
*
@@ -103,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);
@@ -116,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));
}
/**
@@ -153,6 +149,13 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
}
}
+ /**
+ * Revoke access to an authorized OAuth application
+ *
+ * @param int $appId the ID of the application
+ *
+ */
+
function revokeAccess($appId)
{
$cur = common_current_user();
@@ -164,6 +167,8 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return false;
}
+ // XXX: Transaction here?
+
$appUser = Oauth_application_user::getByKeys($cur, $app);
if (empty($appUser)) {
@@ -171,12 +176,13 @@ class OauthconnectionssettingsAction extends ConnectSettingsAction
return false;
}
- $orig = clone($appUser);
- $appUser->access_type = 0; // No access
- $result = $appUser->update();
+ $datastore = new ApiStatusNetOAuthDataStore();
+ $datastore->revoke_token($appUser->token, 1);
+
+ $result = $appUser->delete();
if (!$result) {
- common_log_db_error($orig, 'UPDATE', __FILE__);
+ common_log_db_error($orig, 'DELETE', __FILE__);
$this->clientError(_('Unable to revoke access for app: ' . $app->id));
return false;
}
diff --git a/actions/outbox.php b/actions/outbox.php
index de30de018..b81d4b9d0 100644
--- a/actions/outbox.php
+++ b/actions/outbox.php
@@ -55,10 +55,10 @@ class OutboxAction extends MailboxAction
function title()
{
if ($this->page > 1) {
- return sprintf(_("Outbox for %1$s - page %2$d"),
+ return sprintf(_('Outbox for %1$s - page %2$d'),
$this->user->nickname, $page);
} else {
- return sprintf(_("Outbox for %s"), $this->user->nickname);
+ return sprintf(_('Outbox for %s'), $this->user->nickname);
}
}
diff --git a/actions/pathsadminpanel.php b/actions/pathsadminpanel.php
index 3779fcfaa..9155a7e42 100644
--- a/actions/pathsadminpanel.php
+++ b/actions/pathsadminpanel.php
@@ -24,7 +24,7 @@
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @author Sarven Capadisli <csarven@status.net>
- * @copyright 2008-2009 StatusNet, Inc.
+ * @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/
*/
@@ -98,6 +98,11 @@ class PathsadminpanelAction extends AdminPanelAction
'background' => array('server', 'dir', 'path')
);
+ // XXX: If we're only going to have one boolean on thi page we
+ // can remove some of the boolean processing code --Z
+
+ static $booleans = array('site' => array('fancy'));
+
$values = array();
foreach ($settings as $section => $parts) {
@@ -106,6 +111,12 @@ class PathsadminpanelAction extends AdminPanelAction
}
}
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ $values[$section][$setting] = ($this->boolean($setting)) ? 1 : 0;
+ }
+ }
+
$this->validate($values);
// assert(all values are valid);
@@ -120,7 +131,13 @@ class PathsadminpanelAction extends AdminPanelAction
}
}
- $config->query('COMMIT');
+ foreach ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
return;
}
@@ -213,10 +230,14 @@ class PathsAdminPanelForm extends AdminForm
function formData()
{
- $this->out->elementStart('fieldset', array('id' => 'settings_paths_locale'));
+ $this->out->elementStart('fieldset', array('id' => 'settings_paths_locale'));
$this->out->element('legend', null, _('Site'), 'site');
$this->out->elementStart('ul', 'form_data');
+ $this->li();
+ $this->input('server', _('Server'), _('Site\'s server hostname.'));
+ $this->unli();
+
$this->li();
$this->input('path', _('Path'), _('Site path'));
$this->unli();
@@ -225,6 +246,12 @@ class PathsAdminPanelForm extends AdminForm
$this->input('locale_path', _('Path to locales'), _('Directory path to locales'), 'site');
$this->unli();
+ $this->li();
+ $this->out->checkbox('fancy', _('Fancy URLs'),
+ (bool) $this->value('fancy'),
+ _('Use fancy (more readable and memorable) URLs?'));
+ $this->unli();
+
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
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 982dfde15..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);
}
@@ -131,12 +132,20 @@ class PublicAction extends Action
return _('Public timeline');
}
}
-
+
function extraHead()
{
parent::extraHead();
$this->element('meta', array('http-equiv' => 'X-XRDS-Location',
'content' => common_local_url('publicxrds')));
+
+ $rsd = common_local_url('rsd');
+
+ // RSD, http://tales.phrasewise.com/rfc/rsd
+
+ $this->element('link', array('rel' => 'EditURI',
+ 'type' => 'application/rsd+xml',
+ 'href' => $rsd));
}
/**
diff --git a/actions/publictagcloud.php b/actions/publictagcloud.php
index 9e4478dbb..9993b2d3f 100644
--- a/actions/publictagcloud.php
+++ b/actions/publictagcloud.php
@@ -106,7 +106,10 @@ class PublictagcloudAction extends Action
#Add the aggregated columns...
$tags->selectAdd('max(notice_id) as last_notice_id');
$calc = common_sql_weight('created', common_config('tag', 'dropoff'));
+ $cutoff = sprintf("notice_tag.created > '%s'",
+ common_sql_date(time() - common_config('tag', 'cutoff')));
$tags->selectAdd($calc . ' as weight');
+ $tags->addWhere($cutoff);
$tags->groupBy('tag');
$tags->orderBy('weight DESC');
diff --git a/actions/recoverpassword.php b/actions/recoverpassword.php
index dcff35f6e..1e2775e7a 100644
--- a/actions/recoverpassword.php
+++ b/actions/recoverpassword.php
@@ -21,7 +21,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
# You have 24 hours to claim your password
-define(MAX_RECOVERY_TIME, 24 * 60 * 60);
+define('MAX_RECOVERY_TIME', 24 * 60 * 60);
class RecoverpasswordAction extends Action
{
diff --git a/actions/register.php b/actions/register.php
index 698137346..ccab76cf0 100644
--- a/actions/register.php
+++ b/actions/register.php
@@ -280,7 +280,7 @@ class RegisterAction extends Action
function nicknameExists($nickname)
{
$user = User::staticGet('nickname', $nickname);
- return ($user !== false);
+ return is_object($user);
}
/**
@@ -300,7 +300,7 @@ class RegisterAction extends Action
return false;
}
$user = User::staticGet('email', $email);
- return ($user !== false);
+ return is_object($user);
}
// overrrided to add entry-title class
diff --git a/actions/repeat.php b/actions/repeat.php
index b75523498..e112496bc 100644
--- a/actions/repeat.php
+++ b/actions/repeat.php
@@ -106,7 +106,7 @@ class RepeatAction extends Action
{
$repeat = $this->notice->repeat($this->user->id, 'web');
- common_broadcast_notice($repeat);
+
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
diff --git a/actions/replies.php b/actions/replies.php
index 2e50f1c3c..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);
}
@@ -124,7 +125,7 @@ class RepliesAction extends OwnerDesignAction
if ($this->page == 1) {
return sprintf(_("Replies to %s"), $this->user->nickname);
} else {
- return sprintf(_("Replies to %1$s, page %2$d"),
+ return sprintf(_('Replies to %1$s, page %2$d'),
$this->user->nickname,
$this->page);
}
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/robotstxt.php b/actions/robotstxt.php
new file mode 100644
index 000000000..5131097c8
--- /dev/null
+++ b/actions/robotstxt.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * robots.txt generator
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * 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);
+}
+
+/**
+ * Prints out a static robots.txt
+ *
+ * @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 RobotstxtAction extends Action
+{
+ /**
+ * Handles requests
+ *
+ * Since this is a relatively static document, we
+ * don't do a prepare()
+ *
+ * @param array $args GET, POST, and URL params; unused.
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ if (Event::handle('StartRobotsTxt', array($this))) {
+
+ header('Content-Type: text/plain');
+
+ print "User-Agent: *\n";
+
+ if (common_config('site', 'private')) {
+
+ print "Disallow: /\n";
+
+ } else {
+
+ $disallow = common_config('robotstxt', 'disallow');
+
+ foreach ($disallow as $dir) {
+ print "Disallow: /$dir/\n";
+ }
+
+ $crawldelay = common_config('robotstxt', 'crawldelay');
+
+ if (!empty($crawldelay)) {
+ print "Crawl-delay: " . $crawldelay . "\n";
+ }
+ }
+
+ Event::handle('EndRobotsTxt', array($this));
+ }
+ }
+
+ /**
+ * Return true; this page doesn't touch the DB.
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+}
diff --git a/actions/rsd.php b/actions/rsd.php
new file mode 100644
index 000000000..f88bf2e9a
--- /dev/null
+++ b/actions/rsd.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008-2010, StatusNet, Inc.
+ *
+ * Really Simple Discovery (RSD) for API access
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category API
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * RSD action class
+ *
+ * Really Simple Discovery (RSD) is a simple (to a fault, maybe)
+ * discovery tool for blog APIs.
+ *
+ * http://tales.phrasewise.com/rfc/rsd
+ *
+ * Anil Dash suggested that RSD be used for services that implement
+ * the Twitter API:
+ *
+ * http://dashes.com/anil/2009/12/the-twitter-api-is-finished.html
+ *
+ * It's in use now for WordPress.com blogs:
+ *
+ * http://matt.wordpress.com/xmlrpc.php?rsd
+ *
+ * I (evan@status.net) have tried to stay faithful to the premise of
+ * RSD, while adding information useful to StatusNet client developers.
+ * In particular:
+ *
+ * - There is a link from each user's profile page to their personal
+ * RSD feed. A personal rsd.xml includes a 'blogID' element that is
+ * their username.
+ * - There is a link from the public root to '/rsd.xml', a public RSD
+ * feed. It's identical to the personal rsd except it doesn't include
+ * a blogId.
+ * - I've added a setting to the API to indicate that OAuth support is
+ * available.
+ *
+ * @category API
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class RsdAction extends Action
+{
+ /**
+ * Optional attribute for the personal rsd.xml file.
+ */
+
+ var $user = null;
+
+ /**
+ * Prepare the action for use.
+ *
+ * Check for a nickname; redirect if non-canonical; if
+ * not provided, assume public rsd.xml.
+ *
+ * @param array $args GET, POST, and URI arguments.
+ *
+ * @return boolean success flag
+ */
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ // optional argument
+
+ $nickname_arg = $this->arg('nickname');
+
+ if (empty($nickname_arg)) {
+ $this->user = null;
+ } else {
+ $nickname = common_canonical_nickname($nickname_arg);
+
+ // Permanent redirect on non-canonical nickname
+
+ if ($nickname_arg != $nickname) {
+ common_redirect(common_local_url('rsd',
+ array('nickname' => $nickname)),
+ 301);
+ return false;
+ }
+
+ $this->user = User::staticGet('nickname', $nickname);
+
+ if (empty($this->user)) {
+ $this->clientError(_('No such user.'), 404);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Action handler.
+ *
+ * Outputs the XML format for an RSD file. May include
+ * personal information if this is a personal file
+ * (based on whether $user attribute is set).
+ *
+ * @param array $args array of arguments
+ *
+ * @return nothing
+ */
+
+ function handle($args)
+ {
+ header('Content-Type: application/rsd+xml');
+
+ $this->startXML();
+
+ $rsdNS = 'http://archipelago.phrasewise.com/rsd';
+ $this->elementStart('rsd', array('version' => '1.0',
+ 'xmlns' => $rsdNS));
+ $this->elementStart('service');
+ $this->element('engineName', null, _('StatusNet'));
+ $this->element('engineLink', null, 'http://status.net/');
+ $this->elementStart('apis');
+ if (Event::handle('StartRsdListApis', array($this, $this->user))) {
+
+ $blogID = (empty($this->user)) ? '' : $this->user->nickname;
+ $apiAttrs = array('name' => 'Twitter',
+ 'preferred' => 'true',
+ 'apiLink' => $this->_apiRoot(),
+ 'blogID' => $blogID);
+
+ $this->elementStart('api', $apiAttrs);
+ $this->elementStart('settings');
+ $this->element('docs', null,
+ 'http://status.net/wiki/TwitterCompatibleAPI');
+ $this->element('setting', array('name' => 'OAuth'),
+ 'true');
+ $this->elementEnd('settings');
+ $this->elementEnd('api');
+ Event::handle('EndRsdListApis', array($this, $this->user));
+ }
+ $this->elementEnd('apis');
+ $this->elementEnd('service');
+ $this->elementEnd('rsd');
+
+ $this->endXML();
+
+ return true;
+ }
+
+ /**
+ * Returns last-modified date for use in caching
+ *
+ * Per-user rsd.xml is dated to last change of user
+ * (in case of nickname change); public has no date.
+ *
+ * @return string date of last change of this page
+ */
+
+ function lastModified()
+ {
+ if (!empty($this->user)) {
+ return $this->user->modified;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Flag to indicate if this action is read-only
+ *
+ * It is; it doesn't change the DB.
+ *
+ * @param array $args ignored
+ *
+ * @return boolean true
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
+ /**
+ * Return current site's API root
+ *
+ * Varies based on URL parameters, like if fancy URLs are
+ * turned on.
+ *
+ * @return string API root URI for this site
+ */
+
+ private function _apiRoot()
+ {
+ if (common_config('site', 'fancy')) {
+ return common_path('api/', true);
+ } else {
+ return common_path('index.php/api/', true);
+ }
+ }
+}
diff --git a/actions/sessionsadminpanel.php b/actions/sessionsadminpanel.php
new file mode 100644
index 000000000..4386ef844
--- /dev/null
+++ b/actions/sessionsadminpanel.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Sessions 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);
+}
+
+/**
+ * Admin site sessions
+ *
+ * @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 SessionsadminpanelAction extends AdminPanelAction
+{
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return _('Sessions');
+ }
+
+ /**
+ * Instructions for using this form.
+ *
+ * @return string instructions
+ */
+
+ function getInstructions()
+ {
+ return _('Session settings for this StatusNet site.');
+ }
+
+ /**
+ * Show the site admin panel form
+ *
+ * @return void
+ */
+
+ function showForm()
+ {
+ $form = new SessionsAdminPanelForm($this);
+ $form->show();
+ return;
+ }
+
+ /**
+ * Save settings from the form
+ *
+ * @return void
+ */
+
+ function saveSettings()
+ {
+ static $booleans = array('sessions' => array('handle', 'debug'));
+
+ $values = array();
+
+ 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 ($booleans as $section => $parts) {
+ foreach ($parts as $setting) {
+ Config::save($section, $setting, $values[$section][$setting]);
+ }
+ }
+
+ $config->query('COMMIT');
+
+ return;
+ }
+
+ function validate(&$values)
+ {
+ // stub
+ }
+}
+
+class SessionsAdminPanelForm extends AdminForm
+{
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'sessionsadminpanel';
+ }
+
+ /**
+ * 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('sessionsadminpanel');
+ }
+
+ /**
+ * Data elements of the form
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->elementStart('fieldset', array('id' => 'settings_user_sessions'));
+ $this->out->element('legend', null, _('Sessions'));
+
+ $this->out->elementStart('ul', 'form_data');
+
+ $this->li();
+ $this->out->checkbox('handle', _('Handle sessions'),
+ (bool) $this->value('handle', 'sessions'),
+ _('Whether to handle sessions ourselves.'));
+ $this->unli();
+
+ $this->li();
+ $this->out->checkbox('debug', _('Session debugging'),
+ (bool) $this->value('debug', 'sessions'),
+ _('Turn on debugging output for sessions.'));
+ $this->unli();
+
+ $this->out->elementEnd('ul');
+
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('submit', _('Save'), 'submit', null, _('Save site settings'));
+ }
+}
diff --git a/actions/showapplication.php b/actions/showapplication.php
index a6ff425c7..fa4484481 100644
--- a/actions/showapplication.php
+++ b/actions/showapplication.php
@@ -149,7 +149,6 @@ class ShowApplicationAction extends OwnerDesignAction
function showContent()
{
-
$cur = common_current_user();
$consumer = $this->application->getConsumer();
@@ -201,7 +200,7 @@ class ShowApplicationAction extends OwnerDesignAction
$userCnt = $appUsers->count();
$this->raw(sprintf(
- _('created by %1$s - %2$s access by default - %3$d users'),
+ _('Created by %1$s - %2$s access by default - %3$d users'),
$profile->getBestName(),
$defaultAccess,
$userCnt
@@ -222,18 +221,39 @@ class ShowApplicationAction extends OwnerDesignAction
$this->elementStart('li', 'entity_reset_keysecret');
$this->elementStart('form', array(
- 'id' => 'forma_reset_key',
+ 'id' => 'form_reset_key',
'class' => 'form_reset_key',
'method' => 'POST',
'action' => common_local_url('showapplication',
array('id' => $this->application->id))));
+ $this->elementStart('fieldset');
+ $this->hidden('token', common_session_token());
+
+ $this->element('input', array('type' => 'submit',
+ 'id' => 'reset',
+ 'name' => 'reset',
+ 'class' => 'submit',
+ 'value' => _('Reset key & secret'),
+ 'onClick' => 'return confirmReset()'));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ $this->elementEnd('li');
+
+ $this->elementStart('li', 'entity_delete');
+ $this->elementStart('form', array(
+ 'id' => 'form_delete_application',
+ 'class' => 'form_delete_application',
+ 'method' => 'POST',
+ 'action' => common_local_url('deleteapplication',
+ array('id' => $this->application->id))));
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
- $this->submit('reset', _('Reset key & secret'));
+ $this->submit('delete', _('Delete'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
$this->elementEnd('li');
+
$this->elementEnd('ul');
$this->elementEnd('div');
@@ -276,14 +296,53 @@ class ShowApplicationAction extends OwnerDesignAction
$this->elementEnd('p');
}
+ /**
+ * Add a confirm script for Consumer key/secret reset
+ *
+ * @return void
+ */
+
+ function showScripts()
+ {
+ parent::showScripts();
+
+ $msg = _('Are you sure you want to reset your consumer key and secret?');
+
+ $js = 'function confirmReset() { ';
+ $js .= ' var agree = confirm("' . $msg . '"); ';
+ $js .= ' return agree;';
+ $js .= '}';
+
+ $this->inlineScript($js);
+ }
+
+ /**
+ * Reset an application's Consumer key and secret
+ *
+ * XXX: Should this be moved to its own page with a confirm?
+ *
+ */
+
function resetKey()
{
$this->application->query('BEGIN');
+ $oauser = new Oauth_application_user();
+ $oauser->application_id = $this->application->id;
+ $result = $oauser->delete();
+
+ if ($result === false) {
+ common_log_db_error($oauser, 'DELETE', __FILE__);
+ $this->success = false;
+ $this->msg = ('Unable to reset consumer key and secret.');
+ $this->showPage();
+ return;
+ }
+
$consumer = $this->application->getConsumer();
$result = $consumer->delete();
- if (!$result) {
+ if ($result === false) {
common_log_db_error($consumer, 'DELETE', __FILE__);
$this->success = false;
$this->msg = ('Unable to reset consumer key and secret.');
@@ -295,7 +354,7 @@ class ShowApplicationAction extends OwnerDesignAction
$result = $consumer->insert();
- if (!$result) {
+ if (empty($result)) {
common_log_db_error($consumer, 'INSERT', __FILE__);
$this->application->query('ROLLBACK');
$this->success = false;
@@ -308,7 +367,7 @@ class ShowApplicationAction extends OwnerDesignAction
$this->application->consumer_key = $consumer->consumer_key;
$result = $this->application->update($orig);
- if (!$result) {
+ if ($result === false) {
common_log_db_error($application, 'UPDATE', __FILE__);
$this->application->query('ROLLBACK');
$this->success = false;
diff --git a/actions/showfavorites.php b/actions/showfavorites.php
index 6023f0156..5b85de683 100644
--- a/actions/showfavorites.php
+++ b/actions/showfavorites.php
@@ -74,9 +74,9 @@ class ShowfavoritesAction extends OwnerDesignAction
function title()
{
if ($this->page == 1) {
- return sprintf(_("%s's favorite notices"), $this->user->nickname);
+ return sprintf(_('%s\'s favorite notices'), $this->user->nickname);
} else {
- return sprintf(_("%1$s's favorite notices, page %2$d"),
+ return sprintf(_('%1$s\'s favorite notices, page %2$d'),
$this->user->nickname,
$this->page);
}
@@ -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 06ae572e8..5704b13d1 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -79,9 +79,9 @@ class ShowgroupAction extends GroupDesignAction
}
if ($this->page == 1) {
- return sprintf(_("%s group"), $base);
+ return sprintf(_('%s group'), $base);
} else {
- return sprintf(_("%1$s group, page %2$d"),
+ return sprintf(_('%1$s group, page %2$d'),
$base,
$this->page);
}
@@ -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');
}
@@ -330,13 +339,13 @@ class ShowgroupAction extends GroupDesignAction
new Feed(Feed::RSS2,
common_local_url('ApiTimelineGroup',
array('format' => 'rss',
- 'id' => $this->group->nickname)),
+ 'id' => $this->group->id)),
sprintf(_('Notice feed for %s group (RSS 2.0)'),
$this->group->nickname)),
new Feed(Feed::ATOM,
common_local_url('ApiTimelineGroup',
array('format' => 'atom',
- 'id' => $this->group->nickname)),
+ 'id' => $this->group->id)),
sprintf(_('Notice feed for %s group (Atom)'),
$this->group->nickname)),
new Feed(Feed::FOAF,
diff --git a/actions/showstream.php b/actions/showstream.php
index 75e10858d..f9407e35a 100644
--- a/actions/showstream.php
+++ b/actions/showstream.php
@@ -76,7 +76,7 @@ class ShowstreamAction extends ProfileAction
if ($this->page == 1) {
return $base;
} else {
- return sprintf(_("%1$s, page %2$d"),
+ return sprintf(_('%1$s, page %2$d'),
$base,
$this->page);
}
@@ -131,14 +131,14 @@ class ShowstreamAction extends ProfileAction
new Feed(Feed::RSS2,
common_local_url('ApiTimelineUser',
array(
- 'id' => $this->user->nickname,
+ 'id' => $this->user->id,
'format' => 'rss')),
sprintf(_('Notice feed for %s (RSS 2.0)'),
$this->user->nickname)),
new Feed(Feed::ATOM,
common_local_url('ApiTimelineUser',
array(
- 'id' => $this->user->nickname,
+ 'id' => $this->user->id,
'format' => 'atom')),
sprintf(_('Notice feed for %s (Atom)'),
$this->user->nickname)),
@@ -178,6 +178,15 @@ class ShowstreamAction extends ProfileAction
$this->element('link', array('rel' => 'microsummary',
'href' => common_local_url('microsummary',
array('nickname' => $this->profile->nickname))));
+
+ $rsd = common_local_url('rsd',
+ array('nickname' => $this->profile->nickname));
+
+ // RSD, http://tales.phrasewise.com/rfc/rsd
+ $this->element('link', array('rel' => 'EditURI',
+ 'type' => 'application/rsd+xml',
+ 'href' => $rsd));
+
}
function showProfile()
@@ -291,23 +300,6 @@ class ProfileNoticeListItem extends NoticeListItem
$this->out->elementStart('span', 'repeat');
- $this->out->elementStart('a', $attrs);
-
- $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
-
- $this->out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_MINI_SIZE),
- 'class' => 'avatar photo',
- 'width' => AVATAR_MINI_SIZE,
- 'height' => AVATAR_MINI_SIZE,
- 'alt' =>
- ($this->profile->fullname) ?
- $this->profile->fullname :
- $this->profile->nickname));
-
- $this->out->elementEnd('a');
-
$text_link = XMLStringer::estring('a', $attrs, $this->profile->nickname);
$this->out->raw(sprintf(_('Repeat of %s'), $text_link));
diff --git a/actions/siteadminpanel.php b/actions/siteadminpanel.php
index dd388a18a..cb3c2e8fd 100644
--- a/actions/siteadminpanel.php
+++ b/actions/siteadminpanel.php
@@ -24,7 +24,7 @@
* @author Evan Prodromou <evan@status.net>
* @author Zach Copley <zach@status.net>
* @author Sarven Capadisli <csarven@status.net>
- * @copyright 2008-2009 StatusNet, Inc.
+ * @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/
*/
@@ -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,12 +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 $booleans = array('site' => array('private', 'inviteonly', 'closed', 'fancy'));
+ static $settings = array(
+ 'site' => array('name', 'broughtby', 'broughtbyurl',
+ 'email', 'timezone', 'language',
+ 'site', 'textlimit', 'dupelimit'),
+ );
$values = array();
@@ -105,12 +104,6 @@ class SiteadminpanelAction extends AdminPanelAction
}
}
- 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);
@@ -127,12 +120,6 @@ class SiteadminpanelAction extends AdminPanelAction
}
}
- foreach ($booleans as $section => $parts) {
- foreach ($parts as $setting) {
- Config::save($section, $setting, $values[$section][$setting]);
- }
- }
-
$config->query('COMMIT');
return;
@@ -172,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))) {
@@ -291,78 +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_urls'));
- $this->out->element('legend', null, _('URLs'));
- $this->out->elementStart('ul', 'form_data');
- $this->li();
- $this->input('server', _('Server'), _('Site\'s server hostname.'));
- $this->unli();
-
- $this->li();
- $this->out->checkbox('fancy', _('Fancy URLs'),
- (bool) $this->value('fancy'),
- _('Use fancy (more readable and memorable) URLs?'));
- $this->unli();
- $this->out->elementEnd('ul');
- $this->out->elementEnd('fieldset');
-
- $this->out->elementStart('fieldset', array('id' => 'settings_admin_access'));
- $this->out->element('legend', null, _('Access'));
- $this->out->elementStart('ul', 'form_data');
- $this->li();
- $this->out->checkbox('private', _('Private'),
- (bool) $this->value('private'),
- _('Prohibit anonymous users (not logged in) from viewing site?'));
- $this->unli();
-
- $this->li();
- $this->out->checkbox('inviteonly', _('Invite only'),
- (bool) $this->value('inviteonly'),
- _('Make registration invitation only.'));
- $this->unli();
-
- $this->li();
- $this->out->checkbox('closed', _('Closed'),
- (bool) $this->value('closed'),
- _('Disable new registrations.'));
- $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 12857236e..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);
}
@@ -63,9 +64,9 @@ class TagAction extends Action
function title()
{
if ($this->page == 1) {
- return sprintf(_("Notices tagged with %s"), $this->tag);
+ return sprintf(_('Notices tagged with %s'), $this->tag);
} else {
- return sprintf(_("Notices tagged with %1$s, page %2$d"),
+ return sprintf(_('Notices tagged with %1$s, page %2$d'),
$this->tag,
$this->page);
}
@@ -85,7 +86,7 @@ class TagAction extends Action
array('tag' => $this->tag)),
sprintf(_('Notice feed for tag %s (RSS 1.0)'),
$this->tag)),
- new Feed(Feed::RSS2,
+ new Feed(Feed::RSS2,
common_local_url('ApiTimelineTag',
array('format' => 'rss',
'tag' => $this->tag)),
diff --git a/actions/tagrss.php b/actions/tagrss.php
index 75cbfa274..467a64abe 100644
--- a/actions/tagrss.php
+++ b/actions/tagrss.php
@@ -35,6 +35,7 @@ class TagrssAction extends Rss10Action
$this->clientError(_('No such tag.'));
return false;
} else {
+ $this->notices = $this->getNotices($this->limit);
return true;
}
}
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 5de2db5ff..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');
}
/**
@@ -96,7 +97,6 @@ class UseradminpanelAction extends AdminPanelAction
);
static $booleans = array(
- 'sessions' => array('handle', 'debug'),
'invite' => array('enabled')
);
@@ -261,26 +261,7 @@ class UserAdminPanelForm extends AdminForm
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
- $this->out->elementStart('fieldset', array('id' => 'settings_user_sessions'));
- $this->out->element('legend', null, _('Sessions'));
- $this->out->elementStart('ul', 'form_data');
-
- $this->li();
- $this->out->checkbox('sessions-handle', _('Handle sessions'),
- (bool) $this->value('handle', 'sessions'),
- _('Whether to handle sessions ourselves.'));
- $this->unli();
-
- $this->li();
- $this->out->checkbox('sessions-debug', _('Session debugging'),
- (bool) $this->value('debug', 'sessions'),
- _('Turn on debugging output for sessions.'));
- $this->unli();
-
- $this->out->elementEnd('ul');
-
- $this->out->elementEnd('fieldset');
}
diff --git a/actions/userauthorization.php b/actions/userauthorization.php
index 4321f1302..7f71c60db 100644
--- a/actions/userauthorization.php
+++ b/actions/userauthorization.php
@@ -127,10 +127,10 @@ class UserauthorizationAction extends Action
$location = $params->getLocation();
$avatar = $params->getAvatarURL();
- $this->elementStart('div', array('class' => 'profile'));
$this->elementStart('div', 'entity_profile vcard');
- $this->elementStart('a', array('href' => $profile,
- 'class' => 'url'));
+ $this->elementStart('dl', 'entity_depiction');
+ $this->element('dt', null, _('Photo'));
+ $this->elementStart('dd');
if ($avatar) {
$this->element('img', array('src' => $avatar,
'class' => 'photo avatar',
@@ -138,11 +138,19 @@ class UserauthorizationAction extends Action
'height' => AVATAR_PROFILE_SIZE,
'alt' => $nickname));
}
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
+
+ $this->elementStart('dl', 'entity_nickname');
+ $this->element('dt', null, _('Nickname'));
+ $this->elementStart('dd');
$hasFN = ($fullname !== '') ? 'nickname' : 'fn nickname';
- $this->elementStart('span', $hasFN);
+ $this->elementStart('a', array('href' => $profile,
+ 'class' => 'url '.$hasFN));
$this->raw($nickname);
- $this->elementEnd('span');
$this->elementEnd('a');
+ $this->elementEnd('dd');
+ $this->elementEnd('dl');
if (!is_null($fullname)) {
$this->elementStart('dl', 'entity_fn');
@@ -214,7 +222,6 @@ class UserauthorizationAction extends Action
$this->elementEnd('li');
$this->elementEnd('ul');
$this->elementEnd('div');
- $this->elementEnd('div');
}
function sendAuthorization()
@@ -350,4 +357,4 @@ class UserauthorizationAction extends Action
}
}
}
-} \ No newline at end of file
+}
diff --git a/actions/usergroups.php b/actions/usergroups.php
index 504226143..29bda0a76 100644
--- a/actions/usergroups.php
+++ b/actions/usergroups.php
@@ -59,9 +59,9 @@ class UsergroupsAction extends OwnerDesignAction
function title()
{
if ($this->page == 1) {
- return sprintf(_("%s groups"), $this->user->nickname);
+ return sprintf(_('%s groups'), $this->user->nickname);
} else {
- return sprintf(_("%1$s groups, page %2$d"),
+ return sprintf(_('%1$s groups, page %2$d'),
$this->user->nickname,
$this->page);
}
@@ -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);
+ $groups = $this->user->getGroups($offset, $limit);
- if ($groups) {
- $gl = new GroupList($groups, $this->user, $this);
- $cnt = $gl->show();
- if (0 == $cnt) {
- $this->showEmptyListMessage();
+ if ($groups) {
+ $gl = new GroupList($groups, $this->user, $this);
+ $cnt = $gl->show();
+ if (0 == $cnt) {
+ $this->showEmptyListMessage();
+ }
}
- }
- $this->pagination($this->page > 1, $cnt > GROUPS_PER_PAGE,
- $this->page, 'usergroups',
- array('nickname' => $this->user->nickname));
+ $this->pagination($this->page > 1, $cnt > GROUPS_PER_PAGE,
+ $this->page, 'usergroups',
+ array('nickname' => $this->user->nickname));
+
+ Event::handle('EndShowUserGroupsContent', array($this));
+ }
}
function showEmptyListMessage()
diff --git a/actions/userrss.php b/actions/userrss.php
index 19e610551..e03eb9356 100644
--- a/actions/userrss.php
+++ b/actions/userrss.php
@@ -29,6 +29,8 @@ class UserrssAction extends Rss10Action
function prepare($args)
{
+ common_debug("UserrssAction");
+
parent::prepare($args);
$nickname = $this->trimmed('nickname');
$this->user = User::staticGet('nickname', $nickname);
@@ -38,20 +40,24 @@ class UserrssAction extends Rss10Action
$this->clientError(_('No such user.'));
return false;
} else {
- $this->notices = $this->getNotices($this->limit);
+ if (!empty($this->tag)) {
+ $this->notices = $this->getTaggedNotices();
+ } else {
+ $this->notices = $this->getNotices();
+ }
return true;
}
}
- function getTaggedNotices($tag = null, $limit=0)
+ function getTaggedNotices()
{
- $user = $this->user;
-
- if (is_null($user)) {
- return null;
- }
-
- $notice = $user->getTaggedNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit, 0, 0, null, $tag);
+ $notice = $this->user->getTaggedNotices(
+ $this->tag,
+ 0,
+ ($this->limit == 0) ? NOTICES_PER_PAGE : $this->limit,
+ 0,
+ 0
+ );
$notices = array();
while ($notice->fetch()) {
@@ -62,15 +68,12 @@ class UserrssAction extends Rss10Action
}
- function getNotices($limit=0)
+ function getNotices()
{
- $user = $this->user;
-
- if (is_null($user)) {
- return null;
- }
-
- $notice = $user->getNotices(0, ($limit == 0) ? NOTICES_PER_PAGE : $limit);
+ $notice = $this->user->getNotices(
+ 0,
+ ($limit == 0) ? NOTICES_PER_PAGE : $limit
+ );
$notices = array();
while ($notice->fetch()) {
diff --git a/classes/Avatar.php b/classes/Avatar.php
index 91bde0f04..dbe2cd813 100644
--- a/classes/Avatar.php
+++ b/classes/Avatar.php
@@ -82,9 +82,20 @@ class Avatar extends Memcached_DataObject
$server = common_config('site', 'server');
}
- // XXX: protocol
+ $ssl = common_config('avatar', 'ssl');
+
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('avatar', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
- return 'http://'.$server.$path.$filename;
+ return $protocol.'://'.$server.$path.$filename;
}
function displayUrl()
diff --git a/classes/Consumer.php b/classes/Consumer.php
index ad64a8491..ce399f278 100644
--- a/classes/Consumer.php
+++ b/classes/Consumer.php
@@ -36,4 +36,34 @@ class Consumer extends Memcached_DataObject
return $cons;
}
+ /**
+ * Delete a Consumer and related tokens and nonces
+ *
+ * XXX: Should this happen in an OAuthDataStore instead?
+ *
+ */
+ function delete()
+ {
+ // XXX: Is there any reason NOT to do this kind of cleanup?
+
+ $this->_deleteTokens();
+ $this->_deleteNonces();
+
+ parent::delete();
+ }
+
+ function _deleteTokens()
+ {
+ $token = new Token();
+ $token->consumer_key = $this->consumer_key;
+ $token->delete();
+ }
+
+ function _deleteNonces()
+ {
+ $nonce = new Nonce();
+ $nonce->consumer_key = $this->consumer_key;
+ $nonce->delete();
+ }
+
}
diff --git a/classes/Conversation.php b/classes/Conversation.php
new file mode 100755
index 000000000..ea8bd87b5
--- /dev/null
+++ b/classes/Conversation.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Data class for Conversations
+ *
+ * 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 Data
+ * @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/
+ */
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+class Conversation extends Memcached_DataObject
+{
+ ###START_AUTOCODE
+ /* the code below is auto generated do not remove the above tag */
+
+ public $__table = 'conversation'; // table name
+ public $id; // int(4) primary_key not_null
+ public $uri; // varchar(225) unique_key
+ public $created; // datetime not_null
+ public $modified; // timestamp not_null default_CURRENT_TIMESTAMP
+
+ /* Static get */
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('conversation',$k,$v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+
+ /**
+ * Factory method for creating a new conversation
+ *
+ * @return Conversation the new conversation DO
+ */
+ static function create()
+ {
+ $conv = new Conversation();
+ $conv->created = common_sql_now();
+ $id = $conv->insert();
+
+ if (empty($id)) {
+ common_log_db_error($conv, 'INSERT', __FILE__);
+ return null;
+ }
+
+ $orig = clone($conv);
+ $orig->uri = common_local_url('conversation', array('id' => $id));
+ $result = $orig->update($conv);
+
+ if (empty($result)) {
+ common_log_db_error($conv, 'UPDATE', __FILE__);
+ return null;
+ }
+
+ return $conv;
+ }
+
+}
+
diff --git a/classes/Design.php b/classes/Design.php
index 4e7d7dfb2..ff44e0109 100644
--- a/classes/Design.php
+++ b/classes/Design.php
@@ -155,9 +155,20 @@ class Design extends Memcached_DataObject
$server = common_config('site', 'server');
}
- // XXX: protocol
+ $ssl = common_config('background', 'ssl');
+
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('background', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
- return 'http://'.$server.$path.$filename;
+ return $protocol.'://'.$server.$path.$filename;
}
function setDisposition($on, $off, $tile)
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 34e4632a8..4ecd3b959 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -169,15 +169,33 @@ 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));
return "$nickname-$datestamp-$random.$ext";
}
+ /**
+ * Validation for as-saved base filenames
+ */
+ static function validFilename($filename)
+ {
+ return preg_match('/^[A-Za-z0-9._-]+$/', $filename);
+ }
+
+ /**
+ * @throws ClientException on invalid filename
+ */
static function path($filename)
{
+ if (!self::validFilename($filename)) {
+ throw new ClientException("Invalid filename");
+ }
$dir = common_config('attachments', 'dir');
if ($dir[strlen($dir)-1] != '/') {
@@ -189,6 +207,9 @@ class File extends Memcached_DataObject
static function url($filename)
{
+ if (!self::validFilename($filename)) {
+ throw new ClientException("Invalid filename");
+ }
if(common_config('site','private')) {
return common_local_url('getfile',
@@ -211,9 +232,20 @@ class File extends Memcached_DataObject
$server = common_config('site', 'server');
}
- // XXX: protocol
+ $ssl = common_config('attachments', 'ssl');
+
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('attachments', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
- return 'http://'.$server.$path.$filename;
+ return $protocol.'://'.$server.$path.$filename;
}
}
@@ -258,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/Foreign_link.php b/classes/Foreign_link.php
index ae8c22fd8..e47b2e309 100644
--- a/classes/Foreign_link.php
+++ b/classes/Foreign_link.php
@@ -113,4 +113,21 @@ class Foreign_link extends Memcached_DataObject
return User::staticGet($this->user_id);
}
+ // Make sure we only ever delete one record at a time
+ function safeDelete()
+ {
+ if (!empty($this->user_id)
+ && !empty($this->foreign_id)
+ && !empty($this->service))
+ {
+ return $this->delete();
+ } else {
+ common_debug(LOG_WARNING,
+ 'Foreign_link::safeDelete() tried to delete a '
+ . 'Foreign_link without a fully specified compound key: '
+ . var_export($this, true));
+ return false;
+ }
+ }
+
}
diff --git a/classes/Group_alias.php b/classes/Group_alias.php
index be3d0a6c6..c5a1895a1 100644
--- a/classes/Group_alias.php
+++ b/classes/Group_alias.php
@@ -34,7 +34,7 @@ class Group_alias extends Memcached_DataObject
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */
- function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Group_alias',$k,$v); }
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Group_alias',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
diff --git a/classes/Inbox.php b/classes/Inbox.php
index 086dba1c9..014ba3d82 100644
--- a/classes/Inbox.php
+++ b/classes/Inbox.php
@@ -32,6 +32,7 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Inbox extends Memcached_DataObject
{
const BOXCAR = 128;
+ const MAX_NOTICES = 1024;
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -81,7 +82,7 @@ class Inbox extends Memcached_DataObject
$ni->selectAdd();
$ni->selectAdd('notice_id');
$ni->orderBy('notice_id DESC');
- $ni->limit(0, 1024);
+ $ni->limit(0, self::MAX_NOTICES);
if ($ni->find()) {
while($ni->fetch()) {
@@ -115,16 +116,14 @@ class Inbox extends Memcached_DataObject
$result = $inbox->query(sprintf('UPDATE inbox '.
'set notice_ids = concat(cast(0x%08x as binary(4)), '.
- 'substr(notice_ids, 1, 4092)) '.
+ 'substr(notice_ids, 1, %d)) '.
'WHERE user_id = %d',
- $notice_id, $user_id));
+ $notice_id,
+ 4 * (self::MAX_NOTICES - 1),
+ $user_id));
if ($result) {
- $c = self::memcache();
-
- if (!empty($c)) {
- $c->delete(self::cacheKey('inbox', 'user_id', $user_id));
- }
+ self::blow('inbox:user_id:%d', $user_id);
}
return $result;
@@ -138,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);
@@ -177,4 +176,57 @@ class Inbox extends Memcached_DataObject
return $ids;
}
+
+ /**
+ * Wrapper for Inbox::stream() and Notice::getStreamByIds() returning
+ * additional items up to the limit if we were short due to deleted
+ * notices still being listed in the inbox.
+ *
+ * The fast path (when no items are deleted) should be just as fast; the
+ * offset parameter is applied *before* lookups for maximum efficiency.
+ *
+ * This means offset-based paging may show duplicates, but similar behavior
+ * already exists when new notices are posted between page views, so we
+ * think people will be ok with this until id-based paging is introduced
+ * to the user interface.
+ *
+ * @param int $user_id
+ * @param int $offset skip past the most recent N notices (after since_id checks)
+ * @param int $limit
+ * @param mixed $since_id return only notices after but not including this id
+ * @param mixed $max_id return only notices up to and including this id
+ * @param mixed $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, $own=false)
+ {
+ $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.
+ $firstChunk = array_slice($ids, 0, $limit);
+ $notices = Notice::getStreamByIds($firstChunk);
+
+ $wanted = count($firstChunk); // raw entry count in the inbox up to our $limit
+ if ($notices->N >= $wanted) {
+ return $notices;
+ }
+
+ // There were deleted notices, we'll need to look for more.
+ assert($notices instanceof ArrayWrapper);
+ $items = $notices->_items;
+ $remainder = array_slice($ids, $limit);
+
+ while (count($items) < $wanted && count($remainder) > 0) {
+ $notice = Notice::staticGet(array_shift($remainder));
+ if ($notice) {
+ $items[] = $notice;
+ } else {
+ }
+ }
+ return new ArrayWrapper($items);
+ }
}
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 33645a3e8..bc4c3a000 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -19,59 +19,9 @@
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-class Memcached_DataObject extends DB_DataObject
+class Memcached_DataObject extends Safe_DataObject
{
/**
- * Destructor to free global memory resources associated with
- * this data object when it's unset or goes out of scope.
- * DB_DataObject doesn't do this yet by itself.
- */
-
- function __destruct()
- {
- $this->free();
- if (method_exists('DB_DataObject', '__destruct')) {
- parent::__destruct();
- }
- }
-
- /**
- * Magic function called at serialize() time.
- *
- * We use this to drop a couple process-specific references
- * from DB_DataObject which can cause trouble in future
- * processes.
- *
- * @return array of variable names to include in serialization.
- */
- function __sleep()
- {
- $vars = array_keys(get_object_vars($this));
- $skip = array('_DB_resultid', '_link_loaded');
- return array_diff($vars, $skip);
- }
-
- /**
- * Magic function called at unserialize() time.
- *
- * Clean out some process-specific variables which might
- * be floating around from a previous process's cached
- * objects.
- *
- * Old cached objects may still have them.
- */
- function __wakeup()
- {
- // Refers to global state info from a previous process.
- // Clear this out so we don't accidentally break global
- // state in *this* process.
- $this->_DB_resultid = null;
-
- // We don't have any local DBO refs, so clear these out.
- $this->_link_loaded = false;
- }
-
- /**
* Wrapper for DB_DataObject's static lookup using memcached
* as backing instead of an in-process cache array.
*
@@ -91,9 +41,7 @@ class Memcached_DataObject extends DB_DataObject
unset($i);
}
$i = Memcached_DataObject::getcached($cls, $k, $v);
- if ($i) {
- return $i;
- } else {
+ if ($i === false) { // false == cache miss
$i = DB_DataObject::factory($cls);
if (empty($i)) {
$i = false;
@@ -101,22 +49,34 @@ class Memcached_DataObject extends DB_DataObject
}
$result = $i->get($k, $v);
if ($result) {
+ // Hit!
$i->encache();
- return $i;
} else {
+ // save the fact that no such row exists
+ $c = self::memcache();
+ if (!empty($c)) {
+ $ck = self::cachekey($cls, $k, $v);
+ $c->set($ck, null);
+ }
$i = false;
- return $i;
}
}
+ return $i;
}
- function &pkeyGet($cls, $kv)
+ /**
+ * @fixme Should this return false on lookup fail to match staticGet?
+ */
+ function pkeyGet($cls, $kv)
{
$i = Memcached_DataObject::multicache($cls, $kv);
- if ($i) {
+ if ($i !== false) { // false == cache miss
return $i;
} else {
- $i = new $cls();
+ $i = DB_DataObject::factory($cls);
+ if (empty($i)) {
+ return false;
+ }
foreach ($kv as $k => $v) {
$i->$k = $v;
}
@@ -124,6 +84,11 @@ class Memcached_DataObject extends DB_DataObject
$i->encache();
} else {
$i = null;
+ $c = self::memcache();
+ if (!empty($c)) {
+ $ck = self::multicacheKey($cls, $kv);
+ $c->set($ck, null);
+ }
}
return $i;
}
@@ -132,6 +97,10 @@ class Memcached_DataObject extends DB_DataObject
function insert()
{
$result = parent::insert();
+ if ($result) {
+ $this->fixupTimestamps();
+ $this->encache(); // in case of cached negative lookups
+ }
return $result;
}
@@ -142,6 +111,7 @@ class Memcached_DataObject extends DB_DataObject
}
$result = parent::update($orig);
if ($result) {
+ $this->fixupTimestamps();
$this->encache();
}
return $result;
@@ -186,6 +156,17 @@ class Memcached_DataObject extends DB_DataObject
function keyTypes()
{
+ // ini-based classes return number-indexed arrays. handbuilt
+ // classes return column => keytype. Make this uniform.
+
+ $keys = $this->keys();
+
+ $keyskeys = array_keys($keys);
+
+ if (is_string($keyskeys[0])) {
+ return $keys;
+ }
+
global $_DB_DATAOBJECT;
if (!isset($_DB_DATAOBJECT['INI'][$this->_database][$this->__table."__keys"])) {
$this->databaseStructure();
@@ -197,6 +178,7 @@ class Memcached_DataObject extends DB_DataObject
function encache()
{
$c = $this->memcache();
+
if (!$c) {
return false;
} else if ($this->tableName() == 'user' && is_object($this->id)) {
@@ -206,64 +188,86 @@ class Memcached_DataObject extends DB_DataObject
str_replace("\n", " ", $e->getTraceAsString()));
return false;
} else {
- $pkey = array();
- $pval = array();
- $types = $this->keyTypes();
- ksort($types);
- foreach ($types as $key => $type) {
- if ($type == 'K') {
- $pkey[] = $key;
- $pval[] = $this->$key;
- } else {
- $c->set($this->cacheKey($this->tableName(), $key, $this->$key), $this);
- }
- }
- # XXX: should work for both compound and scalar pkeys
- $pvals = implode(',', $pval);
- $pkeys = implode(',', $pkey);
- $c->set($this->cacheKey($this->tableName(), $pkeys, $pvals), $this);
+ $keys = $this->_allCacheKeys();
+
+ foreach ($keys as $key) {
+ $c->set($key, $this);
+ }
}
}
function decache()
{
$c = $this->memcache();
+
if (!$c) {
return false;
- } else {
- $pkey = array();
- $pval = array();
- $types = $this->keyTypes();
- ksort($types);
- foreach ($types as $key => $type) {
- if ($type == 'K') {
- $pkey[] = $key;
- $pval[] = $this->$key;
- } else {
- $c->delete($this->cacheKey($this->tableName(), $key, $this->$key));
+ }
+
+ $keys = $this->_allCacheKeys();
+
+ foreach ($keys as $key) {
+ $c->delete($key, $this);
+ }
+ }
+
+ function _allCacheKeys()
+ {
+ $ckeys = array();
+
+ $types = $this->keyTypes();
+ ksort($types);
+
+ $pkey = array();
+ $pval = array();
+
+ foreach ($types as $key => $type) {
+
+ assert(!empty($key));
+
+ if ($type == 'U') {
+ if (empty($this->$key)) {
+ continue;
}
+ $ckeys[] = $this->cacheKey($this->tableName(), $key, $this->$key);
+ } else if ($type == 'K' || $type == 'N') {
+ $pkey[] = $key;
+ $pval[] = $this->$key;
+ } else {
+ throw new Exception("Unknown key type $key => $type for " . $this->tableName());
}
- # should work for both compound and scalar pkeys
- # XXX: comma works for now but may not be safe separator for future keys
- $pvals = implode(',', $pval);
- $pkeys = implode(',', $pkey);
- $c->delete($this->cacheKey($this->tableName(), $pkeys, $pvals));
}
+
+ assert(count($pkey) > 0);
+
+ // XXX: should work for both compound and scalar pkeys
+ $pvals = implode(',', $pval);
+ $pkeys = implode(',', $pkey);
+
+ $ckeys[] = $this->cacheKey($this->tableName(), $pkeys, $pvals);
+
+ return $ckeys;
}
function multicache($cls, $kv)
{
ksort($kv);
- $c = Memcached_DataObject::memcache();
+ $c = self::memcache();
if (!$c) {
return false;
} else {
- $pkeys = implode(',', array_keys($kv));
- $pvals = implode(',', array_values($kv));
- return $c->get(Memcached_DataObject::cacheKey($cls, $pkeys, $pvals));
+ return $c->get(self::multicacheKey($cls, $kv));
}
}
+ static function multicacheKey($cls, $kv)
+ {
+ ksort($kv);
+ $pkeys = implode(',', array_keys($kv));
+ $pvals = implode(',', array_values($kv));
+ return self::cacheKey($cls, $pkeys, $pvals);
+ }
+
function getSearchEngine($table)
{
require_once INSTALLDIR.'/lib/search_engines.php';
@@ -298,7 +302,8 @@ class Memcached_DataObject extends DB_DataObject
$key_part = common_keyize($cls).':'.md5($qry);
$ckey = common_cache_key($key_part);
$stored = $c->get($ckey);
- if ($stored) {
+
+ if ($stored !== false) {
return new ArrayWrapper($stored);
}
@@ -309,12 +314,12 @@ class Memcached_DataObject extends DB_DataObject
$cached[] = clone($inst);
}
$inst->free();
- $c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry);
+ $c->set($ckey, $cached, Cache::COMPRESSED, $expiry);
return new ArrayWrapper($cached);
}
/**
- * sends query to database - this is the private one that must work
+ * sends query to database - this is the private one that must work
* - internal functions use this rather than $this->query()
*
* Overridden to do logging.
@@ -376,7 +381,7 @@ class Memcached_DataObject extends DB_DataObject
//
// WARNING WARNING if we end up actually using multiple DBs at a time
// we'll need some fancier logic here.
- if (!$exists && !empty($_DB_DATAOBJECT['CONNECTIONS'])) {
+ if (!$exists && !empty($_DB_DATAOBJECT['CONNECTIONS']) && php_sapi_name() == 'cli') {
foreach ($_DB_DATAOBJECT['CONNECTIONS'] as $index => $conn) {
if (!empty($conn)) {
$conn->disconnect();
@@ -458,4 +463,75 @@ class Memcached_DataObject extends DB_DataObject
return $dsn;
}
+
+ static function blow()
+ {
+ $c = self::memcache();
+
+ if (empty($c)) {
+ return false;
+ }
+
+ $args = func_get_args();
+
+ $format = array_shift($args);
+
+ $keyPart = vsprintf($format, $args);
+
+ $cacheKey = common_cache_key($keyPart);
+
+ return $c->delete($cacheKey);
+ }
+
+ function fixupTimestamps()
+ {
+ // Fake up timestamp columns
+ $columns = $this->table();
+ foreach ($columns as $name => $type) {
+ if ($type & DB_DATAOBJECT_MYSQLTIMESTAMP) {
+ $this->$name = common_sql_now();
+ }
+ }
+ }
+
+ function debugDump()
+ {
+ common_debug("debugDump: " . common_log_objstring($this));
+ }
+
+ function raiseError($message, $type = null, $behaviour = null)
+ {
+ $id = get_class($this);
+ if ($this->id) {
+ $id .= ':' . $this->id;
+ }
+ throw new ServerException("[$id] DB_DataObject error [$type]: $message");
+ }
+
+ static function cacheGet($keyPart)
+ {
+ $c = self::memcache();
+
+ if (empty($c)) {
+ return false;
+ }
+
+ $cacheKey = common_cache_key($keyPart);
+
+ return $c->get($cacheKey);
+ }
+
+ static function cacheSet($keyPart, $value)
+ {
+ $c = self::memcache();
+
+ if (empty($c)) {
+ return false;
+ }
+
+ $cacheKey = common_cache_key($keyPart);
+
+ return $c->set($cacheKey, $value);
+ }
}
+
diff --git a/classes/Nonce.php b/classes/Nonce.php
index 486a65a3c..2f8ab00b5 100644
--- a/classes/Nonce.php
+++ b/classes/Nonce.php
@@ -22,4 +22,19 @@ class Nonce extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
+
+ /**
+ * Compatibility hack for PHP 5.3
+ *
+ * The statusnet.links.ini entry cannot be read because "," is no longer
+ * allowed in key names when read by parse_ini_file().
+ *
+ * @return array
+ * @access public
+ */
+ function links()
+ {
+ return array('consumer_key,token' => 'token:consumer_key,token');
+ }
+
}
diff --git a/classes/Notice.php b/classes/Notice.php
index 38b10db04..4c7e6ab4b 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -94,10 +94,6 @@ class Notice extends Memcached_DataObject
function delete()
{
- $this->blowCaches(true);
- $this->blowFavesCache(true);
- $this->blowSubsCache(true);
-
// For auditing purposes, save a record that the notice
// was deleted.
@@ -109,33 +105,25 @@ class Notice extends Memcached_DataObject
$deleted->created = $this->created;
$deleted->deleted = common_sql_now();
- $this->query('BEGIN');
-
$deleted->insert();
- //Null any notices that are replies to this notice
- $this->query(sprintf("UPDATE notice set reply_to = null WHERE reply_to = %d", $this->id));
-
- //Null any notices that are repeats of this notice
- //XXX: probably need to uncache these, too
+ // Clear related records
- $this->query(sprintf("UPDATE notice set repeat_of = null WHERE repeat_of = %d", $this->id));
+ $this->clearReplies();
+ $this->clearRepeats();
+ $this->clearFaves();
+ $this->clearTags();
+ $this->clearGroupInboxes();
- $related = array('Reply',
- 'Fave',
- 'Notice_tag',
- 'Group_inbox',
- 'Queue_item');
+ // NOTE: we don't clear inboxes
+ // NOTE: we don't clear queue items
- foreach ($related as $cls) {
- $inst = new $cls();
- $inst->notice_id = $this->id;
- $inst->delete();
- }
$result = parent::delete();
- $this->query('COMMIT');
}
+ /**
+ * Extract #hashtags from this notice's content and save them to the database.
+ */
function saveTags()
{
/* extract all #hastags */
@@ -144,21 +132,34 @@ 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);
+ self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, $hashtag);
}
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();
@@ -172,6 +173,9 @@ class Notice extends Memcached_DataObject
$last_error->message));
return;
}
+
+ // if it's saved, blow its cache
+ $tag->blowCache(false);
}
/**
@@ -198,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);
@@ -267,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
@@ -294,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
@@ -320,7 +343,8 @@ class Notice extends Memcached_DataObject
// the beginning of a new conversation.
if (empty($notice->conversation)) {
- $notice->conversation = $notice->id;
+ $conv = Conversation::create();
+ $notice->conversation = $conv->id;
$changed = true;
}
@@ -331,29 +355,72 @@ class Notice extends Memcached_DataObject
}
}
- // XXX: do we need to change this for remote users?
+ }
- $notice->saveTags();
+ # Clear the cache for subscribed users, so they'll update at next request
+ # XXX: someone clever could prepend instead of clearing the cache
- $groups = $notice->saveGroups();
+ $notice->blowOnInsert();
- $recipients = $notice->saveReplies();
+ // Save per-notice metadata...
- $notice->addToInboxes($groups, $recipients);
+ if (isset($replies)) {
+ $notice->saveKnownReplies($replies);
+ } else {
+ $notice->saveReplies();
+ }
- $notice->saveUrls();
+ if (isset($groups)) {
+ $notice->saveKnownGroups($groups);
+ } else {
+ $notice->saveGroups();
+ }
- Event::handle('EndNoticeSave', array($notice));
+ if (isset($tags)) {
+ $notice->saveKnownTags($tags);
+ } else {
+ $notice->saveTags();
}
- # Clear the cache for subscribed users, so they'll update at next request
- # XXX: someone clever could prepend instead of clearing the cache
+ if (isset($urls)) {
+ $notice->saveKnownUrls($urls);
+ } else {
+ $notice->saveUrls();
+ }
- $notice->blowCaches();
+ // Prepare inbox delivery, may be queued to background.
+ $notice->distribute();
return $notice;
}
+ function blowOnInsert($conversation = false)
+ {
+ self::blow('profile:notice_ids:%d', $this->profile_id);
+ self::blow('public');
+
+ // XXX: Before we were blowing the casche only if the notice id
+ // was not the root of the conversation. What to do now?
+
+ self::blow('notice:conversation_ids:%d', $this->conversation);
+
+ if (!empty($this->repeat_of)) {
+ self::blow('notice:repeats:%d', $this->repeat_of);
+ }
+
+ $original = Notice::staticGet('id', $this->repeat_of);
+
+ if (!empty($original)) {
+ $originalUser = User::staticGet('id', $original->profile_id);
+ if (!empty($originalUser)) {
+ self::blow('user:repeats_of_me:%d', $originalUser->id);
+ }
+ }
+
+ $profile = Profile::staticGet($this->profile_id);
+ $profile->blowNoticeCount();
+ }
+
/** save all urls in the notice to the db
*
* follow redirects and save all available file information
@@ -365,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);
@@ -456,227 +542,6 @@ class Notice extends Memcached_DataObject
return $att;
}
- function blowCaches($blowLast=false)
- {
- $this->blowSubsCache($blowLast);
- $this->blowNoticeCache($blowLast);
- $this->blowRepliesCache($blowLast);
- $this->blowPublicCache($blowLast);
- $this->blowTagCache($blowLast);
- $this->blowGroupCache($blowLast);
- $this->blowConversationCache($blowLast);
- $this->blowRepeatCache();
- $profile = Profile::staticGet($this->profile_id);
- $profile->blowNoticeCount();
- }
-
- function blowRepeatCache()
- {
- if (!empty($this->repeat_of)) {
- $cache = common_memcache();
- if (!empty($cache)) {
- // XXX: only blow if <100 in cache
- $ck = common_cache_key('notice:repeats:'.$this->repeat_of);
- $result = $cache->delete($ck);
-
- $user = User::staticGet('id', $this->profile_id);
-
- if (!empty($user)) {
- $uk = common_cache_key('user:repeated_by_me:'.$user->id);
- $cache->delete($uk);
- $user->free();
- unset($user);
- }
-
- $original = Notice::staticGet('id', $this->repeat_of);
-
- if (!empty($original)) {
- $originalUser = User::staticGet('id', $original->profile_id);
- if (!empty($originalUser)) {
- $ouk = common_cache_key('user:repeats_of_me:'.$originalUser->id);
- $cache->delete($ouk);
- $originalUser->free();
- unset($originalUser);
- }
- $original->free();
- unset($original);
- }
- }
- }
- }
-
- function blowConversationCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $ck = common_cache_key('notice:conversation_ids:'.$this->conversation);
- $cache->delete($ck);
- if ($blowLast) {
- $cache->delete($ck.';last');
- }
- }
- }
-
- function blowGroupCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $group_inbox = new Group_inbox();
- $group_inbox->notice_id = $this->id;
- if ($group_inbox->find()) {
- while ($group_inbox->fetch()) {
- $cache->delete(common_cache_key('user_group:notice_ids:' . $group_inbox->group_id));
- if ($blowLast) {
- $cache->delete(common_cache_key('user_group:notice_ids:' . $group_inbox->group_id.';last'));
- }
- $member = new Group_member();
- $member->group_id = $group_inbox->group_id;
- if ($member->find()) {
- while ($member->fetch()) {
- $cache->delete(common_cache_key('notice_inbox:by_user:' . $member->profile_id));
- $cache->delete(common_cache_key('notice_inbox:by_user_own:' . $member->profile_id));
- if (empty($this->repeat_of)) {
- $cache->delete(common_cache_key('user:friends_timeline:' . $member->profile_id));
- $cache->delete(common_cache_key('user:friends_timeline_own:' . $member->profile_id));
- }
- if ($blowLast) {
- $cache->delete(common_cache_key('notice_inbox:by_user:' . $member->profile_id . ';last'));
- $cache->delete(common_cache_key('notice_inbox:by_user_own:' . $member->profile_id . ';last'));
- if (empty($this->repeat_of)) {
- $cache->delete(common_cache_key('user:friends_timeline:' . $member->profile_id . ';last'));
- $cache->delete(common_cache_key('user:friends_timeline_own:' . $member->profile_id . ';last'));
- }
- }
- }
- }
- }
- }
- $group_inbox->free();
- unset($group_inbox);
- }
- }
-
- function blowTagCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $tag = new Notice_tag();
- $tag->notice_id = $this->id;
- if ($tag->find()) {
- while ($tag->fetch()) {
- $tag->blowCache($blowLast);
- $ck = 'profile:notice_ids_tagged:' . $this->profile_id . ':' . $tag->tag;
-
- $cache->delete($ck);
- if ($blowLast) {
- $cache->delete($ck . ';last');
- }
- }
- }
- $tag->free();
- unset($tag);
- }
- }
-
- function blowSubsCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $user = new User();
-
- $UT = common_config('db','type')=='pgsql'?'"user"':'user';
- $user->query('SELECT id ' .
-
- "FROM $UT JOIN subscription ON $UT.id = subscription.subscriber " .
- 'WHERE subscription.subscribed = ' . $this->profile_id);
-
- while ($user->fetch()) {
- $cache->delete(common_cache_key('notice_inbox:by_user:'.$user->id));
- $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$user->id));
- if (empty($this->repeat_of)) {
- $cache->delete(common_cache_key('user:friends_timeline:'.$user->id));
- $cache->delete(common_cache_key('user:friends_timeline_own:'.$user->id));
- }
- if ($blowLast) {
- $cache->delete(common_cache_key('notice_inbox:by_user:'.$user->id.';last'));
- $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$user->id.';last'));
- if (empty($this->repeat_of)) {
- $cache->delete(common_cache_key('user:friends_timeline:'.$user->id.';last'));
- $cache->delete(common_cache_key('user:friends_timeline_own:'.$user->id.';last'));
- }
- }
- }
- $user->free();
- unset($user);
- }
- }
-
- function blowNoticeCache($blowLast=false)
- {
- if ($this->is_local) {
- $cache = common_memcache();
- if (!empty($cache)) {
- $cache->delete(common_cache_key('profile:notice_ids:'.$this->profile_id));
- if ($blowLast) {
- $cache->delete(common_cache_key('profile:notice_ids:'.$this->profile_id.';last'));
- }
- }
- }
- }
-
- function blowRepliesCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $reply = new Reply();
- $reply->notice_id = $this->id;
- if ($reply->find()) {
- while ($reply->fetch()) {
- $cache->delete(common_cache_key('reply:stream:'.$reply->profile_id));
- if ($blowLast) {
- $cache->delete(common_cache_key('reply:stream:'.$reply->profile_id.';last'));
- }
- }
- }
- $reply->free();
- unset($reply);
- }
- }
-
- function blowPublicCache($blowLast=false)
- {
- if ($this->is_local == Notice::LOCAL_PUBLIC) {
- $cache = common_memcache();
- if ($cache) {
- $cache->delete(common_cache_key('public'));
- if ($blowLast) {
- $cache->delete(common_cache_key('public').';last');
- }
- }
- }
- }
-
- function blowFavesCache($blowLast=false)
- {
- $cache = common_memcache();
- if ($cache) {
- $fave = new Fave();
- $fave->notice_id = $this->id;
- if ($fave->find()) {
- while ($fave->fetch()) {
- $cache->delete(common_cache_key('fave:ids_by_user:'.$fave->user_id));
- $cache->delete(common_cache_key('fave:by_user_own:'.$fave->user_id));
- if ($blowLast) {
- $cache->delete(common_cache_key('fave:ids_by_user:'.$fave->user_id.';last'));
- $cache->delete(common_cache_key('fave:by_user_own:'.$fave->user_id.';last'));
- }
- }
- }
- $fave->free();
- unset($fave);
- }
- }
-
function getStreamByIds($ids)
{
$cache = common_memcache();
@@ -718,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();
@@ -757,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()) {
@@ -775,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();
@@ -808,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()) {
@@ -893,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;
}
@@ -930,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()
@@ -956,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;
@@ -999,15 +920,65 @@ class Notice extends Memcached_DataObject
$gi->notice_id = $this->id;
$gi->created = $this->created;
- return $gi->insert();
+ $result = $gi->insert();
+
+ if (!$result) {
+ common_log_db_error($gi, 'INSERT', __FILE__);
+ throw new ServerException(_('Problem saving group inbox.'));
+ }
+
+ self::blow('user_group:notice_ids:%d', $gi->group_id);
}
return true;
}
/**
+ * 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
@@ -1016,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;
}
}
}
@@ -1094,7 +1036,8 @@ class Notice extends Memcached_DataObject
foreach ($recipientIds as $recipientId) {
$user = User::staticGet('id', $recipientId);
- if ($user) {
+ if (!empty($user)) {
+ self::blow('reply:stream:%d', $reply->profile_id);
mail_notify_attn($user, $this);
}
}
@@ -1125,8 +1068,9 @@ class Notice extends Memcached_DataObject
}
/**
- * Same calculation as saveGroups but without the saving
- * @fixme merge the functions
+ * 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()
@@ -1150,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;
+ }
}
}
@@ -1159,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();
@@ -1167,7 +1114,12 @@ class Notice extends Memcached_DataObject
if ($namespace) {
$attrs = array('xmlns' => 'http://www.w3.org/2005/Atom',
- 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0');
+ 'xmlns:thr' => 'http://purl.org/syndication/thread/1.0',
+ 'xmlns:georss' => 'http://www.georss.org/georss',
+ 'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
+ 'xmlns: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();
}
@@ -1193,19 +1145,19 @@ class Notice extends Memcached_DataObject
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
}
- $xs->elementStart('author');
- $xs->element('name', null, $profile->nickname);
- $xs->element('uri', null, $profile->profileurl);
- $xs->elementEnd('author');
-
if ($source) {
$xs->elementEnd('source');
}
$xs->element('title', null, $this->content);
- $xs->element('summary', null, $this->content);
+
+ 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);
@@ -1224,6 +1176,55 @@ class Notice extends Memcached_DataObject
}
}
+ if (!empty($this->conversation)) {
+
+ $conv = Conversation::staticGet('id', $this->conversation);
+
+ if (!empty($conv)) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'ostatus:conversation',
+ 'href' => $conv->uri
+ )
+ );
+ }
+ }
+
+ $reply_ids = $this->getReplies();
+
+ foreach ($reply_ids as $id) {
+ $profile = Profile::staticGet('id', $id);
+ if (!empty($profile)) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'ostatus:attention',
+ 'href' => $profile->getUri()
+ )
+ );
+ }
+ }
+
+ $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)) {
+ $xs->element(
+ 'ostatus:forward',
+ array('ref' => $repeat->uri, 'href' => $repeat->bestUrl())
+ );
+ }
+ }
+
$xs->element('content', array('type' => 'html'), $this->rendered);
$tag = new Notice_tag();
@@ -1251,9 +1252,7 @@ class Notice extends Memcached_DataObject
}
if (!empty($this->lat) && !empty($this->lon)) {
- $xs->elementStart('geo', array('xmlns:georss' => 'http://www.georss.org/georss'));
$xs->element('georss:point', null, $this->lat . ' ' . $this->lon);
- $xs->elementEnd('geo');
}
$xs->elementEnd('entry');
@@ -1261,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)) {
@@ -1273,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);
@@ -1386,6 +1400,10 @@ class Notice extends Memcached_DataObject
// Figure out who that is.
$sender = Profile::staticGet('id', $profile_id);
+ if (empty($sender)) {
+ return null;
+ }
+
$recipient = common_relative_profile($sender, $nickname, common_sql_now());
if (empty($recipient)) {
@@ -1553,4 +1571,158 @@ class Notice extends Memcached_DataObject
return $options;
}
+
+ function clearReplies()
+ {
+ $replyNotice = new Notice();
+ $replyNotice->reply_to = $this->id;
+
+ //Null any notices that are replies to this notice
+
+ if ($replyNotice->find()) {
+ while ($replyNotice->fetch()) {
+ $orig = clone($replyNotice);
+ $replyNotice->reply_to = null;
+ $replyNotice->update($orig);
+ }
+ }
+
+ // Reply records
+
+ $reply = new Reply();
+ $reply->notice_id = $this->id;
+
+ if ($reply->find()) {
+ while($reply->fetch()) {
+ self::blow('reply:stream:%d', $reply->profile_id);
+ $reply->delete();
+ }
+ }
+
+ $reply->free();
+ }
+
+ function clearRepeats()
+ {
+ $repeatNotice = new Notice();
+ $repeatNotice->repeat_of = $this->id;
+
+ //Null any notices that are repeats of this notice
+
+ if ($repeatNotice->find()) {
+ while ($repeatNotice->fetch()) {
+ $orig = clone($repeatNotice);
+ $repeatNotice->repeat_of = null;
+ $repeatNotice->update($orig);
+ }
+ }
+ }
+
+ function clearFaves()
+ {
+ $fave = new Fave();
+ $fave->notice_id = $this->id;
+
+ if ($fave->find()) {
+ while ($fave->fetch()) {
+ self::blow('fave:ids_by_user_own:%d', $fave->user_id);
+ self::blow('fave:ids_by_user_own:%d;last', $fave->user_id);
+ self::blow('fave:ids_by_user:%d', $fave->user_id);
+ self::blow('fave:ids_by_user:%d;last', $fave->user_id);
+ $fave->delete();
+ }
+ }
+
+ $fave->free();
+ }
+
+ function clearTags()
+ {
+ $tag = new Notice_tag();
+ $tag->notice_id = $this->id;
+
+ if ($tag->find()) {
+ while ($tag->fetch()) {
+ self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, common_keyize($tag->tag));
+ self::blow('profile:notice_ids_tagged:%d:%s;last', $this->profile_id, common_keyize($tag->tag));
+ self::blow('notice_tag:notice_ids:%s', common_keyize($tag->tag));
+ self::blow('notice_tag:notice_ids:%s;last', common_keyize($tag->tag));
+ $tag->delete();
+ }
+ }
+
+ $tag->free();
+ }
+
+ function clearGroupInboxes()
+ {
+ $gi = new Group_inbox();
+
+ $gi->notice_id = $this->id;
+
+ if ($gi->find()) {
+ while ($gi->fetch()) {
+ self::blow('user_group:notice_ids:%d', $gi->group_id);
+ $gi->delete();
+ }
+ }
+
+ $gi->free();
+ }
+
+ 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.
+ try {
+ $qm = QueueManager::get();
+ $qm->enqueue($this, 'distrib');
+ } catch (Exception $e) {
+ // If the exception isn't transient, this
+ // may throw more exceptions as DQH does
+ // its own enqueueing. So, we ignore them!
+ try {
+ $handler = new DistribQueueHandler();
+ $handler->handle($this);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "emergency redistribution resulted in " . $e->getMessage());
+ }
+ // Re-throw so somebody smarter can handle it.
+ throw $e;
+ }
+ } else {
+ $handler = new DistribQueueHandler();
+ $handler->handle($this);
+ }
+ }
+
+ function insert()
+ {
+ $result = parent::insert();
+
+ if ($result) {
+ // Profile::hasRepeated() abuses pkeyGet(), so we
+ // have to clear manually
+ if (!empty($this->repeat_of)) {
+ $c = self::memcache();
+ if (!empty($c)) {
+ $ck = self::multicacheKey('Notice',
+ array('profile_id' => $this->profile_id,
+ 'repeat_of' => $this->repeat_of));
+ $c->delete($ck);
+ }
+ }
+ }
+
+ return $result;
+ }
}
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 79231f0b0..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)) {
@@ -86,13 +82,9 @@ class Notice_tag extends Memcached_DataObject
function blowCache($blowLast=false)
{
- $cache = common_memcache();
- if ($cache) {
- $idkey = common_cache_key('notice_tag:notice_ids:' . common_keyize($this->tag));
- $cache->delete($idkey);
- if ($blowLast) {
- $cache->delete($idkey.';last');
- }
+ self::blow('notice_tag:notice_ids:%s', common_keyize($this->tag));
+ if ($blowLast) {
+ self::blow('notice_tag:notice_ids:%s;last', common_keyize($this->tag));
}
}
diff --git a/classes/Oauth_application.php b/classes/Oauth_application.php
index a6b539087..748b64220 100644
--- a/classes/Oauth_application.php
+++ b/classes/Oauth_application.php
@@ -137,4 +137,21 @@ class Oauth_application extends Memcached_DataObject
}
}
+ function delete()
+ {
+ $this->_deleteAppUsers();
+
+ $consumer = $this->getConsumer();
+ $consumer->delete();
+
+ parent::delete();
+ }
+
+ function _deleteAppUsers()
+ {
+ $oauser = new Oauth_application_user();
+ $oauser->application_id = $this->id;
+ $oauser->delete();
+ }
+
}
diff --git a/classes/Profile.php b/classes/Profile.php
index 1076fb2cb..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);
@@ -716,6 +734,7 @@ class Profile extends Memcached_DataObject
switch ($right)
{
case Right::DELETEOTHERSNOTICE:
+ case Right::MAKEGROUPADMIN:
case Right::SANDBOXUSER:
case Right::SILENCEUSER:
case Right::DELETEUSER:
@@ -724,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:
@@ -753,4 +776,97 @@ class Profile extends Memcached_DataObject
return !empty($notice);
}
+
+ /**
+ * Returns an XML string fragment with limited profile information
+ * as an Atom <author> element.
+ *
+ * Assumes that Atom has been previously set up as the base namespace.
+ *
+ * @return string
+ */
+ function asAtomAuthor()
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+ $xs->element('name', null, $this->nickname);
+ $xs->element('uri', null, $this->getUri());
+ $xs->elementEnd('author');
+
+ return $xs->getString();
+ }
+
+ /**
+ * Returns an XML string fragment with profile information as an
+ * Activity Streams <activity:actor> element.
+ *
+ * Assumes that 'activity' namespace has been previously defined.
+ *
+ * @return string
+ */
+ function asActivityActor()
+ {
+ return $this->asActivityNoun('actor');
+ }
+
+ /**
+ * Returns an XML string fragment with profile information as an
+ * Activity Streams noun object with the given element type.
+ *
+ * Assumes that 'activity', 'georss', and 'poco' namespace has been
+ * previously defined.
+ *
+ * @param string $element one of 'actor', 'subject', 'object', 'target'
+ *
+ * @return string
+ */
+ function asActivityNoun($element)
+ {
+ $noun = ActivityObject::fromProfile($this);
+ return $noun->asString('activity:' . $element);
+ }
+
+ /**
+ * Returns the best URI for a profile. Plugins may override.
+ *
+ * @return string $uri
+ */
+ function getUri()
+ {
+ $uri = null;
+
+ // 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));
+ }
+
+ 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 74aca3730..d0a0b31f0 100644
--- a/classes/Profile_role.php
+++ b/classes/Profile_role.php
@@ -48,8 +48,26 @@ class Profile_role extends Memcached_DataObject
return Memcached_DataObject::pkeyGet('Profile_role', $kv);
}
+ const OWNER = 'owner';
const MODERATOR = 'moderator';
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/Safe_DataObject.php b/classes/Safe_DataObject.php
new file mode 100644
index 000000000..021f7b506
--- /dev/null
+++ b/classes/Safe_DataObject.php
@@ -0,0 +1,250 @@
+<?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/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+/**
+ * Extended DB_DataObject to improve a few things:
+ * - free global resources from destructor
+ * - remove bogus global references from serialized objects
+ * - don't leak memory when loading already-used .ini files
+ * (eg when using the same schema on thousands of databases)
+ */
+class Safe_DataObject extends DB_DataObject
+{
+ /**
+ * Destructor to free global memory resources associated with
+ * this data object when it's unset or goes out of scope.
+ * DB_DataObject doesn't do this yet by itself.
+ */
+
+ function __destruct()
+ {
+ $this->free();
+ if (method_exists('DB_DataObject', '__destruct')) {
+ parent::__destruct();
+ }
+ }
+
+ /**
+ * Magic function called at serialize() time.
+ *
+ * We use this to drop a couple process-specific references
+ * from DB_DataObject which can cause trouble in future
+ * processes.
+ *
+ * @return array of variable names to include in serialization.
+ */
+ function __sleep()
+ {
+ $vars = array_keys(get_object_vars($this));
+ $skip = array('_DB_resultid', '_link_loaded');
+ return array_diff($vars, $skip);
+ }
+
+ /**
+ * Magic function called at unserialize() time.
+ *
+ * Clean out some process-specific variables which might
+ * be floating around from a previous process's cached
+ * objects.
+ *
+ * Old cached objects may still have them.
+ */
+ function __wakeup()
+ {
+ // Refers to global state info from a previous process.
+ // Clear this out so we don't accidentally break global
+ // state in *this* process.
+ $this->_DB_resultid = null;
+ // We don't have any local DBO refs, so clear these out.
+ $this->_link_loaded = false;
+ }
+
+
+ /**
+ * Work around memory-leak bugs...
+ * Had to copy-paste the whole function in order to patch a couple lines of it.
+ * Would be nice if this code was better factored.
+ *
+ * @param optional string name of database to assign / read
+ * @param optional array structure of database, and keys
+ * @param optional array table links
+ *
+ * @access public
+ * @return true or PEAR:error on wrong paramenters.. or false if no file exists..
+ * or the array(tablename => array(column_name=>type)) if called with 1 argument.. (databasename)
+ */
+ function databaseStructure()
+ {
+
+ global $_DB_DATAOBJECT;
+
+ // Assignment code
+
+ if ($args = func_get_args()) {
+
+ if (count($args) == 1) {
+
+ // this returns all the tables and their structure..
+ if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
+ $this->debug("Loading Generator as databaseStructure called with args",1);
+ }
+
+ $x = new DB_DataObject;
+ $x->_database = $args[0];
+ $this->_connect();
+ $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
+
+ $tables = $DB->getListOf('tables');
+ class_exists('DB_DataObject_Generator') ? '' :
+ require_once 'DB/DataObject/Generator.php';
+
+ foreach($tables as $table) {
+ $y = new DB_DataObject_Generator;
+ $y->fillTableSchema($x->_database,$table);
+ }
+ return $_DB_DATAOBJECT['INI'][$x->_database];
+ } else {
+
+ $_DB_DATAOBJECT['INI'][$args[0]] = isset($_DB_DATAOBJECT['INI'][$args[0]]) ?
+ $_DB_DATAOBJECT['INI'][$args[0]] + $args[1] : $args[1];
+
+ if (isset($args[1])) {
+ $_DB_DATAOBJECT['LINKS'][$args[0]] = isset($_DB_DATAOBJECT['LINKS'][$args[0]]) ?
+ $_DB_DATAOBJECT['LINKS'][$args[0]] + $args[2] : $args[2];
+ }
+ return true;
+ }
+
+ }
+
+
+
+ if (!$this->_database) {
+ $this->_connect();
+ }
+
+ // loaded already?
+ if (!empty($_DB_DATAOBJECT['INI'][$this->_database])) {
+
+ // database loaded - but this is table is not available..
+ if (
+ empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])
+ && !empty($_DB_DATAOBJECT['CONFIG']['proxy'])
+ ) {
+ if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
+ $this->debug("Loading Generator to fetch Schema",1);
+ }
+ class_exists('DB_DataObject_Generator') ? '' :
+ require_once 'DB/DataObject/Generator.php';
+
+
+ $x = new DB_DataObject_Generator;
+ $x->fillTableSchema($this->_database,$this->__table);
+ }
+ return true;
+ }
+
+
+ if (empty($_DB_DATAOBJECT['CONFIG'])) {
+ DB_DataObject::_loadConfig();
+ }
+
+ // if you supply this with arguments, then it will take those
+ // as the database and links array...
+
+ $schemas = isset($_DB_DATAOBJECT['CONFIG']['schema_location']) ?
+ array("{$_DB_DATAOBJECT['CONFIG']['schema_location']}/{$this->_database}.ini") :
+ array() ;
+
+ if (isset($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"])) {
+ $schemas = is_array($_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]) ?
+ $_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"] :
+ explode(PATH_SEPARATOR,$_DB_DATAOBJECT['CONFIG']["ini_{$this->_database}"]);
+ }
+
+
+ /* BEGIN CHANGED FROM UPSTREAM */
+ $_DB_DATAOBJECT['INI'][$this->_database] = $this->parseIniFiles($schemas);
+ /* END CHANGED FROM UPSTREAM */
+
+ // now have we loaded the structure..
+
+ if (!empty($_DB_DATAOBJECT['INI'][$this->_database][$this->__table])) {
+ return true;
+ }
+ // - if not try building it..
+ if (!empty($_DB_DATAOBJECT['CONFIG']['proxy'])) {
+ class_exists('DB_DataObject_Generator') ? '' :
+ require_once 'DB/DataObject/Generator.php';
+
+ $x = new DB_DataObject_Generator;
+ $x->fillTableSchema($this->_database,$this->__table);
+ // should this fail!!!???
+ return true;
+ }
+ $this->debug("Cant find database schema: {$this->_database}/{$this->__table} \n".
+ "in links file data: " . print_r($_DB_DATAOBJECT['INI'],true),"databaseStructure",5);
+ // we have to die here!! - it causes chaos if we dont (including looping forever!)
+ $this->raiseError( "Unable to load schema for database and table (turn debugging up to 5 for full error message)", DB_DATAOBJECT_ERROR_INVALIDARGS, PEAR_ERROR_DIE);
+ return false;
+ }
+
+ /** For parseIniFiles */
+ protected static $iniCache = array();
+
+ /**
+ * When switching site configurations, DB_DataObject was loading its
+ * .ini files over and over, leaking gobs of memory.
+ * This refactored helper function uses a local cache of .ini files
+ * to minimize the leaks.
+ *
+ * @param array of .ini file names $schemas
+ * @return array
+ */
+ protected function parseIniFiles($schemas)
+ {
+ $key = implode("|", $schemas);
+ if (!isset(Safe_DataObject::$iniCache[$key])) {
+ $data = array();
+ foreach ($schemas as $ini) {
+ if (file_exists($ini) && is_file($ini)) {
+ $data = array_merge($data, parse_ini_file($ini, true));
+
+ if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
+ if (!is_readable ($ini)) {
+ $this->debug("ini file is not readable: $ini","databaseStructure",1);
+ } else {
+ $this->debug("Loaded ini file: $ini","databaseStructure",1);
+ }
+ }
+ } else {
+ if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
+ $this->debug("Missing ini file: $ini","databaseStructure",1);
+ }
+ }
+ }
+ Safe_DataObject::$iniCache[$key] = $data;
+ }
+
+ return Safe_DataObject::$iniCache[$key];
+ }
+}
+
diff --git a/classes/Session.php b/classes/Session.php
index 79a69a96e..2422f8b68 100644
--- a/classes/Session.php
+++ b/classes/Session.php
@@ -64,8 +64,12 @@ class Session extends Memcached_DataObject
$session = Session::staticGet('id', $id);
if (empty($session)) {
+ self::logdeb("Couldn't find '$id'");
return '';
} else {
+ self::logdeb("Found '$id', returning " .
+ strlen($session->session_data) .
+ " chars of data");
return (string)$session->session_data;
}
}
@@ -77,14 +81,24 @@ class Session extends Memcached_DataObject
$session = Session::staticGet('id', $id);
if (empty($session)) {
+ self::logdeb("'$id' doesn't yet exist; inserting.");
$session = new Session();
$session->id = $id;
$session->session_data = $session_data;
$session->created = common_sql_now();
- return $session->insert();
+ $result = $session->insert();
+
+ if (!$result) {
+ common_log_db_error($session, 'INSERT', __FILE__);
+ self::logdeb("Failed to insert '$id'.");
+ } else {
+ self::logdeb("Successfully inserted '$id' (result = $result).");
+ }
+ return $result;
} else {
+ self::logdeb("'$id' already exists; updating.");
if (strcmp($session->session_data, $session_data) == 0) {
self::logdeb("Not writing session '$id'; unchanged");
return true;
@@ -95,7 +109,16 @@ class Session extends Memcached_DataObject
$session->session_data = $session_data;
- return $session->update($orig);
+ $result = $session->update($orig);
+
+ if (!$result) {
+ common_log_db_error($session, 'UPDATE', __FILE__);
+ self::logdeb("Failed to update '$id'.");
+ } else {
+ self::logdeb("Successfully updated '$id' (result = $result).");
+ }
+
+ return $result;
}
}
}
@@ -106,8 +129,17 @@ class Session extends Memcached_DataObject
$session = Session::staticGet('id', $id);
- if (!empty($session)) {
- return $session->delete();
+ if (empty($session)) {
+ self::logdeb("Can't find '$id' to delete.");
+ } else {
+ $result = $session->delete();
+ if (!$result) {
+ common_log_db_error($session, 'DELETE', __FILE__);
+ self::logdeb("Failed to delete '$id'.");
+ } else {
+ self::logdeb("Successfully deleted '$id' (result = $result).");
+ }
+ return $result;
}
}
@@ -132,7 +164,10 @@ class Session extends Memcached_DataObject
$session->free();
+ self::logdeb("Found " . count($ids) . " ids to delete.");
+
foreach ($ids as $id) {
+ self::logdeb("Destroying session '$id'.");
self::destroy($id);
}
}
diff --git a/classes/Status_network.php b/classes/Status_network.php
index ef8e1ed43..a452c32ce 100644
--- a/classes/Status_network.php
+++ b/classes/Status_network.php
@@ -21,7 +21,7 @@
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-class Status_network extends DB_DataObject
+class Status_network extends Safe_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -39,15 +39,27 @@ class Status_network extends DB_DataObject
public $logo; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
+ public $tags; // text
/* Static get */
- function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Status_network',$k,$v); }
+ function staticGet($k,$v=NULL) {
+ $i = DB_DataObject::staticGet('Status_network',$k,$v);
+
+ // Don't use local process cache; if we're fetching multiple
+ // times it's because we're reloading it in a long-running
+ // process; we need a fresh copy!
+ global $_DB_DATAOBJECT;
+ unset($_DB_DATAOBJECT['CACHE']['status_network']);
+ return $i;
+ }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
static $cache = null;
+ static $cacheInitialized = false;
static $base = null;
+ static $wildcard = null;
/**
* @param string $dbhost
@@ -67,11 +79,15 @@ class Status_network extends DB_DataObject
if (class_exists('Memcache')) {
self::$cache = new Memcache();
- // Can't close persistent connections, making forking painful.
+ // If we're a parent command-line process we need
+ // to be able to close out the connection after
+ // forking, so disable persistence.
//
- // @fixme only do this in *parent* CLI processes.
- // single-process and child-processes *should* use persistent.
- $persist = php_sapi_name() != 'cli';
+ // We'll turn it back on again the second time
+ // through which will either be in a child process,
+ // or a single-process script which is switching
+ // configurations.
+ $persist = php_sapi_name() != 'cli' || self::$cacheInitialized;
if (is_array($servers)) {
foreach($servers as $server) {
self::$cache->addServer($server, 11211, $persist);
@@ -79,6 +95,7 @@ class Status_network extends DB_DataObject
} else {
self::$cache->addServer($servers, 11211, $persist);
}
+ self::$cacheInitialized = true;
}
self::$base = $dbname;
@@ -187,7 +204,12 @@ class Status_network extends DB_DataObject
$config['db']['database'] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname";
- $config['site']['name'] = $sn->sitename;
+ $config['site']['name'] = $sn->sitename;
+ $config['site']['nickname'] = $sn->nickname;
+
+ self::$wildcard = $wildcard;
+
+ $config['site']['wildcard'] =& self::$wildcard;
if (!empty($sn->hostname)) {
$config['site']['server'] = $sn->hostname;
@@ -230,4 +252,32 @@ class Status_network extends DB_DataObject
exit;
}
+
+ function getServerName()
+ {
+ if (!empty($this->hostname)) {
+ return $this->hostname;
+ } else {
+ return $this->nickname . '.' . self::$wildcard;
+ }
+ }
+
+ /**
+ * Return site meta-info tags as an array
+ * @return array of strings
+ */
+ function getTags()
+ {
+ return array_filter(explode("|", strval($this->tags)));
+ }
+
+ /**
+ * Check if this site record has a particular meta-info tag attached.
+ * @param string $tag
+ * @return bool
+ */
+ function hasTag($tag)
+ {
+ return in_array($tag, $this->getTags());
+ }
}
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 d6b52be01..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);
}
/**
@@ -209,8 +196,6 @@ class User extends Memcached_DataObject
$profile = new Profile();
- $profile->query('BEGIN');
-
if(!empty($email))
{
$email = common_canonical_email($email);
@@ -220,7 +205,8 @@ class User extends Memcached_DataObject
$profile->nickname = $nickname;
if(! User::allowed_nickname($nickname)){
common_log(LOG_WARNING, sprintf("Attempted to register a nickname that is not allowed: %s", $profile->nickname),
- __FILE__);
+ __FILE__);
+ return false;
}
$profile->profileurl = common_profile_url($nickname);
@@ -248,22 +234,10 @@ class User extends Memcached_DataObject
$profile->created = common_sql_now();
- $id = $profile->insert();
-
- if (empty($id)) {
- common_log_db_error($profile, 'INSERT', __FILE__);
- return false;
- }
-
$user = new User();
- $user->id = $id;
$user->nickname = $nickname;
- if (!empty($password)) { // may not have a password for OpenID users
- $user->password = common_munge_password($password, $id);
- }
-
// Users who respond to invite email have proven their ownership of that address
if (!empty($code)) {
@@ -282,109 +256,129 @@ class User extends Memcached_DataObject
$user->inboxed = 1;
$user->created = common_sql_now();
- $user->uri = common_user_uri($user);
-
- $result = $user->insert();
-
- if (!$result) {
- common_log_db_error($user, 'INSERT', __FILE__);
- return false;
- }
- // Everyone gets an inbox
+ if (Event::handle('StartUserRegister', array(&$user, &$profile))) {
- $inbox = new Inbox();
+ $profile->query('BEGIN');
- $inbox->user_id = $user->id;
- $inbox->notice_ids = '';
+ $id = $profile->insert();
- $result = $inbox->insert();
+ if (empty($id)) {
+ common_log_db_error($profile, 'INSERT', __FILE__);
+ return false;
+ }
- if (!$result) {
- common_log_db_error($inbox, 'INSERT', __FILE__);
- return false;
- }
+ $user->id = $id;
+ $user->uri = common_user_uri($user);
+ if (!empty($password)) { // may not have a password for OpenID users
+ $user->password = common_munge_password($password, $id);
+ }
- // Everyone is subscribed to themself
+ $result = $user->insert();
- $subscription = new Subscription();
- $subscription->subscriber = $user->id;
- $subscription->subscribed = $user->id;
- $subscription->created = $user->created;
+ if (!$result) {
+ common_log_db_error($user, 'INSERT', __FILE__);
+ return false;
+ }
- $result = $subscription->insert();
+ // Everyone gets an inbox
- if (!$result) {
- common_log_db_error($subscription, 'INSERT', __FILE__);
- return false;
- }
+ $inbox = new Inbox();
- if (!empty($email) && !$user->email) {
+ $inbox->user_id = $user->id;
+ $inbox->notice_ids = '';
- $confirm = new Confirm_address();
- $confirm->code = common_confirmation_code(128);
- $confirm->user_id = $user->id;
- $confirm->address = $email;
- $confirm->address_type = 'email';
+ $result = $inbox->insert();
- $result = $confirm->insert();
if (!$result) {
- common_log_db_error($confirm, 'INSERT', __FILE__);
+ common_log_db_error($inbox, 'INSERT', __FILE__);
return false;
}
- }
- if (!empty($code) && $user->email) {
- $user->emailChanged();
- }
+ // Everyone is subscribed to themself
- // Default system subscription
+ $subscription = new Subscription();
+ $subscription->subscriber = $user->id;
+ $subscription->subscribed = $user->id;
+ $subscription->created = $user->created;
- $defnick = common_config('newuser', 'default');
+ $result = $subscription->insert();
- if (!empty($defnick)) {
- $defuser = User::staticGet('nickname', $defnick);
- if (empty($defuser)) {
- common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
- __FILE__);
- } else {
- $defsub = new Subscription();
- $defsub->subscriber = $user->id;
- $defsub->subscribed = $defuser->id;
- $defsub->created = $user->created;
+ if (!$result) {
+ common_log_db_error($subscription, 'INSERT', __FILE__);
+ return false;
+ }
- $result = $defsub->insert();
+ if (!empty($email) && !$user->email) {
+
+ $confirm = new Confirm_address();
+ $confirm->code = common_confirmation_code(128);
+ $confirm->user_id = $user->id;
+ $confirm->address = $email;
+ $confirm->address_type = 'email';
+
+ $result = $confirm->insert();
if (!$result) {
- common_log_db_error($defsub, 'INSERT', __FILE__);
+ common_log_db_error($confirm, 'INSERT', __FILE__);
return false;
}
}
- }
- $profile->query('COMMIT');
+ if (!empty($code) && $user->email) {
+ $user->emailChanged();
+ }
- if (!empty($email) && !$user->email) {
- mail_confirm_address($user, $confirm->code, $profile->nickname, $email);
- }
+ // Default system subscription
- // Welcome message
+ $defnick = common_config('newuser', 'default');
- $welcome = common_config('newuser', 'welcome');
+ if (!empty($defnick)) {
+ $defuser = User::staticGet('nickname', $defnick);
+ if (empty($defuser)) {
+ common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
+ __FILE__);
+ } else {
+ $defsub = new Subscription();
+ $defsub->subscriber = $user->id;
+ $defsub->subscribed = $defuser->id;
+ $defsub->created = $user->created;
- if (!empty($welcome)) {
- $welcomeuser = User::staticGet('nickname', $welcome);
- if (empty($welcomeuser)) {
- common_log(LOG_WARNING, sprintf("Welcome user %s does not exist.", $defnick),
- __FILE__);
- } else {
- $notice = Notice::saveNew($welcomeuser->id,
- sprintf(_('Welcome to %1$s, @%2$s!'),
- common_config('site', 'name'),
- $user->nickname),
- 'system');
- common_broadcast_notice($notice);
+ $result = $defsub->insert();
+
+ if (!$result) {
+ common_log_db_error($defsub, 'INSERT', __FILE__);
+ return false;
+ }
+ }
+ }
+
+ $profile->query('COMMIT');
+
+ if (!empty($email) && !$user->email) {
+ mail_confirm_address($user, $confirm->code, $profile->nickname, $email);
+ }
+
+ // Welcome message
+
+ $welcome = common_config('newuser', 'welcome');
+
+ if (!empty($welcome)) {
+ $welcomeuser = User::staticGet('nickname', $welcome);
+ if (empty($welcomeuser)) {
+ common_log(LOG_WARNING, sprintf("Welcome user %s does not exist.", $defnick),
+ __FILE__);
+ } else {
+ $notice = Notice::saveNew($welcomeuser->id,
+ sprintf(_('Welcome to %1$s, @%2$s!'),
+ common_config('site', 'name'),
+ $user->nickname),
+ 'system');
+
+ }
}
+
+ Event::handle('EndUserRegister', array(&$profile, &$user));
}
return $user;
@@ -463,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);
}
}
@@ -494,30 +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)
{
- $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, false);
- return Notice::getStreamByIds($ids);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, 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)
{
- $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, true);
- return Notice::getStreamByIds($ids);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, 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)
{
- $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, false);
-
- return Notice::getStreamByIds($ids);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, 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)
{
- $ids = Inbox::stream($this->id, $offset, $limit, $since_id, $before_id, $since, true);
-
- return Notice::getStreamByIds($ids);
+ return Inbox::streamNotices($this->id, $offset, $limit, $since_id, $before_id, 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 ';
@@ -925,4 +885,30 @@ class User extends Memcached_DataObject
return $share;
}
}
+
+ static function siteOwner()
+ {
+ $owner = self::cacheGet('user:site_owner');
+
+ if ($owner === false) { // cache miss
+
+ $pr = new Profile_role();
+
+ $pr->role = Profile_role::OWNER;
+
+ $pr->orderBy('created');
+
+ $pr->limit(1);
+
+ if ($pr->find(true)) {
+ $owner = User::staticGet('id', $pr->profile_id);
+ } else {
+ $owner = null;
+ }
+
+ self::cacheSet('user:site_owner', $owner);
+ }
+
+ return $owner;
+ }
}
diff --git a/classes/User_group.php b/classes/User_group.php
index c86eadf8f..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,27 +41,57 @@ 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)
+ function getNotices($offset, $limit, $since_id=null, $max_id=null)
{
$ids = Notice::stream(array($this, '_streamDirect'),
array(),
'user_group:notice_ids:' . $this->id,
- $offset, $limit);
+ $offset, $limit, $since_id, $max_id);
return Notice::getStreamByIds($ids);
}
- 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)) {
@@ -355,6 +397,55 @@ class User_group extends Memcached_DataObject
return $xs->getString();
}
+ function asAtomAuthor()
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+ $xs->element('name', null, $this->nickname);
+ $xs->element('uri', null, $this->permalink());
+ $xs->elementEnd('author');
+
+ return $xs->getString();
+ }
+
+ /**
+ * 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()
+ {
+ return $this->asActivityNoun('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);
+ }
+
+ function getAvatar()
+ {
+ return empty($this->homepage_logo)
+ ? User_group::defaultLogo(AVATAR_PROFILE_SIZE)
+ : $this->homepage_logo;
+ }
+
static function register($fields) {
// MAGICALLY put fields into current scope
@@ -364,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();
@@ -405,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/status_network.ini b/classes/status_network.ini
index 8123265e4..adb71cba7 100644
--- a/classes/status_network.ini
+++ b/classes/status_network.ini
@@ -11,6 +11,7 @@ theme = 2
logo = 2
created = 142
modified = 384
+tags = 34
[status_network__keys]
nickname = K
diff --git a/classes/statusnet.ini b/classes/statusnet.ini
index 6203650a6..3fb8ee208 100644
--- a/classes/statusnet.ini
+++ b/classes/statusnet.ini
@@ -47,6 +47,16 @@ modified = 384
[consumer__keys]
consumer_key = K
+[conversation]
+id = 129
+uri = 2
+created = 142
+modified = 384
+
+[conversation__keys]
+id = N
+uri = U
+
[deleted_notice]
id = 129
profile_id = 129
@@ -235,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
@@ -249,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
@@ -359,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
@@ -367,6 +387,7 @@ modified = 384
[oauth_application__keys]
id = N
+name = U
[oauth_application_user]
profile_id = 129
@@ -429,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
@@ -582,6 +603,8 @@ mini_logo = 2
design_id = 1
created = 142
modified = 384
+uri = 2
+mainpage = 2
[user_group__keys]
id = N
@@ -615,4 +638,3 @@ modified = 384
[user_location_prefs__keys]
user_id = K
-
diff --git a/classes/statusnet.links.ini b/classes/statusnet.links.ini
index 7f233e676..b9dd5af0c 100644
--- a/classes/statusnet.links.ini
+++ b/classes/statusnet.links.ini
@@ -19,8 +19,11 @@ profile_id = profile:id
[token]
consumer_key = consumer:consumer_key
-[nonce]
-consumer_key,token = token:consumer_key,token
+; Compatibility hack for PHP 5.3
+; This entry has been moved to the class definition, as commas are no longer
+; considered valid in keys, causing parse_ini_file() to reject the whole file.
+;[nonce]
+;consumer_key,token = token:consumer_key,token
[confirm_address]
user_id = user:id
diff --git a/config.php.sample b/config.php.sample
index 2aa9326a4..a4580dabb 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -188,9 +188,6 @@ $config['sphinx']['port'] = 3312;
// Disable SMS
// $config['sms']['enabled'] = false;
-// Disable Twitter integration
-// $config['twitter']['enabled'] = false;
-
// Twitter integration source attribute. Note: default is StatusNet
// $config['integration']['source'] = 'StatusNet';
@@ -198,7 +195,7 @@ $config['sphinx']['port'] = 3312;
//
// NOTE: if you enable this you must also set $config['avatar']['path']
//
-// $config['twitterbridge']['enabled'] = true;
+// $config['twitterimport']['enabled'] = true;
// Twitter OAuth settings. Documentation is at http://apiwiki.twitter.com/OAuth-FAQ
// $config['twitter']['consumer_key'] = 'YOURKEY';
@@ -212,10 +209,6 @@ $config['sphinx']['port'] = 3312;
// $config['throttle']['count'] = 100;
// $config['throttle']['timespan'] = 3600;
-// List of users banned from posting (nicknames and/or IDs)
-// $config['profile']['banned'][] = 'hacker';
-// $config['profile']['banned'][] = 12345;
-
// Config section for the built-in Facebook application
// $config['facebook']['apikey'] = 'APIKEY';
// $config['facebook']['secret'] = 'SECRET';
@@ -275,6 +268,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 b10e47dbc..ba6f38200 100644
--- a/db/08to09.sql
+++ b/db/08to09.sql
@@ -110,3 +110,81 @@ insert into queue_item_new (frame,transport,created,claimed)
alter table queue_item rename to queue_item_old;
alter table queue_item_new rename to queue_item;
+alter table consumer
+ 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',
+ owner integer not null comment 'owner of the application' references profile (id),
+ consumer_key varchar(255) not null comment 'application consumer key' references consumer (consumer_key),
+ name varchar(255) not null comment 'name of the application',
+ description varchar(255) comment 'description of the application',
+ icon varchar(255) not null comment 'application icon',
+ source_url varchar(255) comment 'application homepage - used for source link',
+ organization varchar(255) comment 'name of the organization running the application',
+ homepage varchar(255) comment 'homepage for the organization',
+ callback_url varchar(255) comment 'url to redirect to after authentication',
+ type tinyint default 0 comment 'type of app, 1 = browser, 2 = desktop',
+ access_type tinyint default 0 comment 'default access type, bit 1 = read, bit 2 = write',
+ 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 oauth_application_user (
+ profile_id integer not null comment 'user of the application' references profile (id),
+ application_id integer not null comment 'id of the application' references oauth_application (id),
+ access_type tinyint default 0 comment 'access type, bit 1 = read, bit 2 = write, bit 3 = revoked',
+ token varchar(255) comment 'request or access token',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified',
+ 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/rc3to09.sql b/db/rc3to09.sql
deleted file mode 100644
index 02dc7a6e2..000000000
--- a/db/rc3to09.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-create table queue_item_new (
- id integer auto_increment primary key comment 'unique identifier',
- frame blob not null comment 'data: object reference or opaque string',
- transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...',
- created datetime not null comment 'date this record was created',
- claimed datetime comment 'date this item was claimed',
-
- index queue_item_created_idx (created)
-
-) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
-
-insert into queue_item_new (frame,transport,created,claimed)
- select notice_id,transport,created,claimed from queue_item;
-alter table queue_item rename to queue_item_old;
-alter table queue_item_new rename to queue_item;
-
diff --git a/db/rc3torc4.sql b/db/rc3torc4.sql
new file mode 100644
index 000000000..917c1f1c4
--- /dev/null
+++ b/db/rc3torc4.sql
@@ -0,0 +1,50 @@
+create table queue_item_new (
+ id integer auto_increment primary key comment 'unique identifier',
+ frame blob not null comment 'data: object reference or opaque string',
+ transport varchar(8) not null comment 'queue for what? "email", "jabber", "sms", "irc", ...',
+ created datetime not null comment 'date this record was created',
+ claimed datetime comment 'date this item was claimed',
+
+ index queue_item_created_idx (created)
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+insert into queue_item_new (frame,transport,created,claimed)
+ select notice_id,transport,created,claimed from queue_item;
+alter table queue_item rename to queue_item_old;
+alter table queue_item_new rename to queue_item;
+
+alter table consumer
+ 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',
+ owner integer not null comment 'owner of the application' references profile (id),
+ consumer_key varchar(255) not null comment 'application consumer key' references consumer (consumer_key),
+ name varchar(255) not null comment 'name of the application',
+ description varchar(255) comment 'description of the application',
+ icon varchar(255) not null comment 'application icon',
+ source_url varchar(255) comment 'application homepage - used for source link',
+ organization varchar(255) comment 'name of the organization running the application',
+ homepage varchar(255) comment 'homepage for the organization',
+ callback_url varchar(255) comment 'url to redirect to after authentication',
+ type tinyint default 0 comment 'type of app, 1 = browser, 2 = desktop',
+ access_type tinyint default 0 comment 'default access type, bit 1 = read, bit 2 = write',
+ 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 oauth_application_user (
+ profile_id integer not null comment 'user of the application' references profile (id),
+ application_id integer not null comment 'id of the application' references oauth_application (id),
+ access_type tinyint default 0 comment 'access type, bit 1 = read, bit 2 = write, bit 3 = revoked',
+ token varchar(255) comment 'request or access token',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified',
+ constraint primary key (profile_id, application_id)
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
diff --git a/db/site.sql b/db/site.sql
index a9f64e5a5..791303bd5 100644
--- a/db/site.sql
+++ b/db/site.sql
@@ -14,6 +14,8 @@ create table status_network (
sitename varchar(255) comment 'display name',
theme varchar(255) comment 'theme name',
logo varchar(255) comment 'site logo',
+
+ tags text comment 'site meta-info tags (pipe-separated)',
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified'
diff --git a/db/statusnet.sql b/db/statusnet.sql
index 17de4fd0d..3f95948e1 100644
--- a/db/statusnet.sql
+++ b/db/statusnet.sql
@@ -214,7 +214,7 @@ create table oauth_application (
id integer auto_increment primary key comment 'unique identifier',
owner integer not null comment 'owner of the application' references profile (id),
consumer_key varchar(255) not null comment 'application consumer key' references consumer (consumer_key),
- name varchar(255) not null comment 'name of the application',
+ name varchar(255) not null unique key comment 'name of the application',
description varchar(255) comment 'description of the application',
icon varchar(255) not null comment 'application icon',
source_url varchar(255) comment 'application homepage - used for source link',
@@ -230,7 +230,7 @@ create table oauth_application (
create table oauth_application_user (
profile_id integer not null comment 'user of the application' references profile (id),
application_id integer not null comment 'id of the application' references oauth_application (id),
- access_type tinyint default 0 comment 'access type, bit 1 = read, bit 2 = write, bit 3 = revoked',
+ access_type tinyint default 0 comment 'access type, bit 1 = read, bit 2 = write',
token varchar(255) comment 'request or access token',
created datetime not null comment 'date this record was created',
modified timestamp comment 'date this record was modified',
@@ -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;
@@ -633,3 +638,21 @@ create table inbox (
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;
+
+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/extlib/libomb/service_provider.php b/extlib/libomb/service_provider.php
index 753152713..a1c69e86f 100755
--- a/extlib/libomb/service_provider.php
+++ b/extlib/libomb/service_provider.php
@@ -285,6 +285,10 @@ class OMB_Service_Provider {
list($consumer, $token) = $this->getOAuthServer()->verify_request($req);
} catch (OAuthException $e) {
header('HTTP/1.1 403 Forbidden');
+ // @debug hack
+ throw OMB_RemoteServiceException::forRequest($uri,
+ 'Revoked accesstoken for ' . $listenee . ': ' . $e->getMessage());
+ // @end debug
throw OMB_RemoteServiceException::forRequest($uri,
'Revoked accesstoken for ' . $listenee);
}
diff --git a/index.php b/index.php
index b5edc0f94..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.
@@ -146,12 +161,27 @@ function formatBacktraceLine($n, $line)
return $out;
}
-function checkMirror($action_obj, $args)
+function setupRW()
{
global $config;
static $alwaysRW = array('session', 'remember_me');
+ // We ensure that these tables always are used
+ // on the master DB
+
+ $config['db']['database_rw'] = $config['db']['database'];
+ $config['db']['ini_rw'] = INSTALLDIR.'/classes/statusnet.ini';
+
+ foreach ($alwaysRW as $table) {
+ $config['db']['table_'.$table] = 'rw';
+ }
+}
+
+function checkMirror($action_obj, $args)
+{
+ global $config;
+
if (common_config('db', 'mirror') && $action_obj->isReadOnly($args)) {
if (is_array(common_config('db', 'mirror'))) {
// "load balancing", ha ha
@@ -162,16 +192,6 @@ function checkMirror($action_obj, $args)
$mirror = common_config('db', 'mirror');
}
- // We ensure that these tables always are used
- // on the master DB
-
- $config['db']['database_rw'] = $config['db']['database'];
- $config['db']['ini_rw'] = INSTALLDIR.'/classes/statusnet.ini';
-
- foreach ($alwaysRW as $table) {
- $config['db']['table_'.$table] = 'rw';
- }
-
// everyone else uses the mirror
$config['db']['database'] = $mirror;
@@ -180,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;
@@ -233,13 +253,13 @@ function main()
return;
}
- // For database errors
+ // Make sure RW database is setup
- PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
+ setupRW();
// XXX: we need a little more structure in this script
- // get and cache current user
+ // get and cache current user (may hit RW!)
$user = common_current_user();
@@ -276,8 +296,9 @@ function main()
if (!$user && common_config('site', 'private')
&& !isLoginAction($action)
&& !preg_match('/rss$/', $action)
- && !preg_match('/^Api/', $action)
- ) {
+ && $action != 'robotstxt'
+ && !preg_match('/^Api/', $action)) {
+
// set returnto
$rargs =& common_copy_args($args);
unset($rargs['action']);
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.js b/js/jquery.js
index 926357433..b3b95307a 100644
--- a/js/jquery.js
+++ b/js/jquery.js
@@ -1,975 +1,1462 @@
/*!
- * jQuery JavaScript Library v1.3.2
+ * jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
*
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
*/
-(function(){
+(function( window, undefined ) {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+ },
-var
- // Will speed up references to window, and allows munging its name.
- window = this,
- // Will speed up references to undefined, and allows munging its name.
- undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
+
// Map over the $ in case of overwrite
_$ = window.$,
- jQuery = window.jQuery = window.$ = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context );
- },
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
- quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
+ quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
+
// Is it a simple selector
- isSimple = /^.[^:#\[\.,]*$/;
+ isSimple = /^.[^:#\[\.,]*$/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // Has the ready events already been bound?
+ readyBound = false,
+
+ // The functions to execute on DOM ready
+ readyList = [],
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwnProperty = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ indexOf = Array.prototype.indexOf;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
- // Make sure that a selection was provided
- selector = selector || document;
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
// Handle $(DOMElement)
if ( selector.nodeType ) {
- this[0] = selector;
+ this.context = this[0] = selector;
+ 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;
- this.context = selector;
return this;
}
+
// Handle HTML strings
if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID?
- var match = quickExpr.exec( selector );
+ match = quickExpr.exec( selector );
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
- if ( match[1] )
- selector = jQuery.clean( [ match[1] ], context );
+ if ( match[1] ) {
+ doc = (context ? context.ownerDocument || context : document);
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = buildFragment( [ match[1] ], [ doc ] );
+ selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
// HANDLE: $("#id")
- else {
- var elem = document.getElementById( match[3] );
-
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem && elem.id != match[3] )
- return jQuery().find( selector );
-
- // Otherwise, we inject the element directly into the jQuery object
- var ret = jQuery( elem || [] );
- ret.context = document;
- ret.selector = selector;
- return ret;
+ } else {
+ elem = document.getElementById( match[2] );
+
+ if ( elem ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
}
- // HANDLE: $(expr, [context])
- // (which is just equivalent to: $(content).find(expr)
- } else
+ // HANDLE: $("TAG")
+ } else if ( !context && /^\w+$/.test( selector ) ) {
+ this.selector = selector;
+ this.context = document;
+ selector = document.getElementsByTagName( selector );
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return (context || rootjQuery).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
return jQuery( context ).find( selector );
+ }
// HANDLE: $(function)
// Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) )
- return jQuery( document ).ready( selector );
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
- // Make sure that old selector state is passed along
- if ( selector.selector && selector.context ) {
+ if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
- return this.setArray(jQuery.isArray( selector ) ?
- selector :
- jQuery.makeArray(selector));
+ return jQuery.makeArray( selector, this );
},
// Start with an empty selector
selector: "",
// The current version of jQuery being used
- jquery: "1.3.2",
+ jquery: "1.4.2",
+
+ // The default length of a jQuery object is 0
+ length: 0,
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
- return num === undefined ?
+ return num == null ?
// Return a 'clean' array
- Array.prototype.slice.call( this ) :
+ this.toArray() :
// Return just the object
- this[ num ];
+ ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
- var ret = jQuery( elems );
+ 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;
ret.context = this.context;
- if ( name === "find" )
+ if ( name === "find" ) {
ret.selector = this.selector + (this.selector ? " " : "") + selector;
- else if ( name )
+ } else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
// Return the newly-formed element set
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;
- Array.prototype.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.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem && elem.jquery ? elem[0] : elem
- , this );
- },
+ // If the DOM is already ready
+ if ( jQuery.isReady ) {
+ // Execute the function immediately
+ fn.call( document, jQuery );
- attr: function( name, value, type ) {
- var options = name;
+ // Otherwise, remember the function for later
+ } else if ( readyList ) {
+ // Add the function to the wait list
+ readyList.push( fn );
+ }
- // Look for the case where we're accessing a style value
- if ( typeof name === "string" )
- if ( value === undefined )
- return this[0] && jQuery[ type || "attr" ]( this[0], name );
+ return this;
+ },
+
+ eq: function( i ) {
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, +i + 1 );
+ },
- else {
- options = {};
- options[ name ] = value;
- }
+ first: function() {
+ return this.eq( 0 );
+ },
- // Check to see if we're setting style values
- return this.each(function(i){
- // Set all the styles
- for ( name in options )
- jQuery.attr(
- type ?
- this.style :
- this,
- name, jQuery.prop( this, options[ name ], type, i, name )
- );
- });
+ last: function() {
+ return this.eq( -1 );
},
- css: function( key, value ) {
- // ignore negative width and height values
- if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
- value = undefined;
- return this.attr( key, value, "curCSS" );
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
},
- text: function( text ) {
- if ( typeof text !== "object" && text != null )
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || jQuery(null);
+ },
- var ret = "";
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
- jQuery.each( text || this, function(){
- jQuery.each( this.childNodes, function(){
- if ( this.nodeType != 8 )
- ret += this.nodeType != 1 ?
- this.nodeValue :
- jQuery.fn.text( [ this ] );
- });
- });
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
- return ret;
- },
+jQuery.extend = jQuery.fn.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
- wrapAll: function( html ) {
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).clone();
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
- if ( this[0].parentNode )
- wrap.insertBefore( this[0] );
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
- wrap.map(function(){
- var elem = this;
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
- while ( elem.firstChild )
- elem = elem.firstChild;
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
- return elem;
- }).append(this);
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging object literal values or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+ var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+ : jQuery.isArray(copy) ? [] : {};
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
}
+ }
- return this;
- },
+ // Return the modified object
+ return target;
+};
- wrapInner: function( html ) {
- return this.each(function(){
- jQuery( this ).contents().wrapAll( html );
- });
+jQuery.extend({
+ noConflict: function( deep ) {
+ window.$ = _$;
+
+ if ( deep ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
},
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // Handle when the DOM is ready
+ ready: function() {
+ // Make sure that the DOM is not already loaded
+ if ( !jQuery.isReady ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 13 );
+ }
- wrap: function( html ) {
- return this.each(function(){
- jQuery( this ).wrapAll( html );
- });
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If there are functions bound, to execute
+ if ( readyList ) {
+ // Execute all of them
+ var fn, i = 0;
+ while ( (fn = readyList[ i++ ]) ) {
+ fn.call( document, jQuery );
+ }
+
+ // Reset the list of functions
+ readyList = null;
+ }
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.triggerHandler ) {
+ jQuery( document ).triggerHandler( "ready" );
+ }
+ }
},
+
+ bindReady: function() {
+ if ( readyBound ) {
+ return;
+ }
- append: function() {
- return this.domManip(arguments, true, function(elem){
- if (this.nodeType == 1)
- this.appendChild( elem );
- });
+ readyBound = true;
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ return jQuery.ready();
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent("onreadystatechange", DOMContentLoaded);
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
},
- prepend: function() {
- return this.domManip(arguments, true, function(elem){
- if (this.nodeType == 1)
- this.insertBefore( elem, this.firstChild );
- });
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return toString.call(obj) === "[object Function]";
},
- before: function() {
- return this.domManip(arguments, false, function(elem){
- this.parentNode.insertBefore( elem, this );
- });
+ isArray: function( obj ) {
+ return toString.call(obj) === "[object Array]";
},
- after: function() {
- return this.domManip(arguments, false, function(elem){
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
+ return false;
+ }
+
+ // Not own constructor property must be Object
+ if ( obj.constructor
+ && !hasOwnProperty.call(obj, "constructor")
+ && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwnProperty.call( obj, key );
},
- end: function() {
- return this.prevObject || jQuery( [] );
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw msg;
},
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: [].push,
- sort: [].sort,
- splice: [].splice,
+ // 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
+ if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
+
+ // Try to use the native JSON parser first
+ return window.JSON && window.JSON.parse ?
+ window.JSON.parse( data ) :
+ (new Function("return " + data))();
- find: function( selector ) {
- if ( this.length === 1 ) {
- var ret = this.pushStack( [], "find", selector );
- ret.length = 0;
- jQuery.find( selector, this[0], ret );
- return ret;
} else {
- return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
- return jQuery.find( selector, elem );
- })), "find", selector );
+ jQuery.error( "Invalid JSON: " + data );
}
},
- clone: function( events ) {
- // Do the clone
- var ret = this.map(function(){
- if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
- // IE copies events bound via attachEvent when
- // using cloneNode. Calling detachEvent on the
- // clone will also remove the events from the orignal
- // In order to get around this, we use innerHTML.
- // Unfortunately, this means some modifications to
- // attributes in IE that are actually only stored
- // as properties will not be copied (such as the
- // the name attribute on an input).
- var html = this.outerHTML;
- if ( !html ) {
- var div = this.ownerDocument.createElement("div");
- div.appendChild( this.cloneNode(true) );
- html = div.innerHTML;
- }
+ noop: function() {},
- return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
- } else
- return this.cloneNode(true);
- });
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test(data) ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
- // Copy the events from the original to the clone
- if ( events === true ) {
- var orig = this.find("*").andSelf(), i = 0;
+ script.type = "text/javascript";
- ret.find("*").andSelf().each(function(){
- if ( this.nodeName !== orig[i].nodeName )
- return;
+ if ( jQuery.support.scriptEval ) {
+ script.appendChild( document.createTextNode( data ) );
+ } else {
+ script.text = data;
+ }
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
- var events = jQuery.data( orig[i], "events" );
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction(object);
- for ( var type in events ) {
- for ( var handler in events[ type ] ) {
- jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
}
}
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
- i++;
- });
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+ }
}
- // Return the cloned set
- return ret;
+ return object;
},
- filter: function( selector ) {
- return this.pushStack(
- jQuery.isFunction( selector ) &&
- jQuery.grep(this, function(elem, i){
- return selector.call( elem, i );
- }) ||
-
- jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
- return elem.nodeType === 1;
- }) ), "filter", selector );
- },
-
- closest: function( selector ) {
- var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
- closer = 0;
-
- return this.map(function(){
- var cur = this;
- while ( cur && cur.ownerDocument ) {
- if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
- jQuery.data(cur, "closest", closer);
- return cur;
- }
- cur = cur.parentNode;
- closer++;
- }
- });
+ trim: function( text ) {
+ return (text || "").replace( rtrim, "" );
},
- not: function( selector ) {
- if ( typeof selector === "string" )
- // test special case where just one selector is passed in
- if ( isSimple.test( selector ) )
- return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
- else
- selector = jQuery.multiFilter( selector, this );
-
- var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
- return this.filter(function() {
- return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
- });
- },
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
- add: function( selector ) {
- return this.pushStack( jQuery.unique( jQuery.merge(
- this.get(),
- typeof selector === "string" ?
- jQuery( selector ) :
- jQuery.makeArray( selector )
- )));
- },
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // The extra typeof function check is to prevent crashes
+ // in Safari 2 (See: #3039)
+ if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
- is: function( selector ) {
- return !!selector && jQuery.multiFilter( selector, this ).length > 0;
+ return ret;
},
- hasClass: function( selector ) {
- return !!selector && this.is( "." + selector );
+ inArray: function( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
},
- val: function( value ) {
- if ( value === undefined ) {
- var elem = this[0];
+ merge: function( first, second ) {
+ var i = first.length, j = 0;
- if ( elem ) {
- if( jQuery.nodeName( elem, 'option' ) )
- return (elem.attributes.value || {}).specified ? elem.value : elem.text;
-
- // We need to handle select boxes special
- if ( jQuery.nodeName( elem, "select" ) ) {
- var index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type == "select-one";
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
- // Nothing was selected
- if ( index < 0 )
- return null;
+ first.length = i;
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
+ return first;
+ },
- if ( option.selected ) {
- // Get the specifc value for the option
- value = jQuery(option).val();
+ grep: function( elems, callback, inv ) {
+ var ret = [];
- // We don't need an array for one selects
- if ( one )
- return value;
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ if ( !inv !== !callback( elems[ i ], i ) ) {
+ ret.push( elems[ i ] );
+ }
+ }
- // Multi-Selects return an array
- values.push( value );
- }
- }
+ return ret;
+ },
- return values;
- }
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var ret = [], value;
- // Everything else, we just grab the value
- return (elem.value || "").replace(/\r/g, "");
+ // Go through the array, translating each of the items to their
+ // new value (or values).
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+ if ( value != null ) {
+ ret[ ret.length ] = value;
}
-
- return undefined;
}
- if ( typeof value === "number" )
- value += '';
+ return ret.concat.apply( [], ret );
+ },
- return this.each(function(){
- if ( this.nodeType != 1 )
- return;
+ // A global GUID counter for objects
+ guid: 1,
- if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
- this.checked = (jQuery.inArray(this.value, value) >= 0 ||
- jQuery.inArray(this.name, value) >= 0);
+ proxy: function( fn, proxy, thisObject ) {
+ if ( arguments.length === 2 ) {
+ if ( typeof proxy === "string" ) {
+ thisObject = fn;
+ fn = thisObject[ proxy ];
+ proxy = undefined;
- else if ( jQuery.nodeName( this, "select" ) ) {
- var values = jQuery.makeArray(value);
+ } else if ( proxy && !jQuery.isFunction( proxy ) ) {
+ thisObject = proxy;
+ proxy = undefined;
+ }
+ }
- jQuery( "option", this ).each(function(){
- this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
- jQuery.inArray( this.text, values ) >= 0);
- });
+ if ( !proxy && fn ) {
+ proxy = function() {
+ return fn.apply( thisObject || this, arguments );
+ };
+ }
- if ( !values.length )
- this.selectedIndex = -1;
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ if ( fn ) {
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+ }
- } else
- this.value = value;
- });
+ // So proxy can be declared as an argument
+ return proxy;
},
- html: function( value ) {
- return value === undefined ?
- (this[0] ?
- this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
- null) :
- this.empty().append( value );
- },
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
- replaceWith: function( value ) {
- return this.after( value ).remove();
- },
+ var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
+ [];
- eq: function( i ) {
- return this.slice( i, +i + 1 );
+ return { browser: match[1] || "", version: match[2] || "0" };
},
- slice: function() {
- return this.pushStack( Array.prototype.slice.apply( this, arguments ),
- "slice", Array.prototype.slice.call(arguments).join(",") );
- },
+ browser: {}
+});
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function(elem, i){
- return callback.call( elem, i, elem );
- }));
- },
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
- andSelf: function() {
- return this.add( this.prevObject );
- },
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
- domManip: function( args, table, callback ) {
- if ( this[0] ) {
- var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
- scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
- first = fragment.firstChild;
+if ( indexOf ) {
+ jQuery.inArray = function( elem, array ) {
+ return indexOf.call( array, elem );
+ };
+}
- if ( first )
- for ( var i = 0, l = this.length; i < l; i++ )
- callback.call( root(this[i], first), this.length > 1 || i > 0 ?
- fragment.cloneNode(true) : fragment );
-
- if ( scripts )
- jQuery.each( scripts, evalScript );
- }
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
- return this;
-
- function root( elem, cur ) {
- return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
}
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
}
-};
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch( error ) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
function evalScript( i, elem ) {
- if ( elem.src )
+ if ( elem.src ) {
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
-
- else
+ } else {
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+ }
- if ( elem.parentNode )
+ if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
+ }
}
-function now(){
- return +new Date;
+// Mutifunctional method to get and set values to a collection
+// The value/s can be optionally by executed if its a function
+function access( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
}
-jQuery.extend = jQuery.fn.extend = function() {
- // copy reference to target object
- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+function now() {
+ return (new Date).getTime();
+}
+(function() {
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
+ jQuery.support = {};
+
+ var root = document.documentElement,
+ script = document.createElement("script"),
+ div = document.createElement("div"),
+ id = "script" + now();
+
+ div.style.display = "none";
+ div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+ var all = div.getElementsByTagName("*"),
+ a = div.getElementsByTagName("a")[0];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return;
}
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) )
- target = {};
+ jQuery.support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: div.firstChild.nodeType === 3,
- // extend jQuery itself if only one argument is passed
- if ( length == i ) {
- target = this;
- --i;
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText insted)
+ style: /red/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: a.getAttribute("href") === "/a",
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55$/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (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,
+ boxModel: null
+ };
+
+ script.type = "text/javascript";
+ try {
+ script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+ } catch(e) {}
+
+ root.insertBefore( script, root.firstChild );
+
+ // Make sure that the execution of code works by injecting a script
+ // tag with appendChild/createTextNode
+ // (IE doesn't support this, fails, and uses .text instead)
+ if ( window[ id ] ) {
+ jQuery.support.scriptEval = true;
+ delete window[ id ];
}
- for ( ; i < length; i++ )
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null )
- // Extend the base object
- for ( var name in options ) {
- var src = target[ name ], copy = options[ name ];
+ // 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;
+ }
- // Prevent never-ending loop
- if ( target === copy )
- continue;
+ root.removeChild( script );
- // Recurse if we're merging object values
- if ( deep && copy && typeof copy === "object" && !copy.nodeType )
- target[ name ] = jQuery.extend( deep,
- // Never move original objects, clone them
- src || ( copy.length != null ? [ ] : { } )
- , copy );
+ if ( div.attachEvent && div.fireEvent ) {
+ div.attachEvent("onclick", function click() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ jQuery.support.noCloneEvent = false;
+ div.detachEvent("onclick", click);
+ });
+ div.cloneNode(true).fireEvent("onclick");
+ }
- // Don't bring in undefined values
- else if ( copy !== undefined )
- target[ name ] = copy;
+ div = document.createElement("div");
+ div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
- }
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild( div.firstChild );
- // Return the modified object
- return target;
-};
+ // WebKit doesn't clone checked state correctly in fragments
+ jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
-// exclude the following css properties to add px
-var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
- // cache defaultView
- defaultView = document.defaultView || {},
- toString = Object.prototype.toString;
+ // Figure out if the W3C box model works as expected
+ // document.body must exist before we can do this
+ jQuery(function() {
+ var div = document.createElement("div");
+ div.style.width = div.style.paddingLeft = "1px";
-jQuery.extend({
- noConflict: function( deep ) {
- window.$ = _$;
+ document.body.appendChild( div );
+ jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+ document.body.removeChild( div ).style.display = 'none';
- if ( deep )
- window.jQuery = _jQuery;
+ div = null;
+ });
- return jQuery;
- },
+ // Technique from Juriy Zaytsev
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+ var eventSupported = function( eventName ) {
+ var el = document.createElement("div");
+ eventName = "on" + eventName;
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return toString.call(obj) === "[object Function]";
- },
+ var isSupported = (eventName in el);
+ if ( !isSupported ) {
+ el.setAttribute(eventName, "return;");
+ isSupported = typeof el[eventName] === "function";
+ }
+ el = null;
- isArray: function( obj ) {
- return toString.call(obj) === "[object Array]";
- },
+ return isSupported;
+ };
+
+ jQuery.support.submitBubbles = eventSupported("submit");
+ jQuery.support.changeBubbles = eventSupported("change");
- // check if an element is in a (or is an) XML document
- isXMLDoc: function( elem ) {
- return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
- !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
+ // release memory in IE
+ root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+ "for": "htmlFor",
+ "class": "className",
+ readonly: "readOnly",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ tabindex: "tabIndex",
+ usemap: "useMap",
+ frameborder: "frameBorder"
+};
+var expando = "jQuery" + now(), uuid = 0, windowData = {};
+
+jQuery.extend({
+ cache: {},
+
+ expando:expando,
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ "object": true,
+ "applet": true
},
- // Evalulates a script in a global context
- globalEval: function( data ) {
- if ( data && /\S/.test(data) ) {
- // Inspired by code by Andrea Giammarchi
- // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
- var head = document.getElementsByTagName("head")[0] || document.documentElement,
- script = document.createElement("script");
+ data: function( elem, name, data ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ return;
+ }
- script.type = "text/javascript";
- if ( jQuery.support.scriptEval )
- script.appendChild( document.createTextNode( data ) );
- else
- script.text = data;
+ elem = elem == window ?
+ windowData :
+ elem;
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709).
- head.insertBefore( script, head.firstChild );
- head.removeChild( script );
+ var id = elem[ expando ], cache = jQuery.cache, thisCache;
+
+ if ( !id && typeof name === "string" && data === undefined ) {
+ return null;
}
- },
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
- },
+ // Compute a unique ID for the element
+ if ( !id ) {
+ id = ++uuid;
+ }
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0, length = object.length;
+ // Avoid generating a new cache unless none exists and we
+ // want to manipulate it.
+ if ( typeof name === "object" ) {
+ elem[ expando ] = id;
+ thisCache = cache[ id ] = jQuery.extend(true, {}, name);
- if ( args ) {
- if ( length === undefined ) {
- for ( name in object )
- if ( callback.apply( object[ name ], args ) === false )
- break;
- } else
- for ( ; i < length; )
- if ( callback.apply( object[ i++ ], args ) === false )
- break;
+ } else if ( !cache[ id ] ) {
+ elem[ expando ] = id;
+ cache[ id ] = {};
+ }
- // A special, fast, case for the most common use of each
- } else {
- if ( length === undefined ) {
- for ( name in object )
- if ( callback.call( object[ name ], name, object[ name ] ) === false )
- break;
- } else
- for ( var value = object[0];
- i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+ thisCache = cache[ id ];
+
+ // Prevent overriding the named cache with undefined values
+ if ( data !== undefined ) {
+ thisCache[ name ] = data;
}
- return object;
+ return typeof name === "string" ? thisCache[ name ] : thisCache;
},
- prop: function( elem, value, type, i, name ) {
- // Handle executable functions
- if ( jQuery.isFunction( value ) )
- value = value.call( elem, i );
+ removeData: function( elem, name ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ return;
+ }
+
+ elem = elem == window ?
+ windowData :
+ elem;
- // Handle passing in a number to a CSS property
- return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
- value + "px" :
- value;
- },
+ var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( thisCache ) {
+ // Remove the section of cache data
+ delete thisCache[ name ];
+
+ // If we've removed all the data, remove the element's cache
+ if ( jQuery.isEmptyObject(thisCache) ) {
+ jQuery.removeData( elem );
+ }
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
- className: {
- // internal only, use addClass("class")
- add: function( elem, classNames ) {
- jQuery.each((classNames || "").split(/\s+/), function(i, className){
- if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
- elem.className += (elem.className ? " " : "") + className;
+ // Completely remove the data cache
+ delete cache[ id ];
+ }
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ if ( typeof key === "undefined" && this.length ) {
+ return jQuery.data( this[0] );
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
});
- },
+ }
- // internal only, use removeClass("class")
- remove: function( elem, classNames ) {
- if (elem.nodeType == 1)
- elem.className = classNames !== undefined ?
- jQuery.grep(elem.className.split(/\s+/), function(className){
- return !jQuery.className.has( classNames, className );
- }).join(" ") :
- "";
- },
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
- // internal only, use hasClass("class")
- has: function( elem, className ) {
- return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+ }
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ } else {
+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
+ jQuery.data( this, key, value );
+ });
}
},
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ if ( !elem ) {
+ return;
}
- callback.call( elem );
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type );
- // Revert the old values
- for ( var name in options )
- elem.style[ name ] = old[ name ];
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( !data ) {
+ return q || [];
+ }
+
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+ } else {
+ q.push( data );
+ }
+
+ return q;
},
- css: function( elem, name, force, extra ) {
- if ( name == "width" || name == "height" ) {
- var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+ dequeue: function( elem, type ) {
+ type = type || "fx";
- function getWH() {
- val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+ var queue = jQuery.queue( elem, type ), fn = queue.shift();
- if ( extra === "border" )
- return;
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
- jQuery.each( which, function() {
- if ( !extra )
- val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
- if ( extra === "margin" )
- val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
- else
- val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
- });
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift("inprogress");
}
- if ( elem.offsetWidth !== 0 )
- getWH();
- else
- jQuery.swap( elem, props, getWH );
+ fn.call(elem, function() {
+ jQuery.dequeue(elem, type);
+ });
+ }
+ }
+});
- return Math.max(0, Math.round(val));
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
}
- return jQuery.curCSS( elem, name, force );
- },
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function( i, elem ) {
+ var queue = jQuery.queue( this, type, data );
- curCSS: function( elem, name, force ) {
- var ret, style = elem.style;
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
- // We need to handle opacity special in IE
- if ( name == "opacity" && !jQuery.support.opacity ) {
- ret = jQuery.attr( style, "opacity" );
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function() {
+ var elem = this;
+ setTimeout(function() {
+ jQuery.dequeue( elem, type );
+ }, time );
+ });
+ },
- return ret == "" ?
- "1" :
- ret;
- }
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ }
+});
+var rclass = /[\n\t]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rspecialurl = /href|src|style/,
+ rtype = /(button|input)/i,
+ rfocusable = /(button|input|object|select|textarea)/i,
+ rclickable = /^(a|area)$/i,
+ rradiocheck = /radio|checkbox/;
- // Make sure we're using the right name for getting the float value
- if ( name.match( /float/i ) )
- name = styleFloat;
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return access( this, name, value, true, jQuery.attr );
+ },
- if ( !force && style && style[ name ] )
- ret = style[ name ];
+ removeAttr: function( name, fn ) {
+ return this.each(function(){
+ jQuery.attr( this, name, "" );
+ if ( this.nodeType === 1 ) {
+ this.removeAttribute( name );
+ }
+ });
+ },
- else if ( defaultView.getComputedStyle ) {
+ addClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.addClass( value.call(this, i, self.attr("class")) );
+ });
+ }
- // Only "float" is needed here
- if ( name.match( /float/i ) )
- name = "float";
+ if ( value && typeof value === "string" ) {
+ var classNames = (value || "").split( rspace );
- name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
- var computedStyle = defaultView.getComputedStyle( elem, null );
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className ) {
+ elem.className = value;
- if ( computedStyle )
- ret = computedStyle.getPropertyValue( name );
+ } else {
+ var className = " " + elem.className + " ", setClass = elem.className;
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+ setClass += " " + classNames[c];
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
- // We should always get a number back from opacity
- if ( name == "opacity" && ret == "" )
- ret = "1";
+ return this;
+ },
- } else if ( elem.currentStyle ) {
- var camelCase = name.replace(/\-(\w)/g, function(all, letter){
- return letter.toUpperCase();
+ removeClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.removeClass( value.call(this, i, self.attr("class")) );
});
+ }
- ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+ if ( (value && typeof value === "string") || value === undefined ) {
+ var classNames = (value || "").split(rspace);
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
- // Remember the original values
- var left = style.left, rsLeft = elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- elem.runtimeStyle.left = elem.currentStyle.left;
- style.left = ret || 0;
- ret = style.pixelLeft + "px";
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ var className = (" " + elem.className + " ").replace(rclass, " ");
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[c] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
- // Revert the changed values
- style.left = left;
- elem.runtimeStyle.left = rsLeft;
+ } else {
+ elem.className = "";
+ }
+ }
}
}
- return ret;
+ return this;
},
- clean: function( elems, context, fragment ) {
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" )
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value, isBool = typeof stateVal === "boolean";
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
- var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
- if ( match )
- return [ context.createElement( match[1] ) ];
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+ });
}
- var ret = [], scripts = [], div = context.createElement("div");
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className, i = 0, self = jQuery(this),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
- jQuery.each(elems, function(i, elem){
- if ( typeof elem === "number" )
- elem += '';
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery.data( this, "__className__", this.className );
+ }
- if ( !elem )
- return;
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+ }
+ });
+ },
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
- return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
- all :
- front + "></" + tag + ">";
- });
+ hasClass: function( selector ) {
+ var className = " " + selector + " ";
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
- // Trim whitespace, otherwise indexOf won't work as expected
- var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
+ return false;
+ },
- var wrap =
- // option or optgroup
- !tags.indexOf("<opt") &&
- [ 1, "<select multiple='multiple'>", "</select>" ] ||
+ val: function( value ) {
+ if ( value === undefined ) {
+ var elem = this[0];
- !tags.indexOf("<leg") &&
- [ 1, "<fieldset>", "</fieldset>" ] ||
+ if ( elem ) {
+ if ( jQuery.nodeName( elem, "option" ) ) {
+ return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+ }
- tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
- [ 1, "<table>", "</table>" ] ||
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
- !tags.indexOf("<tr") &&
- [ 2, "<table><tbody>", "</tbody></table>" ] ||
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
- // <thead> matched above
- (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
- [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
- !tags.indexOf("<col") &&
- [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery(option).val();
- // IE can't serialize <link> and <script> tags normally
- !jQuery.support.htmlSerialize &&
- [ 1, "div<div>", "</div>" ] ||
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
- [ 0, "", "" ];
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
+ return values;
+ }
- // Move to the right depth
- while ( wrap[0]-- )
- div = div.lastChild;
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
+ // Everything else, we just grab the value
+ return (elem.value || "").replace(rreturn, "");
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = /<tbody/i.test(elem),
- tbody = !tags.indexOf("<table") && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
+ }
- // String was a bare <thead> or <tfoot>
- wrap[1] == "<table>" && !hasBody ?
- div.childNodes :
- [];
+ return undefined;
+ }
- for ( var j = tbody.length - 1; j >= 0 ; --j )
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ var isFunction = jQuery.isFunction(value);
- }
+ return this.each(function(i) {
+ var self = jQuery(this), val = value;
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
- div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
-
- elem = jQuery.makeArray( div.childNodes );
+ if ( this.nodeType !== 1 ) {
+ return;
}
- if ( elem.nodeType )
- ret.push( elem );
- else
- ret = jQuery.merge( ret, elem );
+ if ( isFunction ) {
+ val = value.call(this, i, self.val());
+ }
- });
+ // Typecast each time if the value is a Function and the appended
+ // value is therefore different each time.
+ if ( typeof val === "number" ) {
+ val += "";
+ }
- if ( fragment ) {
- for ( var i = 0; ret[i]; i++ ) {
- if ( 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"))) );
- fragment.appendChild( ret[i] );
+ if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+ this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+ } else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(val);
+
+ jQuery( "option", this ).each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ this.selectedIndex = -1;
}
+
+ } else {
+ this.value = val;
}
-
- return scripts;
- }
+ });
+ }
+});
- return ret;
+jQuery.extend({
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
},
-
- attr: function( elem, name, value ) {
+
+ attr: function( elem, name, value, pass ) {
// don't set attributes on text and comment nodes
- if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
+ }
- var notxml = !jQuery.isXMLDoc( elem ),
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery(elem)[name](value);
+ }
+
+ var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting)
set = value !== undefined;
@@ -977,472 +1464,1209 @@ jQuery.extend({
name = notxml && jQuery.props[ name ] || name;
// Only do all the following if this is a node (faster for style)
- // IE elem.getAttribute passes even for style
- if ( elem.tagName ) {
-
+ if ( elem.nodeType === 1 ) {
// These attributes require special treatment
- var special = /href|src|style/.test( name );
+ var special = rspecialurl.test( name );
- // Safari mis-reports the default selected property of a hidden option
+ // Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
- if ( name == "selected" && elem.parentNode )
- elem.parentNode.selectedIndex;
+ if ( name === "selected" && !jQuery.support.optSelected ) {
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
// If applicable, access the attribute via the DOM 0 way
if ( name in elem && notxml && !special ) {
- if ( set ){
+ if ( set ) {
// We can't allow the type property to be changed (since it causes problems in IE)
- if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
- throw "type property can't be changed";
+ if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ }
elem[ name ] = value;
}
// browsers index elements by id/name on forms, give priority to attributes.
- if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
+ if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
return elem.getAttributeNode( name ).nodeValue;
+ }
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- if ( name == "tabIndex" ) {
+ if ( name === "tabIndex" ) {
var attributeNode = elem.getAttributeNode( "tabIndex" );
- return attributeNode && attributeNode.specified
- ? attributeNode.value
- : elem.nodeName.match(/(button|input|object|select|textarea)/i)
- ? 0
- : elem.nodeName.match(/^(a|area)$/i) && elem.href
- ? 0
- : undefined;
+
+ return attributeNode && attributeNode.specified ?
+ attributeNode.value :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
}
return elem[ name ];
}
- if ( !jQuery.support.style && notxml && name == "style" )
- return jQuery.attr( elem.style, "cssText", value );
+ if ( !jQuery.support.style && notxml && name === "style" ) {
+ if ( set ) {
+ elem.style.cssText = "" + value;
+ }
+
+ return elem.style.cssText;
+ }
- if ( set )
+ if ( set ) {
// convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, "" + value );
+ }
- var attr = !jQuery.support.hrefNormalized && notxml && special
+ var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
- ? elem.getAttribute( name, 2 )
- : elem.getAttribute( name );
+ elem.getAttribute( name, 2 ) :
+ elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
// elem is actually elem.style ... set the style
+ // Using attr for specific style information is now deprecated. Use style instead.
+ return jQuery.style( elem, name, value );
+ }
+});
+var rnamespaces = /\.(.*)$/,
+ fcleanup = function( nm ) {
+ return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
+ return "\\" + ch;
+ });
+ };
- // IE uses filters for opacity
- if ( !jQuery.support.opacity && name == "opacity" ) {
- if ( set ) {
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- elem.zoom = 1;
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
- // Set the alpha filter to set the opacity
- elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
- (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
- }
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function( elem, types, handler, data ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
- return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
- (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
- "";
+ // For whatever reason, IE has trouble passing the window object
+ // around, causing it to be cloned in the process
+ if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
+ elem = window;
}
- name = name.replace(/-([a-z])/ig, function(all, letter){
- return letter.toUpperCase();
- });
+ var handleObjIn, handleObj;
- if ( set )
- elem[ name ] = value;
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
- return elem[ name ];
- },
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
- trim: function( text ) {
- return (text || "").replace( /^\s+|\s+$/g, "" );
- },
+ // Init the element's event structure
+ var elemData = jQuery.data( elem );
- makeArray: function( array ) {
- var ret = [];
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
+ }
- if( array != null ){
- var i = array.length;
- // The window, strings (and functions) also have 'length'
- if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
- ret[0] = array;
- else
- while( i )
- ret[--i] = array[i];
+ var events = elemData.events = elemData.events || {},
+ eventHandle = elemData.handle, eventHandle;
+
+ 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;
+ };
}
- return ret;
- },
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
- inArray: function( elem, array ) {
- for ( var i = 0, length = array.length; i < length; i++ )
- // Use === because on IE, window == document
- if ( array[ i ] === elem )
- return i;
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = types.split(" ");
- return -1;
+ var type, i = 0, namespaces;
+
+ while ( (type = types[ i++ ]) ) {
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
+
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
+ }
+
+ handleObj.type = type;
+ handleObj.guid = handler.guid;
+
+ // Get the current list of functions bound to this event
+ var handlers = events[ type ],
+ special = jQuery.event.special[ type ] || {};
+
+ // Init the event handler queue
+ if ( !handlers ) {
+ 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, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers.push( handleObj );
+
+ // Keep track of which events have been used, for global triggering
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
},
- merge: function( first, second ) {
- // We have to loop this way because IE & Opera overwrite the length
- // expando of getElementsByTagName
- var i = 0, elem, pos = first.length;
- // Also, we need to make sure that the correct elements are being returned
- // (IE returns comment nodes in a '*' query)
- if ( !jQuery.support.getAll ) {
- while ( (elem = second[ i++ ]) != null )
- if ( elem.nodeType != 8 )
- first[ pos++ ] = elem;
-
- } else
- while ( (elem = second[ i++ ]) != null )
- first[ pos++ ] = elem;
+ global: {},
- return first;
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, pos ) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ elemData = jQuery.data( elem ),
+ events = elemData && elemData.events;
+
+ 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 );
+ }
+ }
+
+ 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, handleObj );
+ }
+ }
+
+ if ( pos != null ) {
+ break;
+ }
+ }
+ }
+
+ // 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 );
+ }
+
+ 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 );
+ }
+ }
},
- unique: function( array ) {
- var ret = [], done = {};
+ // bubbling is internal
+ trigger: function( event, data, elem /*, bubbling */ ) {
+ // Event object or event type
+ var type = event.type || event,
+ bubbling = arguments[3];
+
+ if ( !bubbling ) {
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[expando] ? event :
+ // Object literal
+ jQuery.extend( jQuery.Event(type), event ) :
+ // Just the event type (string)
+ jQuery.Event(type);
+
+ if ( type.indexOf("!") >= 0 ) {
+ event.type = type = type.slice(0, -1);
+ event.exclusive = true;
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // Don't bubble custom events when global (to avoid too much overhead)
+ event.stopPropagation();
+
+ // Only trigger if we've ever bound an event for it
+ if ( jQuery.event.global[ type ] ) {
+ jQuery.each( jQuery.cache, function() {
+ if ( this.events && this.events[type] ) {
+ jQuery.event.trigger( event, data, this.handle.elem );
+ }
+ });
+ }
+ }
+
+ // Handle triggering a single element
+ // don't do events on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
+
+ // Clean up in case it is reused
+ event.result = undefined;
+ event.target = elem;
+
+ // Clone the incoming data, if any
+ data = jQuery.makeArray( data );
+ data.unshift( event );
+ }
+
+ event.currentTarget = elem;
+
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = jQuery.data( elem, "handle" );
+ if ( handle ) {
+ handle.apply( elem, data );
+ }
+
+ var parent = elem.parentNode || elem.ownerDocument;
+
+ // Trigger an inline bound script
try {
+ if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+ if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+ event.result = false;
+ }
+ }
+
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (e) {}
+
+ if ( !event.isPropagationStopped() && parent ) {
+ jQuery.event.trigger( event, data, parent, true );
+
+ } else if ( !event.isDefaultPrevented() ) {
+ var target = event.target, old,
+ 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()]) ) {
+
+ try {
+ if ( target[ type ] ) {
+ // Make sure that we don't accidentally re-trigger the onFOO events
+ old = target[ "on" + type ];
- for ( var i = 0, length = array.length; i < length; i++ ) {
- var id = jQuery.data( array[ i ] );
+ if ( old ) {
+ target[ "on" + type ] = null;
+ }
+
+ jQuery.event.triggered = true;
+ target[ type ]();
+ }
- if ( !done[ id ] ) {
- done[ id ] = true;
- ret.push( array[ i ] );
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (e) {}
+
+ if ( old ) {
+ target[ "on" + type ] = old;
}
+
+ jQuery.event.triggered = false;
}
+ }
+ },
+
+ handle: function( event ) {
+ var all, handlers, namespaces, namespace, events;
- } catch( e ) {
- ret = array;
+ event = arguments[0] = jQuery.event.fix( event || window.event );
+ event.currentTarget = this;
+
+ // Namespaced event handlers
+ all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+ if ( !all ) {
+ namespaces = event.type.split(".");
+ event.type = namespaces.shift();
+ namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
}
- return ret;
+ var events = jQuery.data(this, "events"), handlers = events[ event.type ];
+
+ if ( events && handlers ) {
+ // Clone the handlers to prevent manipulation
+ handlers = handlers.slice(0);
+
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // 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 ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return event.result;
},
- grep: function( elems, callback, inv ) {
- var ret = [];
+ 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(" "),
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ )
- if ( !inv != !callback( elems[ i ], i ) )
- ret.push( elems[ i ] );
+ fix: function( event ) {
+ if ( event[ expando ] ) {
+ return event;
+ }
- return ret;
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = jQuery.Event( originalEvent );
+
+ for ( var i = this.props.length, prop; i; ) {
+ prop = this.props[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary
+ if ( !event.target ) {
+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+ }
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement ) {
+ event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+ }
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var doc = document.documentElement, body = document.body;
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
+ event.which = event.charCode || event.keyCode;
+ }
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button !== undefined ) {
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ }
+
+ return event;
},
- map: function( elems, callback ) {
- var ret = [];
+ // Deprecated, use jQuery.guid instead
+ guid: 1E8,
- // Go through the array, translating each of the items to their
- // new value (or values).
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- var value = callback( elems[ i ], i );
+ // Deprecated, use jQuery.proxy instead
+ proxy: jQuery.proxy,
- if ( value != null )
- ret[ ret.length ] = value;
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady,
+ teardown: jQuery.noop
+ },
+
+ live: {
+ add: function( handleObj ) {
+ jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: 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 );
+ }
+ }
+
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( this.setInterval ) {
+ this.onbeforeunload = eventHandle;
+ }
+
+ return false;
+ },
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
}
+ }
+};
- return ret.concat.apply( [], ret );
+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 ) {
+ return new jQuery.Event( src );
}
-});
-// Use of jQuery.browser is deprecated.
-// It's included for backwards compatibility and plugins,
-// although they should work to migrate away.
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+ // Event type
+ } else {
+ this.type = src;
+ }
-var userAgent = navigator.userAgent.toLowerCase();
+ // timeStamp is buggy for some events on Firefox(#3843)
+ // So we won't rely on the native value
+ this.timeStamp = now();
-// Figure out what browser is being used
-jQuery.browser = {
- version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
- safari: /webkit/.test( userAgent ),
- opera: /opera/.test( userAgent ),
- msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
- mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
+ // Mark it as fixed
+ this[ expando ] = true;
};
-jQuery.each({
- parent: function(elem){return elem.parentNode;},
- parents: function(elem){return jQuery.dir(elem,"parentNode");},
- next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
- prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
- nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
- prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
- siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
- children: function(elem){return jQuery.sibling(elem.firstChild);},
- contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
-}, function(name, fn){
- jQuery.fn[ name ] = function( selector ) {
- var ret = jQuery.map( this, fn );
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+ }
+ // otherwise set the returnValue property of the original event to false (IE)
+ e.returnValue = false;
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+
+ // 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;
+ }
+
+ 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 );
+ }
+
+ // assuming we've left the element since we most likely mousedover a xul element
+ } catch(e) { }
+},
- if ( selector && typeof selector == "string" )
- ret = jQuery.multiFilter( selector, ret );
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+ event.type = event.data;
+ jQuery.event.handle.apply( this, arguments );
+};
- return this.pushStack( jQuery.unique( ret ), name, selector );
+// Create mouseenter and mouseleave events
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ setup: function( data ) {
+ jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+ },
+ teardown: function( data ) {
+ jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+ }
};
});
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function(name, original){
- jQuery.fn[ name ] = function( selector ) {
- var ret = [], insert = jQuery( selector );
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ 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 );
+ }
+ });
+
+ 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 );
+ }
+ });
+
+ } else {
+ return false;
+ }
+ },
+
+ 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,
+
+ changeFilters,
+
+ getVal = function( elem ) {
+ var type = elem.type, val = elem.value;
+
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
+
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
+
+ } else if ( elem.nodeName.toLowerCase() === "select" ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
+
+ testChange = function testChange( e ) {
+ var elem = e.target, data, val;
+
+ if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
+ return;
+ }
+
+ data = jQuery.data( elem, "_change_data" );
+ val = getVal(elem);
+
+ // the current data will be also retrieved by beforeactivate
+ if ( e.type !== "focusout" || elem.type !== "radio" ) {
+ jQuery.data( elem, "_change_data", val );
+ }
+
+ if ( data === undefined || val === data ) {
+ return;
+ }
+
+ if ( data != null || val ) {
+ e.type = "change";
+ return jQuery.event.trigger( e, arguments[1], elem );
+ }
+ };
+
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
+
+ click: function( e ) {
+ var elem = e.target, type = elem.type;
+
+ 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;
+
+ 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) );
+ }
+ },
+
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
+
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+ }
+
+ return formElems.test( this.nodeName );
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
+
+ return formElems.test( this.nodeName );
+ }
+ };
+
+ changeFilters = jQuery.event.special.change.filters;
+}
+
+function trigger( type, elem, args ) {
+ args[0].type = type;
+ return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ this.addEventListener( orig, handler, true );
+ },
+ teardown: function() {
+ this.removeEventListener( orig, handler, true );
+ }
+ };
- 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 );
+ function handler( e ) {
+ e = jQuery.event.fix( e );
+ e.type = fix;
+ return jQuery.event.handle.call( this, e );
}
+ });
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+ jQuery.fn[ name ] = function( type, data, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" ) {
+ for ( var key in type ) {
+ this[ name ](key, data, type[key], fn);
+ }
+ return this;
+ }
+
+ if ( jQuery.isFunction( data ) ) {
+ fn = data;
+ data = undefined;
+ }
+
+ var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ }) : fn;
- return this.pushStack( ret, name, selector );
+ 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;
};
});
-jQuery.each({
- removeAttr: function( name ) {
- jQuery.attr( this, name, "" );
- if (this.nodeType == 1)
- this.removeAttribute( name );
- },
+jQuery.fn.extend({
+ unbind: function( type, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" && !type.preventDefault ) {
+ for ( var key in type ) {
+ this.unbind(key, type[key]);
+ }
- addClass: function( classNames ) {
- jQuery.className.add( this, classNames );
- },
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
+ }
- removeClass: function( classNames ) {
- jQuery.className.remove( this, classNames );
+ 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 );
+ });
},
- toggleClass: function( classNames, state ) {
- if( typeof state !== "boolean" )
- state = !jQuery.className.has( this, classNames );
- jQuery.className[ state ? "add" : "remove" ]( this, classNames );
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ var event = jQuery.Event( type );
+ event.preventDefault();
+ event.stopPropagation();
+ jQuery.event.trigger( event, data, this[0] );
+ return event.result;
+ }
},
- remove: function( selector ) {
- if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
- // Prevent memory leaks
- jQuery( "*", this ).add([this]).each(function(){
- jQuery.event.remove(this);
- jQuery.removeData(this);
- });
- if (this.parentNode)
- this.parentNode.removeChild( this );
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments, i = 1;
+
+ // link all the functions, so any of them can unbind this click handler
+ while ( i < args.length ) {
+ jQuery.proxy( fn, args[ i++ ] );
}
+
+ return this.click( jQuery.proxy( fn, function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ }));
},
- empty: function() {
- // Remove element nodes and prevent memory leaks
- jQuery(this).children().remove();
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+ 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(" ");
+
+ while ( (type = types[ i++ ]) != null ) {
+ 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
+ context.each(function(){
+ jQuery.event.add( this, liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ });
- // Remove any remaining nodes
- while ( this.firstChild )
- this.removeChild( this.firstChild );
+ } else {
+ // unbind live handler
+ context.unbind( liveConvert( type, selector ), fn );
+ }
+ }
+
+ return this;
}
-}, function(name, fn){
- jQuery.fn[ name ] = function(){
- return this.each( fn, arguments );
+});
+
+function liveHandler( event ) {
+ var stop, elems = [], selectors = [], args = arguments,
+ 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.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+ return;
+ }
+
+ 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 );
+
+ } else {
+ live.splice( j--, 1 );
+ }
+ }
+
+ match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+ for ( i = 0, l = match.length; i < l; i++ ) {
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( match[i].selector === handleObj.selector ) {
+ elem = match[i].elem;
+ related = null;
+
+ // Those two events require additional checking
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+ }
+
+ if ( !related || related !== elem ) {
+ elems.push({ elem: elem, handleObj: handleObj });
+ }
+ }
+ }
+ }
+
+ for ( i = 0, l = elems.length; i < l; i++ ) {
+ match = elems[i];
+ event.currentTarget = match.elem;
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
+ stop = false;
+ break;
+ }
+ }
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
+}
+
+jQuery.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( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( fn ) {
+ return fn ? this.bind( name, fn ) : this.trigger( name );
};
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
});
-// Helper function used by the dimensions and offset modules
-function num(elem, prop) {
- return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+ window.attachEvent("onunload", function() {
+ for ( var id in jQuery.cache ) {
+ if ( jQuery.cache[ id ].handle ) {
+ // Try/Catch is to handle iframes being unloaded, see #4280
+ try {
+ jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+ } catch(e) {}
+ }
+ }
+ });
}
-var expando = "jQuery" + now(), uuid = 0, windowData = {};
-
-jQuery.extend({
- cache: {},
-
- data: function( elem, name, data ) {
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ];
-
- // Compute a unique ID for the element
- if ( !id )
- id = elem[ expando ] = ++uuid;
-
- // Only generate the data cache if we're
- // trying to access or manipulate it
- if ( name && !jQuery.cache[ id ] )
- jQuery.cache[ id ] = {};
-
- // Prevent overriding the named cache with undefined values
- if ( data !== undefined )
- jQuery.cache[ id ][ name ] = data;
-
- // Return the named cache data, or the ID for the element
- return name ?
- jQuery.cache[ id ][ name ] :
- id;
- },
-
- removeData: function( elem, name ) {
- elem = elem == window ?
- windowData :
- elem;
-
- var id = elem[ expando ];
-
- // If we want to remove a specific section of the element's data
- if ( name ) {
- if ( jQuery.cache[ id ] ) {
- // Remove the section of cache data
- delete jQuery.cache[ id ][ name ];
-
- // If we've removed all the data, remove the element's cache
- name = "";
-
- for ( name in jQuery.cache[ id ] )
- break;
-
- if ( !name )
- jQuery.removeData( elem );
- }
-
- // 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 );
- }
-
- // Completely remove the data cache
- delete jQuery.cache[ id ];
- }
- },
- queue: function( elem, type, data ) {
- if ( elem ){
-
- type = (type || "fx") + "queue";
-
- var q = jQuery.data( elem, type );
-
- if ( !q || jQuery.isArray(data) )
- q = jQuery.data( elem, type, jQuery.makeArray(data) );
- else if( data )
- q.push( data );
-
- }
- return q;
- },
-
- dequeue: function( elem, type ){
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift();
-
- if( !type || type === "fx" )
- fn = queue[0];
-
- if( fn !== undefined )
- fn.call(elem);
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ){
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- if ( data === undefined && this.length )
- data = jQuery.data( this[0], key );
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
- } else
- return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
- jQuery.data( this, key, value );
- });
- },
-
- removeData: function( key ){
- return this.each(function(){
- jQuery.removeData( this, key );
- });
- },
- queue: function(type, data){
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined )
- return jQuery.queue( this[0], type );
-
- return this.each(function(){
- var queue = jQuery.queue( this, type, data );
-
- if( type == "fx" && queue.length == 1 )
- queue[0].call(this);
- });
- },
- dequeue: function(type){
- return this.each(function(){
- jQuery.dequeue( this, type );
- });
- }
-});/*!
- * Sizzle CSS Selector Engine - v0.9.3
+/*!
+ * Sizzle CSS Selector Engine - v1.0
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
done = 0,
- toString = Object.prototype.toString;
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+ baseHasDuplicate = false;
+ return 0;
+});
var Sizzle = function(selector, context, results, seed) {
results = results || [];
- context = context || document;
+ var origContext = context = context || document;
- if ( context.nodeType !== 1 && context.nodeType !== 9 )
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
+ }
if ( !selector || typeof selector !== "string" ) {
return results;
}
- var parts = [], m, set, checkSet, check, mode, extra, prune = true;
+ var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
+ soFar = selector;
// Reset the position of the chunker regexp (start from head)
- chunker.lastIndex = 0;
-
- while ( (m = chunker.exec(selector)) !== null ) {
+ while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+ soFar = m[3];
+
parts.push( m[1] );
if ( m[2] ) {
- extra = RegExp.rightContext;
+ extra = m[3];
break;
}
}
@@ -1458,38 +2682,51 @@ var Sizzle = function(selector, context, results, seed) {
while ( parts.length ) {
selector = parts.shift();
- if ( Expr.relative[ selector ] )
+ if ( Expr.relative[ selector ] ) {
selector += parts.shift();
-
+ }
+
set = posProcess( selector, set );
}
}
} else {
- var ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
- set = Sizzle.filter( ret.expr, ret.set );
-
- if ( parts.length > 0 ) {
- checkSet = makeArray(set);
- } else {
- prune = false;
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+ var ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
}
- while ( parts.length ) {
- var cur = parts.pop(), pop = cur;
+ if ( context ) {
+ var ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
- if ( !Expr.relative[ cur ] ) {
- cur = "";
+ if ( parts.length > 0 ) {
+ checkSet = makeArray(set);
} else {
- pop = parts.pop();
+ prune = false;
}
- if ( pop == null ) {
- pop = context;
- }
+ while ( parts.length ) {
+ var cur = parts.pop(), pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
- Expr.relative[ cur ]( checkSet, pop, isXML(context) );
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+ } else {
+ checkSet = parts = [];
}
}
@@ -1498,13 +2735,13 @@ var Sizzle = function(selector, context, results, seed) {
}
if ( !checkSet ) {
- throw "Syntax error, unrecognized expression: " + (cur || selector);
+ Sizzle.error( cur || selector );
}
if ( toString.call(checkSet) === "[object Array]" ) {
if ( !prune ) {
results.push.apply( results, checkSet );
- } else if ( context.nodeType === 1 ) {
+ } else if ( context && context.nodeType === 1 ) {
for ( var i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
results.push( set[i] );
@@ -1522,17 +2759,22 @@ var Sizzle = function(selector, context, results, seed) {
}
if ( extra ) {
- Sizzle( extra, context, results, seed );
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
- if ( sortOrder ) {
- hasDuplicate = false;
- results.sort(sortOrder);
+ return results;
+};
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
}
}
}
@@ -1555,8 +2797,9 @@ Sizzle.find = function(expr, context, isXML){
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
var type = Expr.order[i], match;
- if ( (match = Expr.match[ type ].exec( expr )) ) {
- var left = RegExp.leftContext;
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice(1,1);
if ( left.substr( left.length - 1 ) !== "\\" ) {
match[1] = (match[1] || "").replace(/\\/g, "");
@@ -1582,11 +2825,17 @@ Sizzle.filter = function(expr, set, inplace, not){
while ( expr && set.length ) {
for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var filter = Expr.filter[ type ], found, item, left = match[1];
anyFound = false;
- if ( curLoop == result ) {
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
result = [];
}
@@ -1637,9 +2886,9 @@ Sizzle.filter = function(expr, set, inplace, not){
}
// Improper expression
- if ( expr == old ) {
+ if ( expr === old ) {
if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
+ Sizzle.error( expr );
} else {
break;
}
@@ -1651,18 +2900,23 @@ Sizzle.filter = function(expr, set, inplace, not){
return curLoop;
};
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
var Expr = Sizzle.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\*_-]|\\.)+)/,
+ 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\(\)]*)+)\2\))?/
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
+ leftMatch: {},
attrMap: {
"class": "className",
"for": "htmlFor"
@@ -1673,20 +2927,20 @@ var Expr = Sizzle.selectors = {
}
},
relative: {
- "+": function(checkSet, part, isXML){
+ "+": function(checkSet, part){
var isPartStr = typeof part === "string",
isTag = isPartStr && !/\W/.test(part),
isPartStrNotTag = isPartStr && !isTag;
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
+ if ( isTag ) {
+ part = part.toLowerCase();
}
for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
if ( (elem = checkSet[i]) ) {
while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
elem || false :
elem === part;
}
@@ -1696,17 +2950,17 @@ var Expr = Sizzle.selectors = {
Sizzle.filter( part, checkSet, true );
}
},
- ">": function(checkSet, part, isXML){
+ ">": function(checkSet, part){
var isPartStr = typeof part === "string";
if ( isPartStr && !/\W/.test(part) ) {
- part = isXML ? part : part.toUpperCase();
+ part = part.toLowerCase();
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
}
}
} else {
@@ -1727,8 +2981,8 @@ var Expr = Sizzle.selectors = {
"": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
- if ( !part.match(/\W/) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
@@ -1737,8 +2991,8 @@ var Expr = Sizzle.selectors = {
"~": function(checkSet, part, isXML){
var doneName = done++, checkFn = dirCheck;
- if ( typeof part === "string" && !part.match(/\W/) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ var nodeCheck = part = part.toLowerCase();
checkFn = dirNodeCheck;
}
@@ -1752,7 +3006,7 @@ var Expr = Sizzle.selectors = {
return m ? [m] : [];
}
},
- NAME: function(match, context, isXML){
+ NAME: function(match, context){
if ( typeof context.getElementsByName !== "undefined" ) {
var ret = [], results = context.getElementsByName(match[1]);
@@ -1779,9 +3033,10 @@ var Expr = Sizzle.selectors = {
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
- if ( !inplace )
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
result.push( elem );
+ }
} else if ( inplace ) {
curLoop[i] = false;
}
@@ -1794,14 +3049,13 @@ var Expr = Sizzle.selectors = {
return match[1].replace(/\\/g, "");
},
TAG: function(match, curLoop){
- for ( var i = 0; curLoop[i] === false; i++ ){}
- return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
+ return match[1].toLowerCase();
},
CHILD: function(match){
- if ( match[1] == "nth" ) {
+ if ( match[1] === "nth" ) {
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
// calculate the numbers (first)n+(last) including if they are negative
@@ -1830,7 +3084,7 @@ var Expr = Sizzle.selectors = {
PSEUDO: function(match, curLoop, inplace, result, not){
if ( match[1] === "not" ) {
// If we're dealing with a complex expression, or a simple one
- if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
@@ -1903,7 +3157,7 @@ var Expr = Sizzle.selectors = {
return "reset" === elem.type;
},
button: function(elem){
- return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
},
input: function(elem){
return /input|select|textarea|button/i.test(elem.nodeName);
@@ -1929,10 +3183,10 @@ var Expr = Sizzle.selectors = {
return i > match[3] - 0;
},
nth: function(elem, i, match){
- return match[3] - 0 == i;
+ return match[3] - 0 === i;
},
eq: function(elem, i, match){
- return match[3] - 0 == i;
+ return match[3] - 0 === i;
}
},
filter: {
@@ -1942,7 +3196,7 @@ var Expr = Sizzle.selectors = {
if ( filter ) {
return filter( elem, i, match, array );
} else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
} else if ( name === "not" ) {
var not = match[3];
@@ -1953,6 +3207,8 @@ var Expr = Sizzle.selectors = {
}
return true;
+ } else {
+ Sizzle.error( "Syntax error, unrecognized expression: " + name );
}
},
CHILD: function(elem, match){
@@ -1960,20 +3216,26 @@ var Expr = Sizzle.selectors = {
switch (type) {
case 'only':
case 'first':
- while (node = node.previousSibling) {
- if ( node.nodeType === 1 ) return false;
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ if ( type === "first" ) {
+ return true;
}
- if ( type == 'first') return true;
node = elem;
case 'last':
- while (node = node.nextSibling) {
- if ( node.nodeType === 1 ) return false;
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
}
return true;
case 'nth':
var first = match[2], last = match[3];
- if ( first == 1 && last == 0 ) {
+ if ( first === 1 && last === 0 ) {
return true;
}
@@ -1991,10 +3253,10 @@ var Expr = Sizzle.selectors = {
}
var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
+ if ( first === 0 ) {
+ return diff === 0;
} else {
- return ( diff % first == 0 && diff / first >= 0 );
+ return ( diff % first === 0 && diff / first >= 0 );
}
}
},
@@ -2002,7 +3264,7 @@ var Expr = Sizzle.selectors = {
return elem.nodeType === 1 && elem.getAttribute("id") === match;
},
TAG: function(elem, match){
- return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
},
CLASS: function(elem, match){
return (" " + (elem.className || elem.getAttribute("class")) + " ")
@@ -2030,7 +3292,7 @@ var Expr = Sizzle.selectors = {
!check ?
value && result !== false :
type === "!=" ?
- value != check :
+ value !== check :
type === "^=" ?
value.indexOf(check) === 0 :
type === "$=" ?
@@ -2052,11 +3314,14 @@ var Expr = Sizzle.selectors = {
var origPOS = Expr.match.POS;
for ( var type in Expr.match ) {
- Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
+ return "\\" + (num - 0 + 1);
+ }));
}
var makeArray = function(array, results) {
- array = Array.prototype.slice.call( array );
+ array = Array.prototype.slice.call( array, 0 );
if ( results ) {
results.push.apply( results, array );
@@ -2068,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 );
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
// Provide a fallback method if it does not work
} catch(e){
@@ -2098,6 +3365,13 @@ var sortOrder;
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
if ( ret === 0 ) {
hasDuplicate = true;
@@ -2106,6 +3380,13 @@ if ( document.documentElement.compareDocumentPosition ) {
};
} else if ( "sourceIndex" in document.documentElement ) {
sortOrder = function( a, b ) {
+ if ( !a.sourceIndex || !b.sourceIndex ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.sourceIndex ? -1 : 1;
+ }
+
var ret = a.sourceIndex - b.sourceIndex;
if ( ret === 0 ) {
hasDuplicate = true;
@@ -2114,11 +3395,18 @@ if ( document.documentElement.compareDocumentPosition ) {
};
} else if ( document.createRange ) {
sortOrder = function( a, b ) {
+ if ( !a.ownerDocument || !b.ownerDocument ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.ownerDocument ? -1 : 1;
+ }
+
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.selectNode(a);
- aRange.collapse(true);
- bRange.selectNode(b);
- bRange.collapse(true);
+ aRange.setStart(a, 0);
+ aRange.setEnd(a, 0);
+ bRange.setStart(b, 0);
+ bRange.setEnd(b, 0);
var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
if ( ret === 0 ) {
hasDuplicate = true;
@@ -2127,13 +3415,33 @@ if ( document.documentElement.compareDocumentPosition ) {
};
}
+// Utility function for retreiving the text value of an array of DOM nodes
+function getText( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+}
+
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
- var form = document.createElement("form"),
+ var form = document.createElement("div"),
id = "script" + (new Date).getTime();
- form.innerHTML = "<input name='" + id + "'/>";
+ form.innerHTML = "<a name='" + id + "'/>";
// Inject it into the root element, check its status, and remove it quickly
var root = document.documentElement;
@@ -2141,7 +3449,7 @@ if ( document.documentElement.compareDocumentPosition ) {
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
- if ( !!document.getElementById( id ) ) {
+ if ( document.getElementById( id ) ) {
Expr.find.ID = function(match, context, isXML){
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
@@ -2156,6 +3464,7 @@ if ( document.documentElement.compareDocumentPosition ) {
}
root.removeChild( form );
+ root = form = null; // release memory in IE
})();
(function(){
@@ -2196,69 +3505,75 @@ if ( document.documentElement.compareDocumentPosition ) {
return elem.getAttribute("href", 2);
};
}
+
+ div = null; // release memory in IE
})();
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "<p class='TEST'></p>";
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle, div = document.createElement("div");
+ div.innerHTML = "<p class='TEST'></p>";
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
- Sizzle = function(query, context, extra, seed){
- context = context || document;
+ Sizzle = function(query, context, extra, seed){
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(e){}
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && context.nodeType === 9 && !isXML(context) ) {
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(e){}
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
}
-
- return oldSizzle(query, context, extra, seed);
- };
- Sizzle.find = oldSizzle.find;
- Sizzle.filter = oldSizzle.filter;
- Sizzle.selectors = oldSizzle.selectors;
- Sizzle.matches = oldSizzle.matches;
-})();
+ div = null; // release memory in IE
+ })();
+}
-if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
+(function(){
var div = document.createElement("div");
+
div.innerHTML = "<div class='test e'></div><div class='test'></div>";
// Opera can't find a second classname (in 9.6)
- if ( div.getElementsByClassName("e").length === 0 )
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
return;
+ }
// Safari caches class attributes, doesn't catch changes (in 3.2)
div.lastChild.className = "e";
- if ( div.getElementsByClassName("e").length === 1 )
+ if ( div.getElementsByClassName("e").length === 1 ) {
return;
-
+ }
+
Expr.order.splice(1, 0, "CLASS");
Expr.find.CLASS = function(match, context, isXML) {
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
+
+ div = null; // release memory in IE
})();
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- var sibDir = dir == "previousSibling" && !isXML;
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
- if ( sibDir && elem.nodeType === 1 ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
elem = elem[dir];
var match = false;
@@ -2273,7 +3588,7 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
elem.sizset = i;
}
- if ( elem.nodeName === cur ) {
+ if ( elem.nodeName.toLowerCase() === cur ) {
match = elem;
break;
}
@@ -2287,14 +3602,9 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
}
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- var sibDir = dir == "previousSibling" && !isXML;
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
if ( elem ) {
- if ( sibDir && elem.nodeType === 1 ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
elem = elem[dir];
var match = false;
@@ -2329,15 +3639,17 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
}
}
-var contains = document.compareDocumentPosition ? function(a, b){
- return a.compareDocumentPosition(b) & 16;
+var contains = document.compareDocumentPosition ? function(a, b){
+ return !!(a.compareDocumentPosition(b) & 16);
} : function(a, b){
return a !== b && (a.contains ? a.contains(b) : true);
};
var isXML = function(elem){
- return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
- !!elem.ownerDocument && isXML( elem.ownerDocument );
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
};
var posProcess = function(selector, context){
@@ -2362,872 +3674,1122 @@ var posProcess = function(selector, context){
// EXPOSE
jQuery.find = Sizzle;
-jQuery.filter = Sizzle.filter;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = getText;
+jQuery.isXMLDoc = isXML;
+jQuery.contains = contains;
-Sizzle.selectors.filters.hidden = function(elem){
- return elem.offsetWidth === 0 || elem.offsetHeight === 0;
-};
+return;
-Sizzle.selectors.filters.visible = function(elem){
- return elem.offsetWidth > 0 || elem.offsetHeight > 0;
-};
+window.Sizzle = Sizzle;
-Sizzle.selectors.filters.animated = function(elem){
- return jQuery.grep(jQuery.timers, function(fn){
- return elem === fn.elem;
- }).length;
-};
+})();
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ slice = Array.prototype.slice;
+
+// Implement the identical functionality for filter and not
+var winnow = function( elements, qualifier, keep ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) === keep;
+ });
-jQuery.multiFilter = function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return (elem === qualifier) === keep;
+ });
- return Sizzle.matches(expr, elems);
-};
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
-jQuery.dir = function( elem, dir ){
- var matched = [], cur = elem[dir];
- while ( cur && cur != document ) {
- if ( cur.nodeType == 1 )
- matched.push( cur );
- cur = cur[dir];
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
}
- return matched;
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+ });
};
-jQuery.nth = function(cur, result, dir, elem){
- result = result || 1;
- var num = 0;
+jQuery.fn.extend({
+ find: function( selector ) {
+ var ret = this.pushStack( "", "find", selector ), length = 0;
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( var n = length; n < ret.length; n++ ) {
+ for ( var r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
- for ( ; cur; cur = cur[dir] )
- if ( cur.nodeType == 1 && ++num == result )
- break;
+ return ret;
+ },
- return cur;
-};
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
-jQuery.sibling = function(n, elem){
- var r = [];
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType == 1 && n != elem )
- r.push( n );
- }
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && jQuery.filter( selector, this ).length > 0;
+ },
- return r;
-};
+ closest: function( selectors, context ) {
+ if ( jQuery.isArray( selectors ) ) {
+ var ret = [], cur = this[0], match, matches = {}, selector;
-return;
+ if ( cur && selectors.length ) {
+ for ( var i = 0, l = selectors.length; i < l; i++ ) {
+ selector = selectors[i];
-window.Sizzle = Sizzle;
+ if ( !matches[selector] ) {
+ matches[selector] = jQuery.expr.match.POS.test( selector ) ?
+ jQuery( selector, context || this.context ) :
+ selector;
+ }
+ }
-})();
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( selector in matches ) {
+ match = matches[selector];
- // Bind an event to an element
- // Original by Dean Edwards
- add: function(elem, types, handler, data) {
- if ( elem.nodeType == 3 || elem.nodeType == 8 )
- return;
+ if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+ ret.push({ selector: selector, elem: cur });
+ delete matches[selector];
+ }
+ }
+ cur = cur.parentNode;
+ }
+ }
- // For whatever reason, IE has trouble passing the window object
- // around, causing it to be cloned in the process
- if ( elem.setInterval && elem != window )
- elem = window;
+ return ret;
+ }
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid )
- handler.guid = this.guid++;
+ var pos = jQuery.expr.match.POS.test( selectors ) ?
+ jQuery( selectors, context || this.context ) : null;
- // if data is passed, bind to handler
- if ( data !== undefined ) {
- // Create temporary function pointer to original handler
- var fn = handler;
+ return this.map(function( i, cur ) {
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
+ return cur;
+ }
+ cur = cur.parentNode;
+ }
+ return null;
+ });
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ if ( !elem || typeof elem === "string" ) {
+ return jQuery.inArray( this[0],
+ // If it receives a string, the selector is used
+ // If it receives nothing, the siblings are used
+ elem ? jQuery( elem ) : this.parent().children() );
+ }
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context || this.context ) :
+ jQuery.makeArray( selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
- // Create unique handler function, wrapped around original handler
- handler = this.proxy( fn );
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
- // Store data in unique handler
- handler.data = data;
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
}
- // Init the element's event structure
- var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
- handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", 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(arguments.callee.elem, arguments) :
- undefined;
- });
- // 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;
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- jQuery.each(types.split(/\s+/), function(index, type) {
- // Namespaced event handlers
- var namespaces = type.split(".");
- type = namespaces.shift();
- handler.type = namespaces.slice().sort().join(".");
+ ret = this.length > 1 ? jQuery.unique( ret ) : ret;
- // Get the current list of functions bound to this event
- var handlers = events[type];
-
- if ( jQuery.event.specialAll[type] )
- jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
- // Init the event handler queue
- if (!handlers) {
- handlers = events[type] = {};
+ return this.pushStack( ret, name, slice.call(arguments).join(",") );
+ };
+});
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
- // Bind the global event handler to the element
- if (elem.addEventListener)
- elem.addEventListener(type, handle, false);
- else if (elem.attachEvent)
- elem.attachEvent("on" + type, handle);
- }
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [], cur = elem[dir];
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
}
+ cur = cur[dir];
+ }
+ return matched;
+ },
- // Add the function to the element's handler list
- handlers[handler.guid] = handler;
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
- // Keep track of which events have been used, for global triggering
- jQuery.event.global[type] = true;
- });
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
- // Nullify elem to prevent memory leaks in IE
- elem = null;
+ return cur;
},
- guid: 1,
- global: {},
+ sibling: function( n, elem ) {
+ var r = [];
- // Detach an event or set of events from an element
- remove: function(elem, types, handler) {
- // don't do events on text and comment nodes
- if ( elem.nodeType == 3 || elem.nodeType == 8 )
- return;
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
- var events = jQuery.data(elem, "events"), ret, index;
+ return r;
+ }
+});
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
+ rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ 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 ) ?
+ all :
+ front + "></" + tag + ">";
+ },
+ wrapMap = {
+ 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, "", "" ]
+ };
- if ( events ) {
- // Unbind all events for the element
- if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
- for ( var 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;
- }
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
- // Handle multiple events seperated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- jQuery.each(types.split(/\s+/), function(index, type){
- // Namespaced event handlers
- var namespaces = type.split(".");
- type = namespaces.shift();
- var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
-
- if ( events[type] ) {
- // remove the given handler for the given type
- if ( handler )
- 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 ( namespace.test(events[type][handle].type) )
- delete events[type][handle];
-
- if ( jQuery.event.specialAll[type] )
- jQuery.event.specialAll[type].teardown.call(elem, namespaces);
-
- // remove generic event handler if no more handlers exist
- for ( ret in events[type] ) break;
- if ( !ret ) {
- if ( !jQuery.event.special[type] || jQuery.event.special[type].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];
- }
- }
- });
- }
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
- // 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;
- jQuery.removeData( elem, "events" );
- jQuery.removeData( elem, "handle" );
- }
+jQuery.fn.extend({
+ text: function( text ) {
+ if ( jQuery.isFunction(text) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.text( text.call(this, i, self.text()) );
+ });
+ }
+
+ if ( typeof text !== "object" && text !== undefined ) {
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
+
+ return jQuery.text( this );
},
- // bubbling is internal
- trigger: function( event, data, elem, bubbling ) {
- // Event object or event type
- var type = event.type || event;
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
- if( !bubbling ){
- event = typeof event === "object" ?
- // jQuery.Event object
- event[expando] ? event :
- // Object literal
- jQuery.extend( jQuery.Event(type), event ) :
- // Just the event type (string)
- jQuery.Event(type);
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
- if ( type.indexOf("!") >= 0 ) {
- event.type = type = type.slice(0, -1);
- event.exclusive = true;
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
}
- // Handle a global trigger
- if ( !elem ) {
- // Don't bubble custom events when global (to avoid too much overhead)
- event.stopPropagation();
- // Only trigger if we've ever bound an event for it
- if ( this.global[type] )
- jQuery.each( jQuery.cache, function(){
- if ( this.events && this.events[type] )
- jQuery.event.trigger( event, data, this.handle.elem );
- });
- }
+ wrap.map(function() {
+ var elem = this;
- // Handle triggering a single element
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
- // don't do events on text and comment nodes
- if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
- return undefined;
-
- // Clean up in case it is reused
- event.result = undefined;
- event.target = elem;
-
- // Clone the incoming data, if any
- data = jQuery.makeArray(data);
- data.unshift( event );
+ return elem;
+ }).append(this);
}
- event.currentTarget = elem;
+ return this;
+ },
- // Trigger the event, it is assumed that "handle" is a function
- var handle = jQuery.data(elem, "handle");
- if ( handle )
- handle.apply( elem, data );
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
- // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
- if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
- event.result = false;
+ return this.each(function() {
+ var self = jQuery( this ), contents = self.contents();
- // Trigger the native events (except for clicks on links)
- if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
- this.triggered = true;
- try {
- elem[ type ]();
- // prevent IE from throwing an error for some hidden elements
- } catch (e) {}
- }
+ if ( contents.length ) {
+ contents.wrapAll( html );
- this.triggered = false;
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ return this.each(function() {
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
- if ( !event.isPropagationStopped() ) {
- var parent = elem.parentNode || elem.ownerDocument;
- if ( parent )
- jQuery.event.trigger(event, data, parent, true);
+ before: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ } else if ( arguments.length ) {
+ var set = jQuery(arguments[0]);
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
}
},
- handle: function(event) {
- // returned undefined or false
- var all, handlers;
+ after: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery(arguments[0]).toArray() );
+ 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 ] );
+ }
- event = arguments[0] = jQuery.event.fix( event || window.event );
- event.currentTarget = this;
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
- // Namespaced event handlers
- var namespaces = event.type.split(".");
- event.type = namespaces.shift();
+ return this;
+ },
- // Cache this now, all = true means, any handler
- all = !namespaces.length && !event.exclusive;
+ 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 );
+ }
+ }
- var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
+ return this;
+ },
- handlers = ( jQuery.data(this, "events") || {} )[event.type];
+ clone: function( events ) {
+ // Do the clone
+ var ret = this.map(function() {
+ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var html = this.outerHTML, ownerDocument = this.ownerDocument;
+ if ( !html ) {
+ var div = ownerDocument.createElement("div");
+ div.appendChild( this.cloneNode(true) );
+ html = div.innerHTML;
+ }
- for ( var j in handlers ) {
- var handler = handlers[j];
+ 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);
+ }
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true ) {
+ cloneCopyEvent( this, ret );
+ cloneCopyEvent( this.find("*"), ret.find("*") );
+ }
- // 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;
+ // Return the cloned set
+ return ret;
+ },
+
+ html: function( value ) {
+ if ( value === undefined ) {
+ return this[0] && this[0].nodeType === 1 ?
+ this[0].innerHTML.replace(rinlinejQuery, "") :
+ null;
- var ret = handler.apply(this, arguments);
+ // See if we can take a shortcut and just use innerHTML
+ } else if ( typeof value === "string" && !rnocache.test( value ) &&
+ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+ !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
- if( ret !== undefined ){
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
+ value = value.replace(rxhtmlTag, fcloseTag);
+
+ try {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( this[i].nodeType === 1 ) {
+ jQuery.cleanData( this[i].getElementsByTagName("*") );
+ this[i].innerHTML = value;
}
}
- if( event.isImmediatePropagationStopped() )
- break;
-
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {
+ this.empty().append( value );
}
+
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery(this), old = self.html();
+ self.empty().append(function(){
+ return value.call( this, i, old );
+ });
+ });
+
+ } else {
+ this.empty().append( value );
}
+
+ return this;
},
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+ replaceWith: function( value ) {
+ 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 ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
- fix: function(event) {
- if ( event[expando] )
- return event;
+ if ( typeof value !== "string" ) {
+ value = jQuery(value).detach();
+ }
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
+ return this.each(function() {
+ var next = this.nextSibling, parent = this.parentNode;
- for ( var i = this.props.length, prop; i; ){
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
+ jQuery(this).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ } else {
+ return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
+ },
- // Fix target property, if necessary
- if ( !event.target )
- event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
- // check if target is a textnode (safari)
- if ( event.target.nodeType == 3 )
- event.target = event.target.parentNode;
+ domManip: function( args, table, callback ) {
+ var results, first, value = args[0], scripts = [], fragment, parent;
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement )
- event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback, true );
+ });
+ }
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var doc = document.documentElement, body = document.body;
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ self.domManip( args, table, callback );
+ });
}
- // Add which for key events
- if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
- event.which = event.charCode || event.keyCode;
+ if ( this[0] ) {
+ parent = value && value.parentNode;
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey )
- event.metaKey = event.ctrlKey;
+ // If we're in a fragment, just use that instead of building a new one
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
- // Add which for click: 1 == left; 2 == middle; 3 == right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button )
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ } else {
+ results = buildFragment( args, this, scripts );
+ }
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
- return event;
- },
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ callback.call(
+ table ?
+ root(this[i], first) :
+ this[i],
+ i > 0 || results.cacheable || this.length > 1 ?
+ fragment.cloneNode(true) :
+ fragment
+ );
+ }
+ }
- proxy: function( fn, proxy ){
- proxy = proxy || function(){ return fn.apply(this, arguments); };
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
- // So proxy can be declared as an argument
- return proxy;
- },
+ if ( scripts.length ) {
+ jQuery.each( scripts, evalScript );
+ }
+ }
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: bindReady,
- teardown: function() {}
+ return this;
+
+ function root( elem, cur ) {
+ return jQuery.nodeName(elem, "table") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
}
- },
-
- specialAll: {
- live: {
- setup: function( selector, namespaces ){
- jQuery.event.add( this, namespaces[0], liveHandler );
- },
- teardown: function( namespaces ){
- if ( namespaces.length ) {
- var remove = 0, name = 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 );
+ }
+});
+
+function cloneCopyEvent(orig, ret) {
+ var i = 0;
+
+ ret.each(function() {
+ if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+ return;
+ }
+
+ var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( var type in events ) {
+ for ( var handler in events[ type ] ) {
+ jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
}
+ });
+}
+
+function buildFragment( args, nodes, scripts ) {
+ 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] )) ) {
+
+ cacheable = true;
+ cacheresults = jQuery.fragments[ args[0] ];
+ if ( cacheresults ) {
+ if ( cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ }
}
-};
-jQuery.Event = function( src ){
- // Allow instantiation without the 'new' keyword
- if( !this.preventDefault )
- return new jQuery.Event(src);
-
- // Event object
- if( src && src.type ){
- this.originalEvent = src;
- this.type = src.type;
- // Event type
- }else
- this.type = src;
+ if ( !fragment ) {
+ fragment = doc.createDocumentFragment();
+ jQuery.clean( args, doc, fragment, scripts );
+ }
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = now();
-
- // Mark it as fixed
- this[expando] = true;
-};
+ if ( cacheable ) {
+ jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+ }
-function returnFalse(){
- return false;
-}
-function returnTrue(){
- return true;
+ return { fragment: fragment, cacheable: cacheable };
}
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if( !e )
- return;
- // if preventDefault exists run it on the original event
- if (e.preventDefault)
- e.preventDefault();
- // otherwise set the returnValue property of the original event to false (IE)
- e.returnValue = false;
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
+jQuery.fragments = {};
- var e = this.originalEvent;
- if( !e )
- return;
- // if stopPropagation exists run it on the original event
- if (e.stopPropagation)
- e.stopPropagation();
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation:function(){
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-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 )
- try { parent = parent.parentNode; }
- catch(e) { parent = this; }
-
- 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 );
- }
-};
-
-jQuery.each({
- mouseover: 'mouseenter',
- mouseout: 'mouseleave'
-}, function( orig, fix ){
- jQuery.event.special[ fix ] = {
- setup: function(){
- jQuery.event.add( this, orig, withinElement, fix );
- },
- teardown: function(){
- jQuery.event.remove( this, orig, withinElement );
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ 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 );
}
- };
+ };
});
-jQuery.fn.extend({
- bind: function( type, data, fn ) {
- return type == "unload" ? this.one(type, data, fn) : this.each(function(){
- jQuery.event.add( this, type, fn || data, fn && data );
- });
- },
+jQuery.extend({
+ clean: function( elems, context, fragment, scripts ) {
+ context = context || document;
- one: function( type, data, fn ) {
- var one = jQuery.event.proxy( fn || data, function(event) {
- jQuery(this).unbind(event, one);
- return (fn || data).apply( this, arguments );
- });
- return this.each(function(){
- jQuery.event.add( this, type, one, fn && data);
- });
- },
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" ) {
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ }
- unbind: function( type, fn ) {
- return this.each(function(){
- jQuery.event.remove( this, type, fn );
- });
- },
+ var ret = [];
- trigger: function( type, data ) {
- return this.each(function(){
- jQuery.event.trigger( type, data, this );
- });
- },
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
- triggerHandler: function( type, data ) {
- if( this[0] ){
- var event = jQuery.Event(type);
- event.preventDefault();
- event.stopPropagation();
- jQuery.event.trigger( event, data, this[0] );
- return event.result;
- }
- },
+ if ( !elem ) {
+ continue;
+ }
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments, i = 1;
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" && !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
- // link all the functions, so any of them can unbind this click handler
- while( i < args.length )
- jQuery.event.proxy( fn, args[i++] );
+ } else if ( typeof elem === "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, fcloseTag);
- return this.click( jQuery.event.proxy( fn, function(event) {
- // Figure out which function to execute
- this.lastToggle = ( this.lastToggle || 0 ) % i;
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
- // Make sure that clicks stop
- event.preventDefault();
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
- // and execute the function
- return args[ this.lastToggle++ ].apply( this, arguments ) || false;
- }));
- },
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
- hover: function(fnOver, fnOut) {
- return this.mouseenter(fnOver).mouseleave(fnOut);
- },
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
- ready: function(fn) {
- // Attach the listeners
- bindReady();
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
- // If the DOM is already ready
- if ( jQuery.isReady )
- // Execute the function immediately
- fn.call( document, jQuery );
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
- // Otherwise, remember the function for later
- else
- // Add the function to the wait list
- jQuery.readyList.push( fn );
+ for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
- return this;
- },
-
- live: function( type, fn ){
- var proxy = jQuery.event.proxy( fn );
- proxy.guid += this.selector + type;
+ }
- jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
- return this;
+ elem = div.childNodes;
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } 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"))) );
+ }
+ fragment.appendChild( ret[i] );
+ }
+ }
+ }
+
+ return ret;
},
- die: function( type, fn ){
- jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
- return this;
+ cleanData: function( elems ) {
+ 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 ];
+ }
+ }
}
});
+// exclude the following css properties to add px
+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+ ralpha = /alpha\([^)]*\)/,
+ ropacity = /opacity=([^)]*)/,
+ rfloat = /float/i,
+ rdashAlpha = /-([a-z])/ig,
+ rupper = /([A-Z])/g,
+ rnumpx = /^-?\d+(?:px)?$/i,
+ rnum = /^-?\d/,
+
+ cssShow = { position: "absolute", visibility: "hidden", display:"block" },
+ cssWidth = [ "Left", "Right" ],
+ cssHeight = [ "Top", "Bottom" ],
+
+ // cache check for defaultView.getComputedStyle
+ getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
+ // normalize float css property
+ styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
-function liveHandler( event ){
- var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
- stop = true,
- elems = [];
-
- jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
- if ( check.test(fn.type) ) {
- var elem = jQuery(event.target).closest(fn.data)[0];
- if ( elem )
- elems.push({ elem: elem, fn: fn });
+jQuery.fn.css = function( name, value ) {
+ return access( this, name, value, true, function( elem, name, value ) {
+ if ( value === undefined ) {
+ return jQuery.curCSS( elem, name );
+ }
+
+ if ( typeof value === "number" && !rexclude.test(name) ) {
+ value += "px";
}
- });
- elems.sort(function(a,b) {
- return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
- });
-
- jQuery.each(elems, function(){
- if ( this.fn.call(this.elem, event, this.fn.data) === false )
- return (stop = false);
+ jQuery.style( elem, name, value );
});
+};
- return stop;
-}
+jQuery.extend({
+ style: function( elem, name, value ) {
+ // don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
-function liveConvert(type, selector){
- return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
-}
+ // ignore negative width and height values #1599
+ if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
+ value = undefined;
+ }
-jQuery.extend({
- isReady: false,
- readyList: [],
- // Handle when the DOM is ready
- ready: function() {
- // Make sure that the DOM is not already loaded
- if ( !jQuery.isReady ) {
- // Remember that the DOM is ready
- jQuery.isReady = true;
+ var style = elem.style || elem, set = value !== undefined;
- // If there are functions bound, to execute
- if ( jQuery.readyList ) {
- // Execute all of them
- jQuery.each( jQuery.readyList, function(){
- this.call( document, jQuery );
- });
+ // IE uses filters for opacity
+ if ( !jQuery.support.opacity && name === "opacity" ) {
+ if ( set ) {
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
- // Reset the list of functions
- jQuery.readyList = null;
+ // Set the alpha filter to set the opacity
+ var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";
+ var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
+ style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
}
- // Trigger any bound ready events
- jQuery(document).triggerHandler("ready");
+ return style.filter && style.filter.indexOf("opacity=") >= 0 ?
+ (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
+ "";
}
- }
-});
-var readyBound = false;
+ // Make sure we're using the right name for getting the float value
+ if ( rfloat.test( name ) ) {
+ name = styleFloat;
+ }
-function bindReady(){
- if ( readyBound ) return;
- readyBound = true;
+ name = name.replace(rdashAlpha, fcamelCase);
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", function(){
- document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
- jQuery.ready();
- }, false );
+ if ( set ) {
+ style[ name ] = value;
+ }
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent("onreadystatechange", function(){
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", arguments.callee );
- jQuery.ready();
+ return style[ name ];
+ },
+
+ css: function( elem, name, force, extra ) {
+ if ( name === "width" || name === "height" ) {
+ var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;
+
+ function getWH() {
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+ if ( extra === "border" ) {
+ return;
+ }
+
+ jQuery.each( which, function() {
+ if ( !extra ) {
+ val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+ }
+
+ if ( extra === "margin" ) {
+ val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+ } else {
+ val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+ }
+ });
+ }
+
+ if ( elem.offsetWidth !== 0 ) {
+ getWH();
+ } else {
+ jQuery.swap( elem, props, getWH );
}
- });
- // If IE and not an iframe
- // continually check to see if the document is ready
- if ( document.documentElement.doScroll && window == window.top ) (function(){
- if ( jQuery.isReady ) return;
+ return Math.max(0, Math.round(val));
+ }
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch( error ) {
- setTimeout( arguments.callee, 0 );
- return;
+ return jQuery.curCSS( elem, name, force );
+ },
+
+ curCSS: function( elem, name, force ) {
+ var ret, style = elem.style, filter;
+
+ // IE uses filters for opacity
+ if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
+ ret = ropacity.test(elem.currentStyle.filter || "") ?
+ (parseFloat(RegExp.$1) / 100) + "" :
+ "";
+
+ return ret === "" ?
+ "1" :
+ ret;
+ }
+
+ // Make sure we're using the right name for getting the float value
+ if ( rfloat.test( name ) ) {
+ name = styleFloat;
+ }
+
+ if ( !force && style && style[ name ] ) {
+ ret = style[ name ];
+
+ } else if ( getComputedStyle ) {
+
+ // Only "float" is needed here
+ if ( rfloat.test( name ) ) {
+ name = "float";
}
- // and execute any waiting functions
- jQuery.ready();
- })();
- }
+ name = name.replace( rupper, "-$1" ).toLowerCase();
- // A fallback to window.onload, that will always work
- jQuery.event.add( window, "load", jQuery.ready );
-}
+ var defaultView = elem.ownerDocument.defaultView;
-jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
- "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
- "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){
+ if ( !defaultView ) {
+ return null;
+ }
- // Handle event binding
- jQuery.fn[name] = function(fn){
- return fn ? this.bind(name, fn) : this.trigger(name);
- };
-});
+ var computedStyle = defaultView.getComputedStyle( elem, null );
-// Prevent memory leaks in IE
-// And prevent errors on refresh with events like mouseover in other browsers
-// Window isn't included so as not to unbind existing unload events
-jQuery( window ).bind( 'unload', function(){
- for ( var id in jQuery.cache )
- // Skip the window
- if ( id != 1 && jQuery.cache[ id ].handle )
- jQuery.event.remove( jQuery.cache[ id ].handle.elem );
-});
-(function(){
+ if ( computedStyle ) {
+ ret = computedStyle.getPropertyValue( name );
+ }
- jQuery.support = {};
+ // We should always get a number back from opacity
+ if ( name === "opacity" && ret === "" ) {
+ ret = "1";
+ }
- var root = document.documentElement,
- script = document.createElement("script"),
- div = document.createElement("div"),
- id = "script" + (new Date).getTime();
+ } else if ( elem.currentStyle ) {
+ var camelCase = name.replace(rdashAlpha, fcamelCase);
- div.style.display = "none";
- div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
- var all = div.getElementsByTagName("*"),
- a = div.getElementsByTagName("a")[0];
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return;
- }
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+ // Remember the original values
+ var left = style.left, rsLeft = elem.runtimeStyle.left;
- jQuery.support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: div.firstChild.nodeType == 3,
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that you can get all elements in an <object> element
- // IE 7 always returns no results
- objectAll: !!div.getElementsByTagName("object")[0]
- .getElementsByTagName("*").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText insted)
- style: /red/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: a.getAttribute("href") === "/a",
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- opacity: a.style.opacity === "0.5",
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ style.left = camelCase === "fontSize" ? "1em" : (ret || 0);
+ ret = style.pixelLeft + "px";
- // Will be defined later
- scriptEval: false,
- noCloneEvent: true,
- boxModel: null
- };
-
- script.type = "text/javascript";
- try {
- script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
- } catch(e){}
+ // Revert the changed values
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
- root.insertBefore( script, root.firstChild );
-
- // Make sure that the execution of code works by injecting a script
- // tag with appendChild/createTextNode
- // (IE doesn't support this, fails, and uses .text instead)
- if ( window[ id ] ) {
- jQuery.support.scriptEval = true;
- delete window[ id ];
- }
+ return ret;
+ },
- root.removeChild( script );
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
- if ( div.attachEvent && div.fireEvent ) {
- div.attachEvent("onclick", function(){
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- jQuery.support.noCloneEvent = false;
- div.detachEvent("onclick", arguments.callee);
- });
- div.cloneNode(true).fireEvent("onclick");
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( var name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
}
+});
- // Figure out if the W3C box model works as expected
- // document.body must exist before we can do this
- jQuery(function(){
- var div = document.createElement("div");
- div.style.width = div.style.paddingLeft = "1px";
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ var width = elem.offsetWidth, height = elem.offsetHeight,
+ skip = elem.nodeName.toLowerCase() === "tr";
- document.body.appendChild( div );
- jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
- document.body.removeChild( div ).style.display = 'none';
- });
-})();
+ return width === 0 && height === 0 && !skip ?
+ true :
+ width > 0 && height > 0 && !skip ?
+ false :
+ jQuery.curCSS(elem, "display") === "none";
+ };
-var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+var jsc = now(),
+ rscript = /<script(.|\s)*?\/script>/gi,
+ rselectTextarea = /select|textarea/i,
+ rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
+ jsre = /=\?(&|$)/,
+ rquery = /\?/,
+ rts = /(\?|&)_=.*?(&|$)/,
+ rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+ r20 = /%20/g,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load;
-jQuery.props = {
- "for": "htmlFor",
- "class": "className",
- "float": styleFloat,
- cssFloat: styleFloat,
- styleFloat: styleFloat,
- readonly: "readOnly",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- rowspan: "rowSpan",
- tabindex: "tabIndex"
-};
jQuery.fn.extend({
- // Keep a copy of the old load
- _load: jQuery.fn.load,
-
load: function( url, params, callback ) {
- if ( typeof url !== "string" )
- return this._load( url );
+ if ( typeof url !== "string" ) {
+ return _load.call( this, url );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
+ }
var off = url.indexOf(" ");
if ( off >= 0 ) {
@@ -3239,7 +4801,7 @@ jQuery.fn.extend({
var type = "GET";
// If the second parameter was provided
- if ( params )
+ if ( params ) {
// If it's a function
if ( jQuery.isFunction( params ) ) {
// We assume that it's the callback
@@ -3247,10 +4809,11 @@ jQuery.fn.extend({
params = null;
// Otherwise, build a param string
- } else if( typeof params === "object" ) {
- params = jQuery.param( params );
+ } else if ( typeof params === "object" ) {
+ params = jQuery.param( params, jQuery.ajaxSettings.traditional );
type = "POST";
}
+ }
var self = this;
@@ -3260,27 +4823,30 @@ jQuery.fn.extend({
type: type,
dataType: "html",
data: params,
- complete: function(res, status){
+ complete: function( res, status ) {
// If successful, inject the HTML into all the matched elements
- if ( status == "success" || status == "notmodified" )
+ if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
- jQuery("<div/>")
+ jQuery("<div />")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
- .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
+ .append(res.responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
res.responseText );
+ }
- if( callback )
+ if ( callback ) {
self.each( callback, [res.responseText, status, res] );
+ }
}
});
+
return this;
},
@@ -3288,40 +4854,41 @@ jQuery.fn.extend({
return jQuery.param(this.serializeArray());
},
serializeArray: function() {
- return this.map(function(){
+ return this.map(function() {
return this.elements ? jQuery.makeArray(this.elements) : this;
})
- .filter(function(){
+ .filter(function() {
return this.name && !this.disabled &&
- (this.checked || /select|textarea/i.test(this.nodeName) ||
- /text|hidden|password|search/i.test(this.type));
+ (this.checked || rselectTextarea.test(this.nodeName) ||
+ rinput.test(this.type));
})
- .map(function(i, elem){
+ .map(function( i, elem ) {
var val = jQuery(this).val();
- return val == null ? null :
+
+ return val == null ?
+ null :
jQuery.isArray(val) ?
- jQuery.map( val, function(val, i){
- return {name: elem.name, value: val};
+ jQuery.map( val, function( val, i ) {
+ return { name: elem.name, value: val };
}) :
- {name: elem.name, value: val};
+ { name: elem.name, value: val };
}).get();
}
});
// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
- jQuery.fn[o] = function(f){
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
+ jQuery.fn[o] = function( f ) {
return this.bind(o, f);
};
});
-var jsc = now();
-
jQuery.extend({
-
+
get: function( url, data, callback, type ) {
- // shift arguments if data argument was ommited
+ // shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
callback = data;
data = null;
}
@@ -3344,7 +4911,9 @@ jQuery.extend({
},
post: function( url, data, callback, type ) {
+ // shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
callback = data;
data = {};
}
@@ -3374,13 +4943,21 @@ jQuery.extend({
data: null,
username: null,
password: null,
+ traditional: false,
*/
// Create the request object; Microsoft failed to properly
- // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
+ // implement the XMLHttpRequest in IE7 (can't request local files),
+ // so we use the ActiveXObject when it is available
// This function can be overriden by calling jQuery.ajaxSetup
- xhr:function(){
- return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
- },
+ xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
+ function() {
+ return new window.XMLHttpRequest();
+ } :
+ function() {
+ try {
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
+ } catch(e) {}
+ },
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
@@ -3393,36 +4970,41 @@ jQuery.extend({
// Last-Modified header cache for next request
lastModified: {},
+ etag: {},
- ajax: function( s ) {
- // Extend the settings, but re-extend 's' so that it can be
- // checked again later (in the test suite, specifically)
- s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
-
- var jsonp, jsre = /=\?(&|$)/g, status, data,
+ ajax: function( origSettings ) {
+ var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
+
+ var jsonp, status, data,
+ callbackContext = origSettings && origSettings.context || s,
type = s.type.toUpperCase();
// convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" )
- s.data = jQuery.param(s.data);
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
// Handle JSONP Parameter Callbacks
- if ( s.dataType == "jsonp" ) {
- if ( type == "GET" ) {
- if ( !s.url.match(jsre) )
- s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
- } else if ( !s.data || !s.data.match(jsre) )
+ if ( s.dataType === "jsonp" ) {
+ if ( type === "GET" ) {
+ if ( !jsre.test( s.url ) ) {
+ s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+ }
+ } else if ( !s.data || !jsre.test(s.data) ) {
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+ }
s.dataType = "json";
}
// Build temporary JSONP function
- if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
- jsonp = "jsonp" + jsc++;
+ if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
+ jsonp = s.jsonpCallback || ("jsonp" + jsc++);
// Replace the =? sequence both in the query string and the data
- if ( s.data )
+ if ( s.data ) {
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+ }
+
s.url = s.url.replace(jsre, "=" + jsonp + "$1");
// We need to make sure
@@ -3430,75 +5012,85 @@ jQuery.extend({
s.dataType = "script";
// Handle JSONP-style loading
- window[ jsonp ] = function(tmp){
+ window[ jsonp ] = window[ jsonp ] || function( tmp ) {
data = tmp;
success();
complete();
// Garbage collect
window[ jsonp ] = undefined;
- try{ delete window[ jsonp ]; } catch(e){}
- if ( head )
+
+ try {
+ delete window[ jsonp ];
+ } catch(e) {}
+
+ if ( head ) {
head.removeChild( script );
+ }
};
}
- if ( s.dataType == "script" && s.cache == null )
+ if ( s.dataType === "script" && s.cache === null ) {
s.cache = false;
+ }
- if ( s.cache === false && type == "GET" ) {
+ if ( s.cache === false && type === "GET" ) {
var ts = now();
+
// try replacing _= if it is there
- var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
+ var ret = s.url.replace(rts, "$1_=" + ts + "$2");
+
// if nothing was replaced, add timestamp to the end
- s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
+ s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
}
// If data is available, append data to url for get requests
- if ( s.data && type == "GET" ) {
- s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
-
- // IE likes to send both get and post data, prevent this
- s.data = null;
+ if ( s.data && type === "GET" ) {
+ s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
}
// Watch for a new set of requests
- if ( s.global && ! jQuery.active++ )
+ if ( s.global && ! jQuery.active++ ) {
jQuery.event.trigger( "ajaxStart" );
+ }
// Matches an absolute URL, and saves the domain
- var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
+ var parts = rurl.exec( s.url ),
+ remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
- if ( s.dataType == "script" && type == "GET" && parts
- && ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
-
- var head = document.getElementsByTagName("head")[0];
+ if ( s.dataType === "script" && type === "GET" && remote ) {
+ var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = s.url;
- if (s.scriptCharset)
+ if ( s.scriptCharset ) {
script.charset = s.scriptCharset;
+ }
// Handle Script loading
if ( !jsonp ) {
var done = false;
// Attach handlers for all browsers
- script.onload = script.onreadystatechange = function(){
+ script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState ||
- this.readyState == "loaded" || this.readyState == "complete") ) {
+ this.readyState === "loaded" || this.readyState === "complete") ) {
done = true;
success();
complete();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
- head.removeChild( script );
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
}
};
}
- head.appendChild(script);
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
// We handle everything using the script element injection
return undefined;
@@ -3509,158 +5101,197 @@ jQuery.extend({
// Create the request object
var xhr = s.xhr();
+ if ( !xhr ) {
+ return;
+ }
+
// Open the socket
// Passing null username, generates a login popup on Opera (#2865)
- if( s.username )
+ if ( s.username ) {
xhr.open(type, s.url, s.async, s.username, s.password);
- else
+ } else {
xhr.open(type, s.url, s.async);
+ }
// Need an extra try/catch for cross domain requests in Firefox 3
try {
// Set the correct header, if data is being sent
- if ( s.data )
+ if ( s.data || origSettings && origSettings.contentType ) {
xhr.setRequestHeader("Content-Type", s.contentType);
+ }
- // Set the If-Modified-Since header, if ifModified mode.
- if ( s.ifModified )
- xhr.setRequestHeader("If-Modified-Since",
- jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[s.url] ) {
+ xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+ }
+
+ if ( jQuery.etag[s.url] ) {
+ xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+ }
+ }
// Set header so the called script knows that it's an XMLHttpRequest
- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ // Only send the header if it's not a remote XHR
+ if ( !remote ) {
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ }
// Set the Accepts header for the server, depending on the dataType
xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
s.accepts[ s.dataType ] + ", */*" :
s.accepts._default );
- } catch(e){}
+ } catch(e) {}
// Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
+ if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {
// Handle the global AJAX counter
- if ( s.global && ! --jQuery.active )
+ if ( s.global && ! --jQuery.active ) {
jQuery.event.trigger( "ajaxStop" );
+ }
+
// close opended socket
xhr.abort();
return false;
}
- if ( s.global )
- jQuery.event.trigger("ajaxSend", [xhr, s]);
+ if ( s.global ) {
+ trigger("ajaxSend", [xhr, s]);
+ }
// Wait for a response to come back
- var onreadystatechange = function(isTimeout){
- // The request was aborted, clear the interval and decrement jQuery.active
- if (xhr.readyState == 0) {
- if (ival) {
- // clear poll interval
- clearInterval(ival);
- ival = null;
- // Handle the global AJAX counter
- if ( s.global && ! --jQuery.active )
- jQuery.event.trigger( "ajaxStop" );
+ var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
+ // The request was aborted
+ if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
+ // Opera doesn't call onreadystatechange before this point
+ // so we simulate the call
+ if ( !requestDone ) {
+ complete();
+ }
+
+ requestDone = true;
+ if ( xhr ) {
+ xhr.onreadystatechange = jQuery.noop;
}
+
// The transfer is complete and the data is available, or the request timed out
- } else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
+ } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
+ xhr.onreadystatechange = jQuery.noop;
- // clear poll interval
- if (ival) {
- clearInterval(ival);
- ival = null;
- }
+ status = isTimeout === "timeout" ?
+ "timeout" :
+ !jQuery.httpSuccess( xhr ) ?
+ "error" :
+ s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
+ "notmodified" :
+ "success";
- status = isTimeout == "timeout" ? "timeout" :
- !jQuery.httpSuccess( xhr ) ? "error" :
- s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
- "success";
+ var errMsg;
- if ( status == "success" ) {
+ if ( status === "success" ) {
// Watch for, and catch, XML document parse errors
try {
// process the data (runs the xml through httpData regardless of callback)
data = jQuery.httpData( xhr, s.dataType, s );
- } catch(e) {
+ } catch(err) {
status = "parsererror";
+ errMsg = err;
}
}
// Make sure that the request was successful or notmodified
- if ( status == "success" ) {
- // Cache Last-Modified header, if ifModified mode.
- var modRes;
- try {
- modRes = xhr.getResponseHeader("Last-Modified");
- } catch(e) {} // swallow exception thrown by FF if header is not available
-
- if ( s.ifModified && modRes )
- jQuery.lastModified[s.url] = modRes;
-
+ if ( status === "success" || status === "notmodified" ) {
// JSONP handles its own success callback
- if ( !jsonp )
+ if ( !jsonp ) {
success();
- } else
- jQuery.handleError(s, xhr, status);
+ }
+ } else {
+ jQuery.handleError(s, xhr, status, errMsg);
+ }
// Fire the complete handlers
complete();
- if ( isTimeout )
+ if ( isTimeout === "timeout" ) {
xhr.abort();
+ }
// Stop memory leaks
- if ( s.async )
+ if ( s.async ) {
xhr = null;
+ }
}
};
- if ( s.async ) {
- // don't attach the handler to the request, just poll it instead
- var ival = setInterval(onreadystatechange, 13);
+ // Override the abort handler, if we can (IE doesn't allow it, but that's OK)
+ // Opera doesn't fire onreadystatechange at all on abort
+ try {
+ var oldAbort = xhr.abort;
+ xhr.abort = function() {
+ if ( xhr ) {
+ oldAbort.call( xhr );
+ }
- // Timeout checker
- if ( s.timeout > 0 )
- setTimeout(function(){
- // Check to see if the request is still happening
- if ( xhr && !requestDone )
- onreadystatechange( "timeout" );
- }, s.timeout);
+ onreadystatechange( "abort" );
+ };
+ } catch(e) { }
+
+ // Timeout checker
+ if ( s.async && s.timeout > 0 ) {
+ setTimeout(function() {
+ // Check to see if the request is still happening
+ if ( xhr && !requestDone ) {
+ onreadystatechange( "timeout" );
+ }
+ }, s.timeout);
}
// Send the data
try {
- xhr.send(s.data);
+ xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
} catch(e) {
jQuery.handleError(s, xhr, null, e);
+ // Fire the complete handlers
+ complete();
}
// firefox 1.5 doesn't fire statechange for sync requests
- if ( !s.async )
+ if ( !s.async ) {
onreadystatechange();
+ }
- function success(){
+ function success() {
// If a local callback was specified, fire it and pass it the data
- if ( s.success )
- s.success( data, status );
+ if ( s.success ) {
+ s.success.call( callbackContext, data, status, xhr );
+ }
// Fire the global callback
- if ( s.global )
- jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
+ if ( s.global ) {
+ trigger( "ajaxSuccess", [xhr, s] );
+ }
}
- function complete(){
+ function complete() {
// Process result
- if ( s.complete )
- s.complete(xhr, status);
+ if ( s.complete ) {
+ s.complete.call( callbackContext, xhr, status);
+ }
// The request was completed
- if ( s.global )
- jQuery.event.trigger( "ajaxComplete", [xhr, s] );
+ if ( s.global ) {
+ trigger( "ajaxComplete", [xhr, s] );
+ }
// Handle the global AJAX counter
- if ( s.global && ! --jQuery.active )
+ if ( s.global && ! --jQuery.active ) {
jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+
+ function trigger(type, args) {
+ (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
}
// return XMLHttpRequest to allow aborting the request etc.
@@ -3669,11 +5300,14 @@ jQuery.extend({
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
- if ( s.error ) s.error( xhr, status, e );
+ if ( s.error ) {
+ s.error.call( s.context || s, xhr, status, e );
+ }
// Fire the global callback
- if ( s.global )
- jQuery.event.trigger( "ajaxError", [xhr, s, e] );
+ if ( s.global ) {
+ (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
+ }
},
// Counter for holding the number of active queries
@@ -3683,86 +5317,131 @@ jQuery.extend({
httpSuccess: function( xhr ) {
try {
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
- return !xhr.status && location.protocol == "file:" ||
- ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
- } catch(e){}
+ return !xhr.status && location.protocol === "file:" ||
+ // Opera returns 0 when status is 304
+ ( xhr.status >= 200 && xhr.status < 300 ) ||
+ xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
+ } catch(e) {}
+
return false;
},
// Determines if an XMLHttpRequest returns NotModified
httpNotModified: function( xhr, url ) {
- try {
- var xhrRes = xhr.getResponseHeader("Last-Modified");
+ var lastModified = xhr.getResponseHeader("Last-Modified"),
+ etag = xhr.getResponseHeader("Etag");
- // Firefox always returns 200. check Last-Modified date
- return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
- } catch(e){}
- return false;
+ if ( lastModified ) {
+ jQuery.lastModified[url] = lastModified;
+ }
+
+ if ( etag ) {
+ jQuery.etag[url] = etag;
+ }
+
+ // Opera returns 0 when status is 304
+ return xhr.status === 304 || xhr.status === 0;
},
httpData: function( xhr, type, s ) {
- var ct = xhr.getResponseHeader("content-type"),
- xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
+ var ct = xhr.getResponseHeader("content-type") || "",
+ xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
- if ( xml && data.documentElement.tagName == "parsererror" )
- throw "parsererror";
-
+ if ( xml && data.documentElement.nodeName === "parsererror" ) {
+ jQuery.error( "parsererror" );
+ }
+
// Allow a pre-filtering function to sanitize the response
- // s != null is checked to keep backwards compatibility
- if( s && s.dataFilter )
+ // s is checked to keep backwards compatibility
+ if ( s && s.dataFilter ) {
data = s.dataFilter( data, type );
+ }
// The filter can actually parse the response
- if( typeof data === "string" ){
+ if ( typeof data === "string" ) {
+ // Get the JavaScript object, if JSON is used.
+ if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
+ data = jQuery.parseJSON( data );
// If the type is "script", eval it in global context
- if ( type == "script" )
+ } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
jQuery.globalEval( data );
-
- // Get the JavaScript object, if JSON is used.
- if ( type == "json" )
- data = window["eval"]("(" + data + ")");
+ }
}
-
+
return data;
},
// Serialize an array of form elements or a set of
// key/values into a query string
- param: function( a ) {
- var s = [ ];
-
- function add( key, value ){
- s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
- };
-
- // If an array was passed in, assume that it is an array
- // of form elements
- if ( jQuery.isArray(a) || a.jquery )
+ param: function( a, traditional ) {
+ var s = [];
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray(a) || a.jquery ) {
// Serialize the form elements
- jQuery.each( a, function(){
+ jQuery.each( a, function() {
add( this.name, this.value );
});
-
- // Otherwise, assume that it's an object of key/value pairs
- else
- // Serialize the key/values
- for ( var j in a )
- // If the value is an array then the key names need to be repeated
- if ( jQuery.isArray(a[j]) )
- jQuery.each( a[j], function(){
- add( j, this );
- });
- else
- add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( var prefix in a ) {
+ buildParams( prefix, a[prefix] );
+ }
+ }
// Return the resulting serialization
- return s.join("&").replace(/%20/g, "+");
- }
+ return s.join("&").replace(r20, "+");
+
+ function buildParams( prefix, obj ) {
+ if ( jQuery.isArray(obj) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || /\[\]$/.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
+ }
+ });
+
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
+ // Serialize object item.
+ jQuery.each( obj, function( k, v ) {
+ buildParams( prefix + "[" + k + "]", v );
+ });
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+ }
+ function add( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction(value) ? value() : value;
+ s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ }
+ }
});
var elemdisplay = {},
+ rfxtypes = /toggle|show|hide/,
+ rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
timerId,
fxAttrs = [
// height animations
@@ -3773,69 +5452,67 @@ var elemdisplay = {},
[ "opacity" ]
];
-function genFx( type, num ){
- var obj = {};
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
- obj[ this ] = type;
- });
- return obj;
-}
-
jQuery.fn.extend({
- show: function(speed,callback){
- if ( speed ) {
+ show: function( speed, callback ) {
+ if ( speed || speed === 0) {
return this.animate( genFx("show", 3), speed, callback);
+
} else {
- for ( var i = 0, l = this.length; i < l; i++ ){
+ for ( var i = 0, l = this.length; i < l; i++ ) {
var old = jQuery.data(this[i], "olddisplay");
-
+
this[i].style.display = old || "";
-
+
if ( jQuery.css(this[i], "display") === "none" ) {
- var tagName = this[i].tagName, display;
-
- if ( elemdisplay[ tagName ] ) {
- display = elemdisplay[ tagName ];
+ var nodeName = this[i].nodeName, display;
+
+ if ( elemdisplay[ nodeName ] ) {
+ display = elemdisplay[ nodeName ];
+
} else {
- var elem = jQuery("<" + tagName + " />").appendTo("body");
-
+ var elem = jQuery("<" + nodeName + " />").appendTo("body");
+
display = elem.css("display");
- if ( display === "none" )
+
+ if ( display === "none" ) {
display = "block";
-
+ }
+
elem.remove();
-
- elemdisplay[ tagName ] = display;
+
+ elemdisplay[ nodeName ] = display;
}
-
+
jQuery.data(this[i], "olddisplay", display);
}
}
// Set the display of the elements in a second loop
// to avoid the constant reflow
- for ( var i = 0, l = this.length; i < l; i++ ){
- this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
+ for ( var j = 0, k = this.length; j < k; j++ ) {
+ this[j].style.display = jQuery.data(this[j], "olddisplay") || "";
}
-
+
return this;
}
},
- hide: function(speed,callback){
- if ( speed ) {
+ hide: function( speed, callback ) {
+ if ( speed || speed === 0 ) {
return this.animate( genFx("hide", 3), speed, callback);
+
} else {
- for ( var i = 0, l = this.length; i < l; i++ ){
+ for ( var i = 0, l = this.length; i < l; i++ ) {
var old = jQuery.data(this[i], "olddisplay");
- if ( !old && old !== "none" )
+ if ( !old && old !== "none" ) {
jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
+ }
}
// Set the display of the elements in a second loop
// to avoid the constant reflow
- for ( var i = 0, l = this.length; i < l; i++ ){
- this[i].style.display = "none";
+ for ( var j = 0, k = this.length; j < k; j++ ) {
+ this[j].style.display = "none";
}
return this;
@@ -3845,77 +5522,107 @@ jQuery.fn.extend({
// Save the old toggle function
_toggle: jQuery.fn.toggle,
- toggle: function( fn, fn2 ){
+ toggle: function( fn, fn2 ) {
var bool = typeof fn === "boolean";
- return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
- this._toggle.apply( this, arguments ) :
- fn == null || bool ?
- this.each(function(){
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- }) :
- this.animate(genFx("toggle", 3), fn, fn2);
+ if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+ this._toggle.apply( this, arguments );
+
+ } else if ( fn == null || bool ) {
+ this.each(function() {
+ var state = bool ? fn : jQuery(this).is(":hidden");
+ jQuery(this)[ state ? "show" : "hide" ]();
+ });
+
+ } else {
+ this.animate(genFx("toggle", 3), fn, fn2);
+ }
+
+ return this;
},
- fadeTo: function(speed,to,callback){
- return this.animate({opacity: to}, speed, callback);
+ fadeTo: function( speed, to, callback ) {
+ return this.filter(":hidden").css("opacity", 0).show().end()
+ .animate({opacity: to}, speed, callback);
},
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
- return this[ optall.queue === false ? "each" : "queue" ](function(){
-
+ if ( jQuery.isEmptyObject( prop ) ) {
+ return this.each( optall.complete );
+ }
+
+ return this[ optall.queue === false ? "each" : "queue" ](function() {
var opt = jQuery.extend({}, optall), p,
- hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
+ hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),
self = this;
-
+
for ( p in prop ) {
- if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
+ var name = p.replace(rdashAlpha, fcamelCase);
+
+ if ( p !== name ) {
+ prop[ name ] = prop[ p ];
+ delete prop[ p ];
+ p = name;
+ }
+
+ if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
return opt.complete.call(this);
+ }
- if ( ( p == "height" || p == "width" ) && this.style ) {
+ if ( ( p === "height" || p === "width" ) && this.style ) {
// Store display property
opt.display = jQuery.css(this, "display");
// Make sure that nothing sneaks out
opt.overflow = this.style.overflow;
}
+
+ if ( jQuery.isArray( prop[p] ) ) {
+ // Create (if needed) and add to specialEasing
+ (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
+ prop[p] = prop[p][0];
+ }
}
- if ( opt.overflow != null )
+ if ( opt.overflow != null ) {
this.style.overflow = "hidden";
+ }
opt.curAnim = jQuery.extend({}, prop);
- jQuery.each( prop, function(name, val){
+ jQuery.each( prop, function( name, val ) {
var e = new jQuery.fx( self, opt, name );
- if ( /toggle|show|hide/.test(val) )
- e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
- else {
- var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
+ if ( rfxtypes.test(val) ) {
+ e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+
+ } else {
+ var parts = rfxnum.exec(val),
start = e.cur(true) || 0;
if ( parts ) {
- var end = parseFloat(parts[2]),
+ var end = parseFloat( parts[2] ),
unit = parts[3] || "px";
// We need to compute starting value
- if ( unit != "px" ) {
+ if ( unit !== "px" ) {
self.style[ name ] = (end || 1) + unit;
start = ((end || 1) / e.cur(true)) * start;
self.style[ name ] = start + unit;
}
// If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] )
- end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
+ if ( parts[1] ) {
+ end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+ }
e.custom( start, end, unit );
- } else
+
+ } else {
e.custom( start, val, "" );
+ }
}
});
@@ -3924,26 +5631,31 @@ jQuery.fn.extend({
});
},
- stop: function(clearQueue, gotoEnd){
+ stop: function( clearQueue, gotoEnd ) {
var timers = jQuery.timers;
- if (clearQueue)
+ if ( clearQueue ) {
this.queue([]);
+ }
- this.each(function(){
+ this.each(function() {
// go in reverse order so anything added to the queue during the loop is ignored
- for ( var i = timers.length - 1; i >= 0; i-- )
- if ( timers[i].elem == this ) {
- if (gotoEnd)
+ for ( var i = timers.length - 1; i >= 0; i-- ) {
+ if ( timers[i].elem === this ) {
+ if (gotoEnd) {
// force the next step to be the last
timers[i](true);
+ }
+
timers.splice(i, 1);
}
+ }
});
// start the next in the queue if the last step wasn't forced
- if (!gotoEnd)
+ if ( !gotoEnd ) {
this.dequeue();
+ }
return this;
}
@@ -3957,16 +5669,15 @@ jQuery.each({
slideToggle: genFx("toggle", 1),
fadeIn: { opacity: "show" },
fadeOut: { opacity: "hide" }
-}, function( name, props ){
- jQuery.fn[ name ] = function( speed, callback ){
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, callback ) {
return this.animate( props, speed, callback );
};
});
jQuery.extend({
-
- speed: function(speed, easing, fn) {
- var opt = typeof speed === "object" ? speed : {
+ speed: function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? speed : {
complete: fn || !fn && easing ||
jQuery.isFunction( speed ) && speed,
duration: speed,
@@ -3978,11 +5689,13 @@ jQuery.extend({
// Queueing
opt.old = opt.complete;
- opt.complete = function(){
- if ( opt.queue !== false )
+ opt.complete = function() {
+ if ( opt.queue !== false ) {
jQuery(this).dequeue();
- if ( jQuery.isFunction( opt.old ) )
+ }
+ if ( jQuery.isFunction( opt.old ) ) {
opt.old.call( this );
+ }
};
return opt;
@@ -3999,42 +5712,45 @@ jQuery.extend({
timers: [],
- fx: function( elem, options, prop ){
+ fx: function( elem, options, prop ) {
this.options = options;
this.elem = elem;
this.prop = prop;
- if ( !options.orig )
+ if ( !options.orig ) {
options.orig = {};
+ }
}
});
jQuery.fx.prototype = {
-
// Simple function for setting a style value
- update: function(){
- if ( this.options.step )
+ update: function() {
+ if ( this.options.step ) {
this.options.step.call( this.elem, this.now, this );
+ }
(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
// Set display property to block for height/width animations
- if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
+ if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {
this.elem.style.display = "block";
+ }
},
// Get the current size
- cur: function(force){
- if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
+ cur: function( force ) {
+ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
return this.elem[ this.prop ];
+ }
var r = parseFloat(jQuery.css(this.elem, this.prop, force));
return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
},
// Start an animation from one number to another
- custom: function(from, to, unit){
+ custom: function( from, to, unit ) {
this.startTime = now();
this.start = from;
this.end = to;
@@ -4043,47 +5759,36 @@ jQuery.fx.prototype = {
this.pos = this.state = 0;
var self = this;
- function t(gotoEnd){
+ function t( gotoEnd ) {
return self.step(gotoEnd);
}
t.elem = this.elem;
if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval(function(){
- var timers = jQuery.timers;
-
- for ( var i = 0; i < timers.length; i++ )
- if ( !timers[i]() )
- timers.splice(i--, 1);
-
- if ( !timers.length ) {
- clearInterval( timerId );
- timerId = undefined;
- }
- }, 13);
+ timerId = setInterval(jQuery.fx.tick, 13);
}
},
// Simple 'show' function
- show: function(){
+ show: function() {
// Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.show = true;
// Begin the animation
// Make sure that we start at a small width/height to avoid any
// flash of content
- this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
+ this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
// Start by showing the element
- jQuery(this.elem).show();
+ jQuery( this.elem ).show();
},
// Simple 'hide' function
- hide: function(){
+ hide: function() {
// Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.hide = true;
// Begin the animation
@@ -4091,8 +5796,8 @@ jQuery.fx.prototype = {
},
// Each step of an animation
- step: function(gotoEnd){
- var t = now();
+ step: function( gotoEnd ) {
+ var t = now(), done = true;
if ( gotoEnd || t >= this.options.duration + this.startTime ) {
this.now = this.end;
@@ -4101,10 +5806,11 @@ jQuery.fx.prototype = {
this.options.curAnim[ this.prop ] = true;
- var done = true;
- for ( var i in this.options.curAnim )
- if ( this.options.curAnim[i] !== true )
+ for ( var i in this.options.curAnim ) {
+ if ( this.options.curAnim[i] !== true ) {
done = false;
+ }
+ }
if ( done ) {
if ( this.options.display != null ) {
@@ -4112,31 +5818,40 @@ jQuery.fx.prototype = {
this.elem.style.overflow = this.options.overflow;
// Reset the display
- this.elem.style.display = this.options.display;
- if ( jQuery.css(this.elem, "display") == "none" )
+ var old = jQuery.data(this.elem, "olddisplay");
+ this.elem.style.display = old ? old : this.options.display;
+
+ if ( jQuery.css(this.elem, "display") === "none" ) {
this.elem.style.display = "block";
+ }
}
// Hide the element if the "hide" operation was done
- if ( this.options.hide )
+ if ( this.options.hide ) {
jQuery(this.elem).hide();
+ }
// Reset the properties, if the item has been hidden or shown
- if ( this.options.hide || this.options.show )
- for ( var p in this.options.curAnim )
- jQuery.attr(this.elem.style, p, this.options.orig[p]);
-
+ if ( this.options.hide || this.options.show ) {
+ for ( var p in this.options.curAnim ) {
+ jQuery.style(this.elem, p, this.options.orig[p]);
+ }
+ }
+
// Execute the complete function
this.options.complete.call( this.elem );
}
return false;
+
} else {
var n = t - this.startTime;
this.state = n / this.options.duration;
// Perform the easing function, defaults to swing
- this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
+ var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
+ var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
+ this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
this.now = this.start + ((this.end - this.start) * this.pos);
// Perform the next step of the animation
@@ -4145,232 +5860,382 @@ jQuery.fx.prototype = {
return true;
}
-
};
jQuery.extend( jQuery.fx, {
- speeds:{
+ tick: function() {
+ var timers = jQuery.timers;
+
+ for ( var i = 0; i < timers.length; i++ ) {
+ if ( !timers[i]() ) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ },
+
+ stop: function() {
+ clearInterval( timerId );
+ timerId = null;
+ },
+
+ speeds: {
slow: 600,
fast: 200,
// Default speed
_default: 400
},
- step: {
- opacity: function(fx){
- jQuery.attr(fx.elem.style, "opacity", fx.now);
+ step: {
+ opacity: function( fx ) {
+ jQuery.style(fx.elem, "opacity", fx.now);
},
- _default: function(fx){
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
- fx.elem.style[ fx.prop ] = fx.now + fx.unit;
- else
+ _default: function( fx ) {
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+ fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+ } else {
fx.elem[ fx.prop ] = fx.now;
+ }
}
}
});
-if ( document.documentElement["getBoundingClientRect"] )
- jQuery.fn.offset = function() {
- if ( !this[0] ) return { top: 0, left: 0 };
- if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
- var box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+if ( "getBoundingClientRect" in document.documentElement ) {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
- top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
- left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
+ top = box.top + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
+ left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
+
return { top: top, left: left };
};
-else
- jQuery.fn.offset = function() {
- if ( !this[0] ) return { top: 0, left: 0 };
- if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
- jQuery.offset.initialized || jQuery.offset.initialize();
- var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
+} else {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ jQuery.offset.initialize();
+
+ var offsetParent = elem.offsetParent, prevOffsetParent = elem,
doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
body = doc.body, defaultView = doc.defaultView,
- prevComputedStyle = defaultView.getComputedStyle(elem, null),
+ prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
top = elem.offsetTop, left = elem.offsetLeft;
while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- computedStyle = defaultView.getComputedStyle(elem, null);
- top -= elem.scrollTop, left -= elem.scrollLeft;
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ break;
+ }
+
+ computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+ top -= elem.scrollTop;
+ left -= elem.scrollLeft;
+
if ( elem === offsetParent ) {
- top += elem.offsetTop, left += elem.offsetLeft;
- if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
- top += parseInt( computedStyle.borderTopWidth, 10) || 0,
- left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
+ top += elem.offsetTop;
+ left += elem.offsetLeft;
+
+ if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
}
- if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
- top += parseInt( computedStyle.borderTopWidth, 10) || 0,
- left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
+
+ if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
prevComputedStyle = computedStyle;
}
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
- top += body.offsetTop,
+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+ top += body.offsetTop;
left += body.offsetLeft;
+ }
- if ( prevComputedStyle.position === "fixed" )
- top += Math.max(docElem.scrollTop, body.scrollTop),
- left += Math.max(docElem.scrollLeft, body.scrollLeft);
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ top += Math.max( docElem.scrollTop, body.scrollTop );
+ left += Math.max( docElem.scrollLeft, body.scrollLeft );
+ }
return { top: top, left: left };
};
+}
jQuery.offset = {
initialize: function() {
- if ( this.initialized ) return;
- var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
- html = '<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>';
+ var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,
+ html = "<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>";
- rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
- for ( prop in rules ) container.style[prop] = rules[prop];
+ jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
container.innerHTML = html;
- body.insertBefore(container, body.firstChild);
- innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
+ body.insertBefore( container, body.firstChild );
+ innerDiv = container.firstChild;
+ checkDiv = innerDiv.firstChild;
+ td = innerDiv.nextSibling.firstChild.firstChild;
this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
- innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
+ checkDiv.style.position = "fixed", checkDiv.style.top = "20px";
+ // safari subtracts parent border width here which is 5px
+ this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+ checkDiv.style.position = checkDiv.style.top = "";
+
+ innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";
this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
- body.style.marginTop = '1px';
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
- body.style.marginTop = bodyMarginTop;
+ this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
- body.removeChild(container);
- this.initialized = true;
+ body.removeChild( container );
+ body = container = innerDiv = checkDiv = table = td = null;
+ jQuery.offset.initialize = jQuery.noop;
},
- bodyOffset: function(body) {
- jQuery.offset.initialized || jQuery.offset.initialize();
+ bodyOffset: function( body ) {
var top = body.offsetTop, left = body.offsetLeft;
- if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
- top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0,
- left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
+
+ jQuery.offset.initialize();
+
+ if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0;
+ left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;
+ }
+
return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ // set position first, in-case top/left are set even on static elem
+ if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
+ elem.style.position = "relative";
+ }
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0,
+ curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ var props = {
+ top: (options.top - curOffset.top) + curTop,
+ left: (options.left - curOffset.left) + curLeft
+ };
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
}
};
jQuery.fn.extend({
position: function() {
- var left = 0, top = 0, results;
-
- if ( this[0] ) {
- // Get *real* offsetParent
- var offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= num( this, 'marginTop' );
- offset.left -= num( this, 'marginLeft' );
-
- // Add offsetParent borders
- parentOffset.top += num( offsetParent, 'borderTopWidth' );
- parentOffset.left += num( offsetParent, 'borderLeftWidth' );
-
- // Subtract the two offsets
- results = {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
+ if ( !this[0] ) {
+ return null;
}
- return results;
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.curCSS(elem, "marginTop", true) ) || 0;
+ offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth", true) ) || 0;
+ parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
},
offsetParent: function() {
- var offsetParent = this[0].offsetParent || document.body;
- while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
- offsetParent = offsetParent.offsetParent;
- return jQuery(offsetParent);
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent;
+ });
}
});
// Create scrollLeft and scrollTop methods
-jQuery.each( ['Left', 'Top'], function(i, name) {
- var method = 'scroll' + name;
-
- jQuery.fn[ method ] = function(val) {
- if (!this[0]) return null;
+jQuery.each( ["Left", "Top"], function( i, name ) {
+ var method = "scroll" + name;
- return val !== undefined ?
+ jQuery.fn[ method ] = function(val) {
+ var elem = this[0], win;
+
+ if ( !elem ) {
+ return null;
+ }
+ if ( val !== undefined ) {
// Set the scroll offset
- this.each(function() {
- this == window || this == document ?
- window.scrollTo(
- !i ? val : jQuery(window).scrollLeft(),
- i ? val : jQuery(window).scrollTop()
- ) :
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery(win).scrollLeft(),
+ i ? val : jQuery(win).scrollTop()
+ );
+
+ } else {
this[ method ] = val;
- }) :
+ }
+ });
+ } else {
+ win = getWindow( elem );
// Return the scroll offset
- this[0] == window || this[0] == document ?
- self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
- jQuery.boxModel && document.documentElement[ method ] ||
- document.body[ method ] :
- this[0][ method ];
+ return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+ jQuery.support.boxModel && win.document.documentElement[ method ] ||
+ win.document.body[ method ] :
+ elem[ method ];
+ }
};
});
+
+function getWindow( elem ) {
+ return ("scrollTo" in elem && elem.document) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function(i, name){
+jQuery.each([ "Height", "Width" ], function( i, name ) {
- var tl = i ? "Left" : "Top", // top or left
- br = i ? "Right" : "Bottom", // bottom or right
- lower = name.toLowerCase();
+ var type = name.toLowerCase();
// innerHeight and innerWidth
- jQuery.fn["inner" + name] = function(){
+ jQuery.fn["inner" + name] = function() {
return this[0] ?
- jQuery.css( this[0], lower, false, "padding" ) :
+ jQuery.css( this[0], type, false, "padding" ) :
null;
};
// outerHeight and outerWidth
- jQuery.fn["outer" + name] = function(margin) {
+ jQuery.fn["outer" + name] = function( margin ) {
return this[0] ?
- jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
+ jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :
null;
};
-
- var type = name.toLowerCase();
jQuery.fn[ type ] = function( size ) {
// Get window width or height
- return this[0] == window ?
+ var elem = this[0];
+ if ( !elem ) {
+ return size == null ? null : this;
+ }
+
+ if ( jQuery.isFunction( size ) ) {
+ return this.each(function( i ) {
+ var self = jQuery( this );
+ self[ type ]( size.call( this, i, self[ type ]() ) );
+ });
+ }
+
+ return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
- document.body[ "client" + name ] :
+ elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+ elem.document.body[ "client" + name ] :
// Get document width or height
- this[0] == document ?
+ (elem.nodeType === 9) ? // is it a document
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
Math.max(
- document.documentElement["client" + name],
- document.body["scroll" + name], document.documentElement["scroll" + name],
- document.body["offset" + name], document.documentElement["offset" + name]
+ elem.documentElement["client" + name],
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
+ elem.body["offset" + name], elem.documentElement["offset" + name]
) :
// Get or set width or height on the element
size === undefined ?
// Get width or height on the element
- (this.length ? jQuery.css( this[0], type ) : null) :
+ jQuery.css( elem, type ) :
// Set the width or height on the element (default to pixels if value is unitless)
this.css( type, typeof size === "string" ? size : size + "px" );
};
});
-})();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+})(window);
+
diff --git a/js/jquery.min.js b/js/jquery.min.js
index b1ae21d8b..b170a78f8 100644
--- a/js/jquery.min.js
+++ b/js/jquery.min.js
@@ -1,19 +1,155 @@
-/*
- * jQuery JavaScript Library v1.3.2
+/*!
+ * jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
*
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
*/
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.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\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<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>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file
+(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 a7339010a..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'
}
},
@@ -143,87 +144,85 @@ var SN = { // StatusNet
SN.U.Counter(form);
},
- FormXHR: function(f) {
- if (jQuery.data(f[0], "ElementData") === undefined) {
- jQuery.data(f[0], "ElementData", {Bind:'submit'});
- f.bind('submit', function(e) {
- form_id = $(this)[0].id;
- $.ajax({
- type: 'POST',
- dataType: 'xml',
- url: $(this)[0].action,
- data: $(this).serialize() + '&ajax=1',
- beforeSend: function(xhr) {
- $('#'+form_id).addClass(SN.C.S.Processing);
- $('#'+form_id+' .submit').addClass(SN.C.S.Disabled);
- $('#'+form_id+' .submit').attr(SN.C.S.Disabled, SN.C.S.Disabled);
- },
- error: function (xhr, textStatus, errorThrown) {
- alert(errorThrown || textStatus);
- },
- success: function(data, textStatus) {
- if (typeof($('form', data)[0]) != 'undefined') {
- form_new = document._importNode($('form', data)[0], true);
- $('#'+form_id).replaceWith(form_new);
- $('#'+form_new.id).each(function() { SN.U.FormXHR($(this)); });
- }
- else {
- $('#'+form_id).replaceWith(document._importNode($('p', data)[0], true));
- }
- }
- });
- return false;
- });
- }
+ FormXHR: function(form) {
+ $.ajax({
+ type: 'POST',
+ dataType: 'xml',
+ url: form.attr('action'),
+ data: form.serialize() + '&ajax=1',
+ beforeSend: function(xhr) {
+ form
+ .addClass(SN.C.S.Processing)
+ .find('.submit')
+ .addClass(SN.C.S.Disabled)
+ .attr(SN.C.S.Disabled, SN.C.S.Disabled);
+ },
+ error: function (xhr, textStatus, errorThrown) {
+ alert(errorThrown || textStatus);
+ },
+ success: function(data, textStatus) {
+ if (typeof($('form', data)[0]) != 'undefined') {
+ form_new = document._importNode($('form', data)[0], true);
+ form.replaceWith(form_new);
+ }
+ else {
+ form.replaceWith(document._importNode($('p', data)[0], true));
+ }
+ }
+ });
},
FormNoticeXHR: function(form) {
- var NDG, NLat, NLon, NLNS, NLID;
+ SN.C.I.NoticeDataGeo = {};
form_id = form.attr('id');
form.append('<input type="hidden" name="ajax" value="1"/>');
form.ajaxForm({
dataType: 'xml',
timeout: '60000',
beforeSend: function(formData) {
- if ($('#'+form_id+' #'+SN.C.S.NoticeDataText)[0].value.length === 0) {
+ if (form.find('#'+SN.C.S.NoticeDataText)[0].value.length === 0) {
form.addClass(SN.C.S.Warning);
return false;
}
- form.addClass(SN.C.S.Processing);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).addClass(SN.C.S.Disabled);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).attr(SN.C.S.Disabled, SN.C.S.Disabled);
-
- NLat = $('#'+SN.C.S.NoticeLat).val();
- NLon = $('#'+SN.C.S.NoticeLon).val();
- NLNS = $('#'+SN.C.S.NoticeLocationNs).val();
- NLID = $('#'+SN.C.S.NoticeLocationId).val();
- NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked');
+ form
+ .addClass(SN.C.S.Processing)
+ .find('#'+SN.C.S.NoticeActionSubmit)
+ .addClass(SN.C.S.Disabled)
+ .attr(SN.C.S.Disabled, SN.C.S.Disabled);
+
+ SN.C.I.NoticeDataGeo.NLat = $('#'+SN.C.S.NoticeLat).val();
+ SN.C.I.NoticeDataGeo.NLon = $('#'+SN.C.S.NoticeLon).val();
+ SN.C.I.NoticeDataGeo.NLNS = $('#'+SN.C.S.NoticeLocationNs).val();
+ SN.C.I.NoticeDataGeo.NLID = $('#'+SN.C.S.NoticeLocationId).val();
+ SN.C.I.NoticeDataGeo.NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked');
cookieValue = $.cookie(SN.C.S.NoticeDataGeoCookie);
if (cookieValue !== null && cookieValue != 'disabled') {
cookieValue = JSON.parse(cookieValue);
- NLat = $('#'+SN.C.S.NoticeLat).val(cookieValue.NLat).val();
- NLon = $('#'+SN.C.S.NoticeLon).val(cookieValue.NLon).val();
+ SN.C.I.NoticeDataGeo.NLat = $('#'+SN.C.S.NoticeLat).val(cookieValue.NLat).val();
+ SN.C.I.NoticeDataGeo.NLon = $('#'+SN.C.S.NoticeLon).val(cookieValue.NLon).val();
if ($('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS)) {
- NLNS = $('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS).val();
- NLID = $('#'+SN.C.S.NoticeLocationId).val(cookieValue.NLID).val();
+ SN.C.I.NoticeDataGeo.NLNS = $('#'+SN.C.S.NoticeLocationNs).val(cookieValue.NLNS).val();
+ SN.C.I.NoticeDataGeo.NLID = $('#'+SN.C.S.NoticeLocationId).val(cookieValue.NLID).val();
}
}
if (cookieValue == 'disabled') {
- NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', false).attr('checked');
+ SN.C.I.NoticeDataGeo.NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', false).attr('checked');
}
else {
- NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', true).attr('checked');
+ SN.C.I.NoticeDataGeo.NDG = $('#'+SN.C.S.NoticeDataGeo).attr('checked', true).attr('checked');
}
return true;
},
error: function (xhr, textStatus, errorThrown) {
- form.removeClass(SN.C.S.Processing);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeClass(SN.C.S.Disabled);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeAttr(SN.C.S.Disabled, SN.C.S.Disabled);
- $('#'+form_id+' .form_response').remove();
+ form
+ .removeClass(SN.C.S.Processing)
+ .find('#'+SN.C.S.NoticeActionSubmit)
+ .removeClass(SN.C.S.Disabled)
+ .removeAttr(SN.C.S.Disabled, SN.C.S.Disabled);
+ form.find('.form_response').remove();
if (textStatus == 'timeout') {
form.append('<p class="form_response error">Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>');
}
@@ -233,9 +232,10 @@ var SN = { // StatusNet
}
else {
if (parseInt(xhr.status) === 0 || jQuery.inArray(parseInt(xhr.status), SN.C.I.HTTP20x30x) >= 0) {
- $('#'+form_id).resetForm();
- $('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove();
- SN.U.FormNoticeEnhancements($('#'+form_id));
+ form
+ .resetForm()
+ .find('#'+SN.C.S.NoticeDataAttachSelected).remove();
+ SN.U.FormNoticeEnhancements(form);
}
else {
form.append('<p class="form_response error">(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>');
@@ -244,7 +244,7 @@ var SN = { // StatusNet
}
},
success: function(data, textStatus) {
- $('#'+form_id+' .form_response').remove();
+ form.find('.form_response').remove();
var result;
if ($('#'+SN.C.S.Error, data).length > 0) {
result = document._importNode($('p', data)[0], true);
@@ -277,11 +277,11 @@ var SN = { // StatusNet
else {
notices.prepend(notice);
}
- $('#'+notice.id).css({display:'none'});
- $('#'+notice.id).fadeIn(2500);
+ $('#'+notice.id)
+ .css({display:'none'})
+ .fadeIn(2500);
SN.U.NoticeWithAttachment($('#'+notice.id));
SN.U.NoticeReplyTo($('#'+notice.id));
- SN.U.FormXHR($('#'+notice.id+' .form_favor'));
}
}
else {
@@ -290,24 +290,26 @@ var SN = { // StatusNet
form.append('<p class="form_response success">'+result_title+'</p>');
}
}
- $('#'+form_id).resetForm();
- $('#'+form_id+' #'+SN.C.S.NoticeInReplyTo).val('');
- $('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove();
- SN.U.FormNoticeEnhancements($('#'+form_id));
+ form.resetForm();
+ form.find('#'+SN.C.S.NoticeInReplyTo).val('');
+ form.find('#'+SN.C.S.NoticeDataAttachSelected).remove();
+ SN.U.FormNoticeEnhancements(form);
}
},
complete: function(xhr, textStatus) {
- form.removeClass(SN.C.S.Processing);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeAttr(SN.C.S.Disabled);
- $('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeClass(SN.C.S.Disabled);
-
- $('#'+SN.C.S.NoticeLat).val(NLat);
- $('#'+SN.C.S.NoticeLon).val(NLon);
+ form
+ .removeClass(SN.C.S.Processing)
+ .find('#'+SN.C.S.NoticeActionSubmit)
+ .removeAttr(SN.C.S.Disabled)
+ .removeClass(SN.C.S.Disabled);
+
+ $('#'+SN.C.S.NoticeLat).val(SN.C.I.NoticeDataGeo.NLat);
+ $('#'+SN.C.S.NoticeLon).val(SN.C.I.NoticeDataGeo.NLon);
if ($('#'+SN.C.S.NoticeLocationNs)) {
- $('#'+SN.C.S.NoticeLocationNs).val(NLNS);
- $('#'+SN.C.S.NoticeLocationId).val(NLID);
+ $('#'+SN.C.S.NoticeLocationNs).val(SN.C.I.NoticeDataGeo.NLNS);
+ $('#'+SN.C.S.NoticeLocationId).val(SN.C.I.NoticeDataGeo.NLID);
}
- $('#'+SN.C.S.NoticeDataGeo).attr('checked', NDG);
+ $('#'+SN.C.S.NoticeDataGeo).attr('checked', SN.C.I.NoticeDataGeo.NDG);
}
});
},
@@ -318,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) {
@@ -350,46 +346,49 @@ var SN = { // StatusNet
},
NoticeFavor: function() {
- $('.form_favor').each(function() { SN.U.FormXHR($(this)); });
- $('.form_disfavor').each(function() { SN.U.FormXHR($(this)); });
+ $('.form_favor').live('click', function() { SN.U.FormXHR($(this)); return false; });
+ $('.form_disfavor').live('click', function() { SN.U.FormXHR($(this)); return false; });
},
NoticeRepeat: function() {
- $('.form_repeat').each(function() {
- SN.U.FormXHR($(this));
+ $('.form_repeat').live('click', function(e) {
+ e.preventDefault();
+
SN.U.NoticeRepeatConfirmation($(this));
+ return false;
});
},
NoticeRepeatConfirmation: function(form) {
- function NRC() {
- form.closest('.notice-options').addClass('opaque');
- form.addClass('dialogbox');
+ var submit_i = form.find('.submit');
- form.append('<button class="close">&#215;</button>');
- form.find('button.close').click(function(){
- $(this).remove();
+ var submit = submit_i.clone();
+ submit
+ .addClass('submit_dialogbox')
+ .removeClass('submit');
+ form.append(submit);
+ submit.bind('click', function() { SN.U.FormXHR(form); return false; });
- form.closest('.notice-options').removeClass('opaque');
- form.removeClass('dialogbox');
- form.find('.submit_dialogbox').remove();
- form.find('.submit').show();
+ submit_i.hide();
- return false;
- });
- };
+ form
+ .addClass('dialogbox')
+ .append('<button class="close">&#215;</button>')
+ .closest('.notice-options')
+ .addClass('opaque');
- form.find('.submit').bind('click', function(e) {
- e.preventDefault();
+ form.find('button.close').click(function(){
+ $(this).remove();
- var submit = form.find('.submit').clone();
- submit.addClass('submit_dialogbox');
- submit.removeClass('submit');
- form.append(submit);
+ form
+ .removeClass('dialogbox')
+ .closest('.notice-options')
+ .removeClass('opaque');
- $(this).hide();
+ form.find('.submit_dialogbox').remove();
+ form.find('.submit').show();
- NRC();
+ return false;
});
},
@@ -400,12 +399,10 @@ var SN = { // StatusNet
},
NoticeWithAttachment: function(notice) {
- if ($('.attachment', notice).length === 0) {
+ if (notice.find('.attachment').length === 0) {
return;
}
- var notice_id = notice.attr('id');
-
$.fn.jOverlay.options = {
method : 'GET',
data : '',
@@ -425,35 +422,40 @@ var SN = { // StatusNet
css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'}
};
- $('#'+notice_id+' a.attachment').click(function() {
- $().jOverlay({url: $('address .url')[0].href+'attachment/' + ($(this).attr('id').substring('attachment'.length + 1)) + '/ajax'});
- return false;
+ notice.find('a.attachment').click(function() {
+ var attachId = ($(this).attr('id').substring('attachment'.length + 1));
+ if (attachId) {
+ $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'});
+ return false;
+ }
});
- var t;
- $("body:not(#shownotice) #"+notice_id+" a.thumbnail").hover(
- function() {
- var anchor = $(this);
- $("a.thumbnail").children('img').hide();
- anchor.closest(".entry-title").addClass('ov');
-
- if (anchor.children('img').length === 0) {
- t = setTimeout(function() {
- $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) {
- anchor.append(data);
- });
- }, 500);
- }
- else {
- anchor.children('img').show();
+ if ($('#shownotice').length == 0) {
+ var t;
+ notice.find('a.thumbnail').hover(
+ function() {
+ var anchor = $(this);
+ $('a.thumbnail').children('img').hide();
+ anchor.closest(".entry-title").addClass('ov');
+
+ if (anchor.children('img').length === 0) {
+ t = setTimeout(function() {
+ $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) {
+ anchor.append(data);
+ });
+ }, 500);
+ }
+ else {
+ anchor.children('img').show();
+ }
+ },
+ function() {
+ clearTimeout(t);
+ $('a.thumbnail').children('img').hide();
+ $(this).closest('.entry-title').removeClass('ov');
}
- },
- function() {
- clearTimeout(t);
- $("a.thumbnail").children('img').hide();
- $(this).closest(".entry-title").removeClass('ov');
- }
- );
+ );
+ }
},
NoticeDataAttach: function() {
@@ -495,7 +497,7 @@ var SN = { // StatusNet
$('#'+SN.C.S.NoticeLocationId).val('');
$('#'+SN.C.S.NoticeDataGeo).attr('checked', false);
- $.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled');
+ $.cookie(SN.C.S.NoticeDataGeoCookie, 'disabled', { path: '/' });
}
function getJSONgeocodeURL(geocodeURL, data) {
@@ -537,7 +539,8 @@ var SN = { // StatusNet
NLNU: location.url,
NDG: true
};
- $.cookie(SN.C.S.NoticeDataGeoCookie, JSON.stringify(cookieValue));
+
+ $.cookie(SN.C.S.NoticeDataGeoCookie, JSON.stringify(cookieValue), { path: '/' });
});
}
@@ -638,7 +641,7 @@ var SN = { // StatusNet
NDM.bind('click', function() {
var NDMF = $('.entity_send-a-message form');
if (NDMF.length === 0) {
- $(this).addClass('processing');
+ $(this).addClass(SN.C.S.Processing);
$.get(NDM.attr('href'), null, function(data) {
$('.entity_send-a-message').append(document._importNode($('form', data)[0], true));
NDMF = $('.entity_send-a-message .form_notice');
@@ -649,7 +652,7 @@ var SN = { // StatusNet
NDMF.hide();
return false;
});
- NDM.removeClass('processing');
+ NDM.removeClass(SN.C.S.Processing);
});
}
else {
@@ -658,6 +661,42 @@ var SN = { // StatusNet
}
return false;
});
+ },
+
+ GetFullYear: function(year, month, day) {
+ var date = new Date();
+ 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);
+ }
}
},
@@ -687,14 +726,28 @@ var SN = { // StatusNet
EntityActions: function() {
if ($('body.user_in').length > 0) {
- $('.form_user_subscribe').each(function() { SN.U.FormXHR($(this)); });
- $('.form_user_unsubscribe').each(function() { SN.U.FormXHR($(this)); });
- $('.form_group_join').each(function() { SN.U.FormXHR($(this)); });
- $('.form_group_leave').each(function() { SN.U.FormXHR($(this)); });
- $('.form_user_nudge').each(function() { SN.U.FormXHR($(this)); });
+ $('.form_user_subscribe').live('click', function() { SN.U.FormXHR($(this)); return false; });
+ $('.form_user_unsubscribe').live('click', function() { SN.U.FormXHR($(this)); return false; });
+ $('.form_group_join').live('click', function() { SN.U.FormXHR($(this)); return false; });
+ $('.form_group_leave').live('click', function() { SN.U.FormXHR($(this)); return false; });
+ $('.form_user_nudge').live('click', function() { SN.U.FormXHR($(this)); return false; });
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;
+ });
}
}
};
@@ -709,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 e24277558..10394c789 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -246,21 +246,20 @@ class Action extends HTMLOutputter // lawsuit
{
if (Event::handle('StartShowScripts', array($this))) {
if (Event::handle('StartShowJQueryScripts', array($this))) {
- $this->script('js/jquery.min.js');
- $this->script('js/jquery.form.js');
- $this->script('js/jquery.cookie.js');
- $this->script('js/json2.js');
- $this->script('js/jquery.joverlay.min.js');
+ $this->script('jquery.min.js');
+ $this->script('jquery.form.js');
+ $this->script('jquery.cookie.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));
}
if (Event::handle('StartShowStatusNetScripts', array($this)) &&
Event::handle('StartShowLaconicaScripts', array($this))) {
- $this->script('js/xbImportNode.js');
- $this->script('js/util.js');
- $this->script('js/geometa.js');
+ $this->script('xbImportNode.js');
+ $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));
}
@@ -392,13 +391,20 @@ class Action extends HTMLOutputter // lawsuit
$this->elementStart('address', array('id' => 'site_contact',
'class' => 'vcard'));
if (Event::handle('StartAddressData', array($this))) {
+ if (common_config('singleuser', 'enabled')) {
+ $url = common_local_url('showstream',
+ array('nickname' => common_config('singleuser', 'nickname')));
+ } else {
+ $url = common_local_url('public');
+ }
$this->elementStart('a', array('class' => 'url home bookmark',
- 'href' => common_local_url('public')));
+ 'href' => $url));
if (common_config('site', 'logo') || file_exists(Theme::file('logo.png'))) {
$this->element('img', array('class' => 'logo photo',
'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png'),
'alt' => common_config('site', 'name')));
}
+ $this->text(' ');
$this->element('span', array('class' => 'fn org'), common_config('site', 'name'));
$this->elementEnd('a');
Event::handle('EndAddressData', array($this));
@@ -414,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));
}
@@ -484,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);
@@ -816,12 +842,14 @@ class Action extends HTMLOutputter // lawsuit
'alt' => common_config('license', 'title'),
'width' => '80',
'height' => '15'));
+ $this->text(' ');
//TODO: This is dirty: i18n
$this->text(_('All '.common_config('site', 'name').' content and data are available under the '));
$this->element('a', array('class' => 'license',
'rel' => 'external license',
'href' => common_config('license', 'url')),
common_config('license', 'title'));
+ $this->text(' ');
$this->text(_('license.'));
$this->elementEnd('p');
break;
@@ -968,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 a6981ac61..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,24 +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'),
- _('Paths configuration'), $action_name == 'useradminpanel', 'nav_design_admin_panel');
+ $menu_title, $action_name == 'useradminpanel', 'nav_user_admin_panel');
+ }
+
+ 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'),
+ $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 (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'),
+ $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));
@@ -332,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 825262b4c..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
@@ -77,6 +76,7 @@ class ApiAction extends Action
function prepare($args)
{
+ StatusNet::setApi(true); // reduce exception reports to aid in debugging
parent::prepare($args);
$this->format = $this->arg('format');
@@ -84,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;
}
@@ -299,7 +302,7 @@ class ApiAction extends Action
}
}
- if ($include_user) {
+ if ($include_user && $profile) {
# Don't get notice (recursive!)
$twitter_user = $this->twitterUserArray($profile, false);
$twitter_status['user'] = $twitter_user;
@@ -358,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'];
@@ -802,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'];
@@ -1103,7 +1106,7 @@ class ApiAction extends Action
}
}
- function serverError($msg, $code = 500, $content_type = 'json')
+ function serverError($msg, $code = 500, $content_type = 'xml')
{
$action = $this->trimmed('action');
@@ -1154,7 +1157,6 @@ class ApiAction extends Action
$this->elementStart('feed', array('xmlns' => 'http://www.w3.org/2005/Atom',
'xml:lang' => 'en-US',
'xmlns:thr' => 'http://purl.org/syndication/thread/1.0'));
- Event::handle('StartApiAtom', array($this));
}
function endTwitterAtom()
@@ -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);
+ }
}
}
@@ -1250,10 +1267,27 @@ class ApiAction extends Action
case 'api':
break;
default:
+
+ $name = null;
+ $url = null;
+
$ns = Notice_source::staticGet($source);
+
if ($ns) {
- $source_name = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
+ $name = $ns->name;
+ $url = $ns->url;
+ } else {
+ $app = Oauth_application::staticGet('name', $source);
+ if ($app) {
+ $name = $app->name;
+ $url = $app->source_url;
+ }
+ }
+
+ if (!empty($name) && !empty($url)) {
+ $source_name = '<a href="' . $url . '">' . $name . '</a>';
}
+
break;
}
return $source_name;
@@ -1294,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);
}
@@ -1304,4 +1336,22 @@ class ApiAction extends Action
}
}
+ function getSelfUri($action, $aargs)
+ {
+ parse_str($_SERVER['QUERY_STRING'], $params);
+ $pstring = '';
+ if (!empty($params)) {
+ unset($params['p']);
+ $pstring = http_build_query($params);
+ }
+
+ $uri = common_local_url($action, $aargs);
+
+ if (!empty($pstring)) {
+ $uri .= '?' . $pstring;
+ }
+
+ return $uri;
+ }
+
}
diff --git a/lib/apiauth.php b/lib/apiauth.php
index 927dcad6a..5090871cf 100644
--- a/lib/apiauth.php
+++ b/lib/apiauth.php
@@ -29,7 +29,7 @@
* @author mEDI <medi@milaro.net>
* @author Sarven Capadisli <csarven@status.net>
* @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/
*/
@@ -38,7 +38,6 @@ if (!defined('STATUSNET')) {
exit(1);
}
-require_once INSTALLDIR . '/lib/api.php';
require_once INSTALLDIR . '/lib/apioauth.php';
/**
@@ -53,12 +52,13 @@ require_once INSTALLDIR . '/lib/apioauth.php';
class ApiAuthAction extends ApiAction
{
- var $access_token;
- var $oauth_access_type;
- var $oauth_source;
+ var $auth_user_nickname = null;
+ var $auth_user_password = null;
+ var $oauth_source = null;
/**
- * Take arguments for running, and output basic auth header if needed
+ * Take arguments for running, looks for an OAuth request,
+ * and outputs basic auth header if needed
*
* @param array $args $_REQUEST args
*
@@ -70,57 +70,93 @@ class ApiAuthAction extends ApiAction
{
parent::prepare($args);
- if ($this->requiresAuth()) {
+ // NOTE: $this->auth_user has to get set in prepare(), not handle(),
+ // because subclasses do stuff with it in their prepares.
- $this->consumer_key = $this->arg('oauth_consumer_key');
- $this->access_token = $this->arg('oauth_token');
+ $oauthReq = $this->getOAuthRequest();
- if (!empty($this->access_token)) {
- $this->checkOAuthRequest();
+ if (!$oauthReq) {
+ if ($this->requiresAuth()) {
+ $this->checkBasicAuthUser(true);
} else {
- $this->checkBasicAuthUser();
+ // Check to see if a basic auth user is there even
+ // if one's not required
+ $this->checkBasicAuthUser(false);
}
} else {
+ $this->checkOAuthRequest($oauthReq);
+ }
- // Check to see if a basic auth user is there even
- // if one's not required
+ // Reject API calls with the wrong access level
- $this->checkBasicAuthUser(false);
+ if ($this->isReadOnly($args) == false) {
+ if ($this->access != self::READ_WRITE) {
+ $msg = _('API resource requires read-write access, ' .
+ 'but you only have read access.');
+ $this->clientError($msg, 401, $this->format);
+ exit;
+ }
}
return true;
}
- function handle($args)
+ /**
+ * Determine whether the request is an OAuth request.
+ * This is to avoid doign any unnecessary DB lookups.
+ *
+ * @return mixed the OAuthRequest or false
+ */
+
+ function getOAuthRequest()
{
- parent::handle($args);
+ ApiOauthAction::cleanRequest();
+
+ $req = OAuthRequest::from_request();
+
+ $consumer = $req->get_parameter('oauth_consumer_key');
+ $accessToken = $req->get_parameter('oauth_token');
+
+ // XXX: Is it good enough to assume it's not meant to be an
+ // OAuth request if there is no consumer or token? --Z
+
+ if (empty($consumer) || empty($accessToken)) {
+ return false;
+ }
+
+ return $req;
}
- function checkOAuthRequest()
- {
- common_debug("We have an OAuth request.");
+ /**
+ * Verifies the OAuth request signature, sets the auth user
+ * and access type (read-only or read-write)
+ *
+ * @param OAuthRequest $request the OAuth Request
+ *
+ * @return nothing
+ */
+ function checkOAuthRequest($request)
+ {
$datastore = new ApiStatusNetOAuthDataStore();
$server = new OAuthServer($datastore);
$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
$server->add_signature_method($hmac_method);
- ApiOauthAction::cleanRequest();
-
try {
- $req = OAuthRequest::from_request();
- $server->verify_request($req);
-
- $app = Oauth_application::getByConsumerKey($this->consumer_key);
+ $server->verify_request($request);
- if (empty($app)) {
+ $consumer = $request->get_parameter('oauth_consumer_key');
+ $access_token = $request->get_parameter('oauth_token');
- // this should really not happen
- common_log(LOG_WARN,
- "Couldn't find the OAuth app for consumer key: $this->consumer_key");
+ $app = Oauth_application::getByConsumerKey($consumer);
+ if (empty($app)) {
+ common_log(LOG_WARNING,
+ 'Couldn\'t find the OAuth app for consumer key: ' .
+ $consumer);
throw new OAuthException('No application for that consumer key.');
}
@@ -128,64 +164,55 @@ class ApiAuthAction extends ApiAction
$this->oauth_source = $app->name;
- $appUser = Oauth_application_user::staticGet('token',
- $this->access_token);
-
- // XXX: check that app->id and appUser->application_id and consumer all
- // match?
+ $appUser = Oauth_application_user::staticGet('token', $access_token);
if (!empty($appUser)) {
- // read or read-write
- $this->oauth_access_type = $appUser->access_type;
-
// If access_type == 0 we have either a request token
// or a bad / revoked access token
- if ($this->oauth_access_type != 0) {
+ if ($appUser->access_type != 0) {
+
+ // Set the access level for the api call
- // Set the read or read-write access for the api call
$this->access = ($appUser->access_type & Oauth_application::$writeAccess)
? self::READ_WRITE : self::READ_ONLY;
+ // Set the auth user
+
if (Event::handle('StartSetApiUser', array(&$user))) {
$this->auth_user = User::staticGet('id', $appUser->profile_id);
Event::handle('EndSetApiUser', array($user));
}
$msg = "API OAuth authentication for user '%s' (id: %d) on behalf of " .
- "application '%s' (id: %d).";
+ "application '%s' (id: %d) with %s access.";
common_log(LOG_INFO, sprintf($msg,
$this->auth_user->nickname,
$this->auth_user->id,
$app->name,
- $app->id));
- return true;
+ $app->id,
+ ($this->access = self::READ_WRITE) ?
+ 'read-write' : 'read-only'
+ ));
} else {
throw new OAuthException('Bad access token.');
}
} else {
- // also should not happen
+ // Also should not happen
+
throw new OAuthException('No user for that token.');
- }
+ }
} catch (OAuthException $e) {
- common_log(LOG_WARN, 'API OAuthException - ' . $e->getMessage());
- common_debug(var_export($req, true));
- $this->showOAuthError($e->getMessage());
- exit();
+ common_log(LOG_WARNING, 'API OAuthException - ' . $e->getMessage());
+ $this->showAuthError();
+ exit;
}
}
- function showOAuthError($msg)
- {
- header('HTTP/1.1 401 Unauthorized');
- header('Content-Type: text/html; charset=utf-8');
- print $msg . "\n";
- }
-
/**
* Does this API resource require authentication?
*
@@ -210,43 +237,48 @@ class ApiAuthAction extends ApiAction
$realm = common_config('site', 'name') . ' API';
- if (!isset($this->auth_user) && $required) {
+ if (!isset($this->auth_user_nickname) && $required) {
header('WWW-Authenticate: Basic realm="' . $realm . '"');
// show error if the user clicks 'cancel'
- $this->showBasicAuthError();
+ $this->showAuthError();
exit;
- } else if (isset($this->auth_user)) {
- $nickname = $this->auth_user;
- $password = $this->auth_pw;
- $user = common_check_user($nickname, $password);
+ } else {
+
+ $user = common_check_user($this->auth_user_nickname,
+ $this->auth_user_password);
+
if (Event::handle('StartSetApiUser', array(&$user))) {
- $this->auth_user = $user;
- // By default, all basic auth users have read and write access
- $this->access = self::READ_WRITE;
+ if (!empty($user)) {
+ $this->auth_user = $user;
+ }
Event::handle('EndSetApiUser', array($user));
}
- if (empty($this->auth_user)) {
+ // By default, basic auth users have rw access
+
+ $this->access = self::READ_WRITE;
+
+ if (empty($this->auth_user) && $required) {
// basic authentication failed
list($proxy, $ip) = common_client_ip();
- common_log(
- LOG_WARNING,
- 'Failed API auth attempt, nickname = ' .
- "$nickname, proxy = $proxy, ip = $ip."
- );
- $this->showBasicAuthError();
+
+ $msg = sprintf(_('Failed API auth attempt, nickname = %1$s, ' .
+ 'proxy = %2$s, ip = %3$s'),
+ $this->auth_user_nickname,
+ $proxy,
+ $ip);
+ common_log(LOG_WARNING, $msg);
+ $this->showAuthError();
exit;
}
}
-
- return true;
}
/**
@@ -260,32 +292,30 @@ class ApiAuthAction extends ApiAction
{
if (isset($_SERVER['AUTHORIZATION'])
|| isset($_SERVER['HTTP_AUTHORIZATION'])
- ) {
- $authorization_header = isset($_SERVER['HTTP_AUTHORIZATION'])
- ? $_SERVER['HTTP_AUTHORIZATION'] : $_SERVER['AUTHORIZATION'];
+ ) {
+ $authorization_header = isset($_SERVER['HTTP_AUTHORIZATION'])
+ ? $_SERVER['HTTP_AUTHORIZATION'] : $_SERVER['AUTHORIZATION'];
}
if (isset($_SERVER['PHP_AUTH_USER'])) {
- $this->auth_user = $_SERVER['PHP_AUTH_USER'];
- $this->auth_pw = $_SERVER['PHP_AUTH_PW'];
+ $this->auth_user_nickname = $_SERVER['PHP_AUTH_USER'];
+ $this->auth_user_password = $_SERVER['PHP_AUTH_PW'];
} elseif (isset($authorization_header)
&& strstr(substr($authorization_header, 0, 5), 'Basic')) {
- // decode the HTTP_AUTHORIZATION header on php-cgi server self
+ // Decode the HTTP_AUTHORIZATION header on php-cgi server self
// on fcgid server the header name is AUTHORIZATION
$auth_hash = base64_decode(substr($authorization_header, 6));
- list($this->auth_user, $this->auth_pw) = explode(':', $auth_hash);
+ list($this->auth_user_nickname,
+ $this->auth_user_password) = explode(':', $auth_hash);
- // set all to null on a empty basic auth request
+ // Set all to null on a empty basic auth request
- if ($this->auth_user == "") {
- $this->auth_user = null;
- $this->auth_pw = null;
+ if (empty($this->auth_user_nickname)) {
+ $this->auth_user_nickname = null;
+ $this->auth_password = null;
}
- } else {
- $this->auth_user = null;
- $this->auth_pw = null;
}
}
@@ -296,7 +326,7 @@ class ApiAuthAction extends ApiAction
* @return void
*/
- function showBasicAuthError()
+ function showAuthError()
{
header('HTTP/1.1 401 Unauthorized');
$msg = 'Could not authenticate you.';
diff --git a/lib/apioauthstore.php b/lib/apioauthstore.php
index 32110d057..1bb11cbca 100644
--- a/lib/apioauthstore.php
+++ b/lib/apioauthstore.php
@@ -159,5 +159,32 @@ class ApiStatusNetOAuthDataStore extends StatusNetOAuthDataStore
}
}
+ /**
+ * Revoke specified access token
+ *
+ * Revokes the token specified by $token_key.
+ * Throws exceptions in case of error.
+ *
+ * @param string $token_key the token to be revoked
+ * @param int $type type of token (0 = req, 1 = access)
+ *
+ * @access public
+ *
+ * @return void
+ */
+
+ public function revoke_token($token_key, $type = 0) {
+ $rt = new Token();
+ $rt->tok = $token_key;
+ $rt->type = $type;
+ $rt->state = 0;
+ if (!$rt->find(true)) {
+ throw new Exception('Tried to revoke unknown token');
+ }
+ if (!$rt->delete()) {
+ throw new Exception('Failed to delete revoked token');
+ }
+ }
+
}
diff --git a/lib/applicationeditform.php b/lib/applicationeditform.php
index 6f03a9bed..9b7d05861 100644
--- a/lib/applicationeditform.php
+++ b/lib/applicationeditform.php
@@ -168,8 +168,6 @@ class ApplicationEditForm extends Form
$this->access_type = '';
}
- $this->out->hidden('token', common_session_token());
-
$this->out->elementStart('ul', 'form_data');
$this->out->elementStart('li', array('id' => 'application_icon'));
diff --git a/lib/atom10feed.php b/lib/atom10feed.php
new file mode 100644
index 000000000..2d342e785
--- /dev/null
+++ b/lib/atom10feed.php
@@ -0,0 +1,327 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building an Atom feed in memory
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+class Atom10FeedException extends Exception
+{
+}
+
+/**
+ * Class for building an Atom feed in memory. Get the finished doc
+ * as a string with Atom10Feed::getString().
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class Atom10Feed extends XMLStringer
+{
+ public $xw;
+
+ // @fixme most of these should probably be read-only properties
+ private $namespaces;
+ private $authors;
+ private $subject;
+ private $categories;
+ private $contributors;
+ private $generator;
+ private $icon;
+ private $links;
+ private $selfLink;
+ private $selfLinkType;
+ public $logo;
+ private $rights;
+ public $subtitle;
+ public $title;
+ private $published;
+ private $updated;
+ private $entries;
+
+ /**
+ * Constructor
+ *
+ * @param boolean $indent flag to turn indenting on or off
+ *
+ * @return void
+ */
+ function __construct($indent = true) {
+ parent::__construct($indent);
+ $this->namespaces = array();
+ $this->authors = array();
+ $this->links = array();
+ $this->entries = array();
+ $this->addNamespace('', 'http://www.w3.org/2005/Atom');
+ }
+
+ /**
+ * Add another namespace to the feed
+ *
+ * @param string $namespace the namespace
+ * @param string $uri namspace uri
+ *
+ * @return void
+ */
+ function addNamespace($namespace, $uri)
+ {
+ $ns = array($namespace => $uri);
+ $this->namespaces = array_merge($this->namespaces, $ns);
+ }
+
+ function addAuthor($name, $uri = null, $email = null)
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart('author');
+
+ if (!empty($name)) {
+ $xs->element('name', null, $name);
+ } else {
+ throw new Atom10FeedException(
+ 'author element must contain a name element.'
+ );
+ }
+
+ if (isset($uri)) {
+ $xs->element('uri', null, $uri);
+ }
+
+ if (isset($email)) {
+ $xs->element('email', null, $email);
+ }
+
+ $xs->elementEnd('author');
+
+ array_push($this->authors, $xs->getString());
+ }
+
+ /**
+ * Add an Author to the feed via raw XML string
+ *
+ * @param string $xmlAuthor An XML string representation author
+ *
+ * @return void
+ */
+ function addAuthorRaw($xmlAuthor)
+ {
+ array_push($this->authors, $xmlAuthor);
+ }
+
+ function renderAuthors()
+ {
+ foreach ($this->authors as $author) {
+ $this->raw($author);
+ }
+ }
+
+ /**
+ * Add a activity feed subject via raw XML string
+ *
+ * @param string $xmlSubject An XML string representation of the subject
+ *
+ * @return void
+ */
+ function setActivitySubject($xmlSubject)
+ {
+ $this->subject = $xmlSubject;
+ }
+
+ function getNamespaces()
+ {
+ return $this->namespaces;
+ }
+
+ function initFeed()
+ {
+ $this->xw->startDocument('1.0', 'UTF-8');
+ $commonAttrs = array('xml:lang' => 'en-US');
+ 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);
+
+ if (!empty($this->logo)) {
+ $this->element('logo', null, $this->logo);
+ }
+
+ $this->element('updated', null, $this->updated);
+
+ $this->renderAuthors();
+
+ if ($this->selfLink) {
+ $this->addLink($this->selfLink, array('rel' => 'self',
+ 'type' => $this->selfLinkType));
+ }
+ $this->renderLinks();
+ }
+
+ /**
+ * Check that all required elements have been set, etc.
+ * Throws an Atom10FeedException if something's missing.
+ *
+ * @return void
+ */
+ function validate()
+ {
+ }
+
+ function renderLinks()
+ {
+ foreach ($this->links as $attrs)
+ {
+ $this->element('link', $attrs, null);
+ }
+ }
+
+ function addEntryRaw($xmlEntry)
+ {
+ array_push($this->entries, $xmlEntry);
+ }
+
+ function addEntry($entry)
+ {
+ array_push($this->entries, $entry->getString());
+ }
+
+ function renderEntries()
+ {
+ foreach ($this->entries as $entry) {
+ $this->raw($entry);
+ }
+ }
+
+ function endFeed()
+ {
+ $this->elementEnd('feed');
+ $this->xw->endDocument();
+ }
+
+ function getString()
+ {
+ if (Event::handle('StartApiAtom', array($this))) {
+
+ $this->validate();
+ $this->initFeed();
+
+ if (!empty($this->subject)) {
+ $this->raw($this->subject);
+ }
+
+ $this->renderEntries();
+ $this->endFeed();
+
+ Event::handle('EndApiAtom', array($this));
+ }
+
+ return $this->xw->outputMemory();
+ }
+
+ function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ function setSelfLink($url, $type='application/atom+xml')
+ {
+ $this->selfLink = $url;
+ $this->selfLinkType = $type;
+ }
+
+ function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+ }
+
+ function setLogo($logo)
+ {
+ $this->logo = $logo;
+ }
+
+ function setUpdated($dt)
+ {
+ $this->updated = common_date_iso8601($dt);
+ }
+
+ function setPublished($dt)
+ {
+ $this->published = common_date_iso8601($dt);
+ }
+
+ /**
+ * Adds a link element into the Atom document
+ *
+ * Assumes you want rel="alternate" and type="text/html" unless
+ * you send in $otherAttrs.
+ *
+ * @param string $uri the uri the href needs to point to
+ * @param array $otherAttrs other attributes to stick in
+ *
+ * @return void
+ */
+ function addLink($uri, $otherAttrs = null) {
+ $attrs = array('href' => $uri);
+
+ if (is_null($otherAttrs)) {
+ $attrs['rel'] = 'alternate';
+ $attrs['type'] = 'text/html';
+ } else {
+ $attrs = array_merge($attrs, $otherAttrs);
+ }
+
+ array_push($this->links, $attrs);
+ }
+
+}
diff --git a/lib/atomgroupnoticefeed.php b/lib/atomgroupnoticefeed.php
new file mode 100644
index 000000000..08c1c707c
--- /dev/null
+++ b/lib/atomgroupnoticefeed.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building an in-memory Atom feed for a particular group's
+ * timeline.
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+/**
+ * Class for group notice feeds. May contains a reference to the group.
+ *
+ * @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 AtomGroupNoticeFeed extends AtomNoticeFeed
+{
+ private $group;
+
+ /**
+ * Constructor
+ *
+ * @param Group $group the group for the feed
+ * @param boolean $indent flag to turn indenting on or off
+ *
+ * @return void
+ */
+ 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()
+ {
+ return $this->group;
+ }
+
+}
diff --git a/lib/atomnoticefeed.php b/lib/atomnoticefeed.php
new file mode 100644
index 000000000..e4df731fe
--- /dev/null
+++ b/lib/atomnoticefeed.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building an Atom feed from a collection of notices
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+/**
+ * Class for creating a feed that represents a collection of notices. Builds the
+ * feed in memory. Get the feed as a string with AtomNoticeFeed::getString().
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class AtomNoticeFeed extends Atom10Feed
+{
+ function __construct($indent = true) {
+ parent::__construct($indent);
+
+ // Feeds containing notice info use these namespaces
+
+ $this->addNamespace(
+ 'thr',
+ 'http://purl.org/syndication/thread/1.0'
+ );
+
+ $this->addNamespace(
+ 'georss',
+ 'http://www.georss.org/georss'
+ );
+
+ $this->addNamespace(
+ '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(
+ 'ostatus',
+ 'http://ostatus.org/schema/1.0'
+ );
+ }
+
+ /**
+ * Add more than one Notice to the feed
+ *
+ * @param mixed $notices an array of Notice objects or handle
+ *
+ */
+ function addEntryFromNotices($notices)
+ {
+ if (is_array($notices)) {
+ foreach ($notices as $notice) {
+ $this->addEntryFromNotice($notice);
+ }
+ } else {
+ while ($notices->fetch()) {
+ $this->addEntryFromNotice($notices);
+ }
+ }
+ }
+
+ /**
+ * Add a single Notice to the feed
+ *
+ * @param Notice $notice a Notice to add
+ */
+ function addEntryFromNotice($notice)
+ {
+ $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
new file mode 100644
index 000000000..428cc2de2
--- /dev/null
+++ b/lib/atomusernoticefeed.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for building an in-memory Atom feed for a particular user's
+ * timeline.
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET'))
+{
+ exit(1);
+}
+
+/**
+ * Class for user notice feeds. May contain a reference to the user.
+ *
+ * @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 AtomUserNoticeFeed extends AtomNoticeFeed
+{
+ private $user;
+
+ /**
+ * Constructor
+ *
+ * @param User $user the user for the feed
+ * @param boolean $indent flag to turn indenting on or off
+ *
+ * @return void
+ */
+
+ 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 17237086c..0a3763e2e 100644
--- a/lib/authenticationplugin.php
+++ b/lib/authenticationplugin.php
@@ -69,13 +69,17 @@ abstract class AuthenticationPlugin extends Plugin
/**
* Automatically register a user when they attempt to login with valid credentials.
* User::register($data) is a very useful method for this implementation
- * @param username
+ * @param username username (that is used to login and find the user in the authentication provider) of the user to be registered
+ * @param nickname nickname of the user in the SN system. If nickname is null, then set nickname = username
* @return mixed instance of User, or false (if user couldn't be created)
*/
- function autoRegister($username)
+ function autoRegister($username, $nickname = null)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$registration_data = array();
- $registration_data['nickname'] = $username ;
+ $registration_data['nickname'] = $nickname;
return User::register($registration_data);
}
@@ -97,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------------\\
@@ -125,14 +131,14 @@ 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) {
//someone already exists with the suggested nickname
//not much else we can do
}else{
- $user = $this->autoregister($suggested_nickname);
+ $user = $this->autoRegister($nickname, $suggested_nickname);
if($user){
User_username::register($user,$nickname,$this->provider_name);
return false;
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/cache.php b/lib/cache.php
index 635c96ad4..c09a1dd9f 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -47,6 +47,8 @@ class Cache
var $_items = array();
static $_inst = null;
+ const COMPRESSED = 1;
+
/**
* Singleton constructor
*
@@ -133,7 +135,7 @@ class Cache
*
* @param string $key The key to use for lookups
* @param string $value The value to store
- * @param integer $flag Flags to use, mostly ignored
+ * @param integer $flag Flags to use, may include Cache::COMPRESSED
* @param integer $expiry Expiry value, mostly ignored
*
* @return boolean success flag
@@ -158,6 +160,32 @@ class Cache
}
/**
+ * Atomically increment an existing numeric value.
+ * Existing expiration time should remain unchanged, if any.
+ *
+ * @param string $key The key to use for lookups
+ * @param int $step Amount to increment (default 1)
+ *
+ * @return mixed incremented value, or false if not set.
+ */
+ function increment($key, $step=1)
+ {
+ $value = false;
+ if (Event::handle('StartCacheIncrement', array(&$key, &$step, &$value))) {
+ // Fallback is not guaranteed to be atomic,
+ // and may original expiry value.
+ $value = $this->get($key);
+ if ($value !== false) {
+ $value += $step;
+ $ok = $this->set($key, $value);
+ $got = $this->get($key);
+ }
+ Event::handle('EndCacheIncrement', array($key, $step, $value));
+ }
+ return $value;
+ }
+
+ /**
* Delete the value associated with a key
*
* @param string $key Key to delete
diff --git a/lib/command.php b/lib/command.php
index c0a32e1b1..db8e80030 100644
--- a/lib/command.php
+++ b/lib/command.php
@@ -422,7 +422,7 @@ class RepeatCommand extends Command
$repeat = $notice->repeat($this->user->id, $channel->source);
if ($repeat) {
- common_broadcast_notice($repeat);
+
$channel->output($this->user, sprintf(_('Notice from %s repeated'), $recipient->nickname));
} else {
$channel->error($this->user, _('Error repeating notice.'));
@@ -492,7 +492,7 @@ class ReplyCommand extends Command
} else {
$channel->error($this->user, _('Error saving notice.'));
}
- common_broadcast_notice($notice);
+
}
}
@@ -548,12 +548,19 @@ class SubCommand extends Command
return;
}
- $result = subs_subscribe_user($this->user, $this->other);
+ $otherUser = User::staticGet('nickname', $this->other);
+
+ if (empty($otherUser)) {
+ $channel->error($this->user, _('No such user'));
+ return;
+ }
- if ($result == 'true') {
+ 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 ada48b339..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.0beta3');
+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
@@ -115,14 +116,30 @@ function __autoload($cls)
require_once 'Validate.php';
require_once 'markdown.php';
+// XXX: other formats here
+
+define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER);
+
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) {
@@ -136,6 +153,3 @@ try {
exit;
}
-// XXX: other formats here
-
-define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER);
diff --git a/lib/dbqueuemanager.php b/lib/dbqueuemanager.php
index c6350fc66..3032e4ec7 100644
--- a/lib/dbqueuemanager.php
+++ b/lib/dbqueuemanager.php
@@ -72,7 +72,7 @@ class DBQueueManager extends QueueManager
public function poll()
{
$this->_log(LOG_DEBUG, 'Checking for notices...');
- $qi = Queue_item::top($this->getQueues());
+ $qi = Queue_item::top($this->activeQueues());
if (empty($qi)) {
$this->_log(LOG_DEBUG, 'No notices waiting; idling.');
return false;
@@ -142,9 +142,4 @@ class DBQueueManager extends QueueManager
$this->stats('error', $queue);
}
-
- protected function _log($level, $msg)
- {
- common_log($level, 'DBQueueManager: '.$msg);
- }
}
diff --git a/lib/default.php b/lib/default.php
index d258bbaf4..f22d8b24a 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -30,6 +30,8 @@
$default =
array('site' =>
array('name' => 'Just another StatusNet microblog',
+ 'nickname' => 'statusnet',
+ 'wildcard' => null,
'server' => $_server,
'theme' => 'default',
'path' => $_path,
@@ -38,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,
@@ -51,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,
+ 'notice' => null // site wide notice text
),
'db' =>
array('database' => 'YOU HAVE TO SET THIS IN config.php',
@@ -79,11 +83,25 @@ $default =
'subsystem' => 'db', # default to database, or 'stomp'
'stomp_server' => null,
'queue_basename' => '/queue/statusnet/',
+ 'control_channel' => '/topic/statusnet/control', // broadcasts to all queue daemons
'stomp_username' => null,
'stomp_password' => null,
+ 'stomp_persistent' => true, // keep items across queue server restart, if persistence is enabled
+ 'stomp_manual_failover' => true, // if multiple servers are listed, treat them as separate (enqueue on one randomly, listen on all)
'monitor' => null, // URL to monitor ping endpoint (work in progress)
'softlimit' => '90%', // total size or % of memory_limit at which to restart queue threads gracefully
+ 'spawndelay' => 1, // Wait at least N seconds between (re)spawns of child processes to avoid slamming the queue server with subscription startup
'debug_memory' => false, // true to spit memory usage to log
+ 'inboxes' => true, // true to do inbox distribution & output queueing from in background via 'distrib' queue
+ '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)
),
'license' =>
array('type' => 'cc', # can be 'cc', 'allrightsreserved', 'private'
@@ -104,11 +122,13 @@ $default =
'avatar' =>
array('server' => null,
'dir' => INSTALLDIR . '/avatar/',
- 'path' => $_path . '/avatar/'),
+ 'path' => $_path . '/avatar/',
+ 'ssl' => null),
'background' =>
array('server' => null,
'dir' => INSTALLDIR . '/background/',
- 'path' => $_path . '/background/'),
+ 'path' => $_path . '/background/',
+ 'ssl' => null),
'public' =>
array('localonly' => true,
'blacklist' => array(),
@@ -116,7 +136,12 @@ $default =
'theme' =>
array('server' => null,
'dir' => null,
- 'path'=> null),
+ 'path'=> null,
+ 'ssl' => null),
+ 'javascript' =>
+ array('server' => null,
+ 'path'=> null,
+ 'ssl' => null),
'throttle' =>
array('enabled' => false, // whether to throttle edits; false by default
'count' => 20, // number of allowed messages in timespan
@@ -135,9 +160,11 @@ $default =
'invite' =>
array('enabled' => true),
'tag' =>
- array('dropoff' => 864000.0),
+ array('dropoff' => 864000.0, # controls weighting based on age
+ 'cutoff' => 86400 * 90), # only look at notices posted in last 90 days
'popular' =>
- array('dropoff' => 864000.0),
+ array('dropoff' => 864000.0, # controls weighting based on age
+ 'cutoff' => 86400 * 90), # only look at notices favorited in last 90 days
'daemon' =>
array('piddir' => '/var/run',
'user' => false,
@@ -150,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),
@@ -172,6 +199,7 @@ $default =
array('server' => null,
'dir' => INSTALLDIR . '/file/',
'path' => $_path . '/file/',
+ 'ssl' => null,
'supported' => array('image/png',
'image/jpeg',
'image/gif',
@@ -252,12 +280,18 @@ $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')),
+ array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice')),
+ 'singleuser' =>
+ array('enabled' => false,
+ 'nickname' => null),
+ 'robotstxt' =>
+ array('crawldelay' => 0,
+ 'disallow' => array('main', 'settings', 'admin', 'search', 'message')
+ ),
);
diff --git a/lib/designsettings.php b/lib/designsettings.php
index 8e44c03a9..4955e9219 100644
--- a/lib/designsettings.php
+++ b/lib/designsettings.php
@@ -327,8 +327,8 @@ class DesignSettingsAction extends AccountSettingsAction
{
parent::showScripts();
- $this->script('js/farbtastic/farbtastic.js');
- $this->script('js/userdesign.go.js');
+ $this->script('farbtastic/farbtastic.js');
+ $this->script('userdesign.go.js');
$this->autofocus('design_background-image_file');
}
diff --git a/lib/distribqueuehandler.php b/lib/distribqueuehandler.php
new file mode 100644
index 000000000..d2be7a92c
--- /dev/null
+++ b/lib/distribqueuehandler.php
@@ -0,0 +1,97 @@
+<?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/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+/**
+ * Base class for queue handlers.
+ *
+ * As extensions of the Daemon class, each queue handler has the ability
+ * to launch itself in the background, at which point it'll pass control
+ * to the configured QueueManager class to poll for updates.
+ *
+ * Subclasses must override at least the following methods:
+ * - transport
+ * - handle_notice
+ */
+
+class DistribQueueHandler
+{
+ /**
+ * Return transport keyword which identifies items this queue handler
+ * services; must be defined for all subclasses.
+ *
+ * Must be 8 characters or less to fit in the queue_item database.
+ * ex "email", "jabber", "sms", "irc", ...
+ *
+ * @return string
+ */
+
+ function transport()
+ {
+ return 'distrib';
+ }
+
+ /**
+ * Here's the meat of your queue handler -- you're handed a Notice
+ * object, which you may do as you will with.
+ *
+ * If this function indicates failure, a warning will be logged
+ * and the item is placed back in the queue to be re-run.
+ *
+ * @param Notice $notice
+ * @return boolean true on success, false on failure
+ */
+ function handle($notice)
+ {
+ // XXX: do we need to change this for remote users?
+
+ try {
+ $notice->addToInboxes();
+ } catch (Exception $e) {
+ $this->logit($notice, $e);
+ }
+
+ try {
+ Event::handle('EndNoticeSave', array($notice));
+ // Enqueue for other handlers
+ } catch (Exception $e) {
+ $this->logit($notice, $e);
+ }
+
+ try {
+ common_enqueue_notice($notice);
+ } catch (Exception $e) {
+ $this->logit($notice, $e);
+ }
+
+ return true;
+ }
+
+ protected function logit($notice, $e)
+ {
+ common_log(LOG_ERR, "Distrib queue exception saving notice $notice->id: " .
+ $e->getMessage() . ' ' .
+ str_replace("\n", " ", $e->getTraceAsString()));
+
+ // We'll still return true so we don't get stuck in a loop
+ // trying to run a bad insert over and over...
+ }
+}
+
diff --git a/lib/error.php b/lib/error.php
index 87a4d913b..a6a29119f 100644
--- a/lib/error.php
+++ b/lib/error.php
@@ -56,6 +56,7 @@ class ErrorAction extends Action
$this->code = $code;
$this->message = $message;
+ $this->minimal = StatusNet::isApi();
// XXX: hack alert: usually we aren't going to
// call this page directly, but because it's
@@ -102,7 +103,14 @@ class ErrorAction extends Action
function showPage()
{
- parent::showPage();
+ if ($this->minimal) {
+ // Even more minimal -- we're in a machine API
+ // and don't want to flood the output.
+ $this->extraHeaders();
+ $this->showContent();
+ } else {
+ parent::showPage();
+ }
// We don't want to have any more output after this
exit();
diff --git a/lib/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/grouplist.php b/lib/grouplist.php
index 99bff9cdc..854bc34e2 100644
--- a/lib/grouplist.php
+++ b/lib/grouplist.php
@@ -105,6 +105,7 @@ class GroupList extends Widget
'alt' =>
($this->group->fullname) ? $this->group->fullname :
$this->group->nickname));
+ $this->out->text(' ');
$hasFN = ($this->group->fullname) ? 'nickname' : 'fn org nickname';
$this->out->elementStart('span', $hasFN);
$this->out->raw($this->highlight($this->group->nickname));
@@ -112,16 +113,19 @@ class GroupList extends Widget
$this->out->elementEnd('a');
if ($this->group->fullname) {
+ $this->out->text(' ');
$this->out->elementStart('span', 'fn org');
$this->out->raw($this->highlight($this->group->fullname));
$this->out->elementEnd('span');
}
if ($this->group->location) {
+ $this->out->text(' ');
$this->out->elementStart('span', 'label');
$this->out->raw($this->highlight($this->group->location));
$this->out->elementEnd('span');
}
if ($this->group->homepage) {
+ $this->out->text(' ');
$this->out->elementStart('a', array('href' => $this->group->homepage,
'class' => 'url'));
$this->out->raw($this->highlight($this->group->homepage));
diff --git a/lib/groupsection.php b/lib/groupsection.php
index 7327f9e1a..3b0b3029d 100644
--- a/lib/groupsection.php
+++ b/lib/groupsection.php
@@ -85,9 +85,9 @@ class GroupSection extends Section
'href' => $group->homeUrl(),
'rel' => 'contact group',
'class' => 'url'));
+ $this->out->text(' ');
$logo = ($group->stream_logo) ?
$group->stream_logo : User_group::defaultLogo(AVATAR_STREAM_SIZE);
-
$this->out->element('img', array('src' => $logo,
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
@@ -95,6 +95,7 @@ class GroupSection extends Section
'alt' => ($group->fullname) ?
$group->fullname :
$group->nickname));
+ $this->out->text(' ');
$this->out->element('span', 'fn org nickname', $group->nickname);
$this->out->elementEnd('a');
$this->out->elementEnd('span');
diff --git a/lib/grouptagcloudsection.php b/lib/grouptagcloudsection.php
index 14ceda085..f1106cc7b 100644
--- a/lib/grouptagcloudsection.php
+++ b/lib/grouptagcloudsection.php
@@ -59,6 +59,7 @@ class GroupTagCloudSection extends TagCloudSection
function getTags()
{
$weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+ // @fixme should we use the cutoff too? Doesn't help with indexing per-group.
$names = $this->group->getAliases();
diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php
index 31660ce95..7786b5941 100644
--- a/lib/htmloutputter.php
+++ b/lib/htmloutputter.php
@@ -351,14 +351,58 @@ class HTMLOutputter extends XMLOutputter
function script($src, $type='text/javascript')
{
if(Event::handle('StartScriptElement', array($this,&$src,&$type))) {
+
$url = parse_url($src);
+
if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
- $src = common_path($src) . '?version=' . STATUSNET_VERSION;
+ if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
+
+ $src = common_path($src) . '?version=' . STATUSNET_VERSION;
+
+ }else{
+
+ $path = common_config('javascript', 'path');
+
+ if (empty($path)) {
+ $path = common_config('site', 'path') . '/js/';
+ }
+
+ if ($path[strlen($path)-1] != '/') {
+ $path .= '/';
+ }
+
+ if ($path[0] != '/') {
+ $path = '/'.$path;
+ }
+
+ $server = common_config('javascript', 'server');
+
+ if (empty($server)) {
+ $server = common_config('site', 'server');
+ }
+
+ $ssl = common_config('javascript', 'ssl');
+
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('javascript', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
+
+ $src = $protocol.'://'.$server.$path.$src . '?version=' . STATUSNET_VERSION;
+ }
}
+
$this->element('script', array('type' => $type,
'src' => $src),
' ');
+
Event::handle('EndScriptElement', array($this,$src,$type));
}
}
@@ -402,7 +446,7 @@ class HTMLOutputter extends XMLOutputter
{
if(Event::handle('StartCssLinkElement', array($this,&$src,&$theme,&$media))) {
$url = parse_url($src);
- if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
if(file_exists(Theme::file($src,$theme))){
$src = Theme::path($src, $theme);
diff --git a/lib/httpclient.php b/lib/httpclient.php
index 3f8262076..4c3af8d7d 100644
--- a/lib/httpclient.php
+++ b/lib/httpclient.php
@@ -81,12 +81,13 @@ class HTTPResponse extends HTTP_Request2_Response
}
/**
- * Check if the response is OK, generally a 200 status code.
+ * Check if the response is OK, generally a 200 or other 2xx status code.
* @return bool
*/
function isOk()
{
- return ($this->getStatus() == 200);
+ $status = $this->getStatus();
+ return ($status >= 200 && $status < 300);
}
}
diff --git a/lib/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/iomanager.php b/lib/iomanager.php
index ee2ff958b..217599a6d 100644
--- a/lib/iomanager.php
+++ b/lib/iomanager.php
@@ -59,9 +59,10 @@ abstract class IoManager
* your manager about each site you'll have to handle so you
* can do any necessary per-site setup.
*
- * @param string $site target site server name
+ * The new site will be the currently live configuration during
+ * this call.
*/
- public function addSite($site)
+ public function addSite()
{
/* no-op */
}
diff --git a/lib/iomaster.php b/lib/iomaster.php
index 29bd677bd..7cfb2c9a0 100644
--- a/lib/iomaster.php
+++ b/lib/iomaster.php
@@ -38,6 +38,9 @@ abstract class IoMaster
protected $pollTimeouts = array();
protected $lastPoll = array();
+ public $shutdown = false; // Did we do a graceful shutdown?
+ public $respawn = true; // Should we respawn after shutdown?
+
/**
* @param string $id process ID to use in logging/monitoring
*/
@@ -52,87 +55,46 @@ abstract class IoMaster
if ($multiSite !== null) {
$this->multiSite = $multiSite;
}
- if ($this->multiSite) {
- $this->sites = $this->findAllSites();
- } else {
- $this->sites = array(common_config('site', 'server'));
- }
- if (empty($this->sites)) {
- throw new Exception("Empty status_network table, cannot init");
- }
-
- foreach ($this->sites as $site) {
- if ($site != common_config('site', 'server')) {
- StatusNet::init($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();
/**
- * Pull all local sites from status_network table.
- * @return array of hostnames
- */
- protected function findAllSites()
- {
- $hosts = array();
- $sn = new Status_network();
- $sn->find();
- while ($sn->fetch()) {
- $hosts[] = $sn->hostname;
- }
- return $hosts;
- }
-
- /**
* Instantiate an i/o manager class for the current site.
* If a multi-site capable handler is already present,
* we don't need to build a new one.
*
- * @param string $class
+ * @param mixed $manager class name (to run $class::get()) or object
*/
- protected function instantiate($class)
+ protected function instantiate($manager)
{
- if (is_string($class) && isset($this->singletons[$class])) {
- // Already instantiated a multi-site-capable handler.
- // Just let it know it should listen to this site too!
- $this->singletons[$class]->addSite(common_config('site', 'server'));
- return;
+ if (is_string($manager)) {
+ $manager = call_user_func(array($class, 'get'));
}
- $manager = $this->getManager($class);
-
- if ($this->multiSite) {
- $caps = $manager->multiSite();
- if ($caps == IoManager::SINGLE_ONLY) {
+ $caps = $manager->multiSite();
+ if ($caps == IoManager::SINGLE_ONLY) {
+ if ($this->multiSite) {
throw new Exception("$class can't run with --all; aborting.");
}
- if ($caps == IoManager::INSTANCE_PER_PROCESS) {
- // Save this guy for later!
- // We'll only need the one to cover multiple sites.
- $this->singletons[$class] = $manager;
- $manager->addSite(common_config('site', 'server'));
- }
+ } else if ($caps == IoManager::INSTANCE_PER_PROCESS) {
+ $manager->addSite();
}
- $this->managers[] = $manager;
- }
-
- protected function getManager($class)
- {
- if(is_object($class)){
- return $class;
- } else {
- return call_user_func(array($class, 'get'));
+ if (!in_array($manager, $this->managers, true)) {
+ // Only need to save singletons once
+ $this->managers[] = $manager;
}
}
@@ -147,8 +109,9 @@ abstract class IoMaster
{
$this->logState('init');
$this->start();
+ $this->checkMemory(false);
- while (true) {
+ while (!$this->shutdown) {
$timeouts = array_values($this->pollTimeouts);
$timeouts[] = 60; // default max timeout
@@ -200,16 +163,7 @@ abstract class IoMaster
$this->logState('idle');
$this->idle();
- $memoryLimit = $this->softMemoryLimit();
- if ($memoryLimit > 0) {
- $usage = memory_get_usage();
- if ($usage > $memoryLimit) {
- common_log(LOG_INFO, "Queue thread hit soft memory limit ($usage > $memoryLimit); gracefully restarting.");
- break;
- } else if (common_config('queue', 'debug_memory')) {
- common_log(LOG_DEBUG, "Memory usage $usage");
- }
- }
+ $this->checkMemory();
}
$this->logState('shutdown');
@@ -217,6 +171,31 @@ abstract class IoMaster
}
/**
+ * Check runtime memory usage, possibly triggering a graceful shutdown
+ * and thread respawn if we've crossed the soft limit.
+ *
+ * @param boolean $respawn if false we'll shut down instead of respawning
+ */
+ protected function checkMemory($respawn=true)
+ {
+ $memoryLimit = $this->softMemoryLimit();
+ if ($memoryLimit > 0) {
+ $usage = memory_get_usage();
+ if ($usage > $memoryLimit) {
+ common_log(LOG_INFO, "Queue thread hit soft memory limit ($usage > $memoryLimit); gracefully restarting.");
+ if ($respawn) {
+ $this->requestRestart();
+ } else {
+ $this->requestShutdown();
+ }
+ } else if (common_config('queue', 'debug_memory')) {
+ $fmt = number_format($usage);
+ common_log(LOG_DEBUG, "Memory usage $fmt");
+ }
+ }
+ }
+
+ /**
* Return fully-parsed soft memory limit in bytes.
* @return intval 0 or -1 if not set
*/
@@ -358,5 +337,24 @@ abstract class IoMaster
$owners[] = "thread:" . $this->id;
$this->monitor->stats($key, $owners);
}
+
+ /**
+ * For IoManagers to request a graceful shutdown at end of event loop.
+ */
+ public function requestShutdown()
+ {
+ $this->shutdown = true;
+ $this->respawn = false;
+ }
+
+ /**
+ * For IoManagers to request a graceful restart at end of event loop.
+ */
+ public function requestRestart()
+ {
+ $this->shutdown = true;
+ $this->respawn = true;
+ }
+
}
diff --git a/lib/jabber.php b/lib/jabber.php
index b6b23521b..e1bf06ba6 100644
--- a/lib/jabber.php
+++ b/lib/jabber.php
@@ -358,7 +358,7 @@ function jabber_broadcast_notice($notice)
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
- return false;
+ return true; // not recoverable; discard.
}
$msg = jabber_format_notice($profile, $notice);
@@ -437,7 +437,7 @@ function jabber_public_notice($notice)
common_log(LOG_WARNING, 'Refusing to broadcast notice with ' .
'unknown profile ' . common_log_objstring($notice),
__FILE__);
- return false;
+ return true; // not recoverable; discard.
}
$msg = jabber_format_notice($profile, $notice);
diff --git a/lib/jabberqueuehandler.php b/lib/jabberqueuehandler.php
index 83471f2df..d6b4b7416 100644
--- a/lib/jabberqueuehandler.php
+++ b/lib/jabberqueuehandler.php
@@ -40,7 +40,7 @@ class JabberQueueHandler extends QueueHandler
try {
return jabber_broadcast_notice($notice);
} catch (XMPPHP_Exception $e) {
- $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
+ common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
return false;
}
}
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/liberalstomp.php b/lib/liberalstomp.php
index c9233843a..3d38953fd 100644
--- a/lib/liberalstomp.php
+++ b/lib/liberalstomp.php
@@ -34,6 +34,22 @@ class LiberalStomp extends Stomp
}
/**
+ * Return the host we're currently connected to.
+ *
+ * @return string
+ */
+ function getServer()
+ {
+ $idx = $this->_currentHost;
+ if ($idx >= 0) {
+ $host = $this->_hosts[$idx];
+ return "$host[0]:$host[1]";
+ } else {
+ return '[unconnected]';
+ }
+ }
+
+ /**
* Make socket connection to the server
* We also set the stream to non-blocking mode, since we'll be
* select'ing to wait for updates. In blocking mode it seems
@@ -71,10 +87,12 @@ class LiberalStomp extends Stomp
// @fixme this sometimes hangs in blocking mode...
// shouldn't we have been idle until we found there's more data?
$read = fread($this->_socket, $rb);
- if ($read === false) {
- $this->_reconnect();
+ if ($read === false || ($read === '' && feof($this->_socket))) {
+ // @fixme possibly attempt an auto reconnect as old code?
+ throw new StompException("Error reading");
+ //$this->_reconnect();
// @fixme this will lose prior items
- return $this->readFrames();
+ //return $this->readFrames();
}
$data .= $read;
if (strpos($data, "\x00") !== false) {
diff --git a/lib/mail.php b/lib/mail.php
index c724764cc..807b6a363 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -133,12 +133,13 @@ function mail_notify_from()
* @param User &$user user to send email to
* @param string $subject subject of the email
* @param string $body body of the email
+ * @param array $headers optional list of email headers
* @param string $address optional specification of email address
*
* @return boolean success flag
*/
-function mail_to_user(&$user, $subject, $body, $address=null)
+function mail_to_user(&$user, $subject, $body, $headers=array(), $address=null)
{
if (!$address) {
$address = $user->email;
@@ -180,7 +181,9 @@ function mail_confirm_address($user, $code, $nickname, $address)
$nickname, common_config('site', 'name'),
common_local_url('confirmaddress', array('code' => $code)),
common_config('site', 'name'));
- return mail_to_user($user, $subject, $body, $address);
+ $headers = array();
+
+ return mail_to_user($user, $subject, $body, $headers, $address);
}
/**
@@ -231,6 +234,7 @@ function mail_subscribe_notify_profile($listenee, $other)
$recipients = $listenee->email;
+ $headers = _mail_prepare_headers('subscribe', $listenee->nickname, $other->nickname);
$headers['From'] = mail_notify_from();
$headers['To'] = $name . ' <' . $listenee->email . '>';
$headers['Subject'] = sprintf(_('%1$s is now listening to '.
@@ -476,7 +480,10 @@ function mail_notify_nudge($from, $to)
common_local_url('all', array('nickname' => $to->nickname)),
common_config('site', 'name'));
common_init_locale();
- return mail_to_user($to, $subject, $body);
+
+ $headers = _mail_prepare_headers('nudge', $to->nickname, $from->nickname);
+
+ return mail_to_user($to, $subject, $body, $headers);
}
/**
@@ -526,8 +533,10 @@ function mail_notify_message($message, $from=null, $to=null)
common_local_url('newmessage', array('to' => $from->id)),
common_config('site', 'name'));
+ $headers = _mail_prepare_headers('message', $to->nickname, $from->nickname);
+
common_init_locale();
- return mail_to_user($to, $subject, $body);
+ return mail_to_user($to, $subject, $body, $headers);
}
/**
@@ -578,8 +587,10 @@ function mail_notify_fave($other, $user, $notice)
common_config('site', 'name'),
$user->nickname);
+ $headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname);
+
common_init_locale();
- mail_to_user($other, $subject, $body);
+ mail_to_user($other, $subject, $body, $headers);
}
/**
@@ -611,19 +622,19 @@ function mail_notify_attn($user, $notice)
common_init_locale($user->language);
- if ($notice->conversation != $notice->id) {
- $conversationEmailText = "The full conversation can be read here:\n\n".
- "\t%5\$s\n\n ";
- $conversationUrl = common_local_url('conversation',
+ if ($notice->conversation != $notice->id) {
+ $conversationEmailText = "The full conversation can be read here:\n\n".
+ "\t%5\$s\n\n ";
+ $conversationUrl = common_local_url('conversation',
array('id' => $notice->conversation)).'#notice-'.$notice->id;
- } else {
- $conversationEmailText = "%5\$s";
- $conversationUrl = null;
- }
+ } else {
+ $conversationEmailText = "%5\$s";
+ $conversationUrl = null;
+ }
$subject = sprintf(_('%s (@%s) sent a notice to your attention'), $bestname, $sender->nickname);
- $body = sprintf(_("%1\$s (@%9\$s) just sent a notice to your attention (an '@-reply') on %2\$s.\n\n".
+ $body = sprintf(_("%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".
@@ -641,7 +652,7 @@ function mail_notify_attn($user, $notice)
common_local_url('shownotice',
array('notice' => $notice->id)),//%3
$notice->content,//%4
- $conversationUrl,//%5
+ $conversationUrl,//%5
common_local_url('newnotice',
array('replyto' => $sender->nickname, 'inreplyto' => $notice->id)),//%6
common_local_url('replies',
@@ -649,6 +660,30 @@ function mail_notify_attn($user, $notice)
common_local_url('emailsettings'), //%8
$sender->nickname); //%9
+ $headers = _mail_prepare_headers('mention', $user->nickname, $sender->nickname);
+
common_init_locale();
- mail_to_user($user, $subject, $body);
+ mail_to_user($user, $subject, $body, $headers);
}
+
+/**
+ * Prepare the common mail headers used in notification emails
+ *
+ * @param string $msg_type type of message being sent to the user
+ * @param string $to nickname of the receipient
+ * @param string $from nickname of the user triggering the notification
+ *
+ * @return array list of mail headers to include in the message
+ */
+function _mail_prepare_headers($msg_type, $to, $from)
+{
+ $headers = array(
+ 'X-StatusNet-MessageType' => $msg_type,
+ 'X-StatusNet-TargetUser' => $to,
+ 'X-StatusNet-SourceUser' => $from,
+ 'X-StatusNet-Domain' => common_config('site', 'server')
+ );
+
+ return $headers;
+}
+
diff --git a/lib/mailhandler.php b/lib/mailhandler.php
index 85be89f18..890f6d5b4 100644
--- a/lib/mailhandler.php
+++ b/lib/mailhandler.php
@@ -160,7 +160,7 @@ class MailHandler
foreach($mediafiles as $mf){
$mf->attachToNotice($notice);
}
- common_broadcast_notice($notice);
+
$this->log(LOG_INFO,
'Added notice ' . $notice->id . ' from user ' . $user->nickname);
return true;
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/mysqlschema.php b/lib/mysqlschema.php
new file mode 100644
index 000000000..485096ac4
--- /dev/null
+++ b/lib/mysqlschema.php
@@ -0,0 +1,538 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Database schema utilities
+ *
+ * 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 Database
+ * @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);
+}
+
+/**
+ * Class representing the database schema
+ *
+ * A class representing the database schema. Can be used to
+ * manipulate the schema -- especially for plugins and upgrade
+ * utilities.
+ *
+ * @category Database
+ * @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/
+ */
+
+class MysqlSchema extends Schema
+{
+ static $_single = null;
+ protected $conn = null;
+
+ /**
+ * Constructor. Only run once for singleton object.
+ */
+
+ protected function __construct()
+ {
+ // XXX: there should be an easier way to do this.
+ $user = new User();
+
+ $this->conn = $user->getDatabaseConnection();
+
+ $user->free();
+
+ unset($user);
+ }
+
+ /**
+ * Main public entry point. Use this to get
+ * the singleton object.
+ *
+ * @return Schema the (single) Schema object
+ */
+
+ static function get()
+ {
+ if (empty(self::$_single)) {
+ self::$_single = new Schema();
+ }
+ return self::$_single;
+ }
+
+ /**
+ * Returns a TableDef object for the table
+ * in the schema with the given name.
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $name Name of the table to get
+ *
+ * @return TableDef tabledef for that table.
+ */
+
+ public function getTableDef($name)
+ {
+ $res = $this->conn->query('DESCRIBE ' . $name);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ $td = new TableDef();
+
+ $td->name = $name;
+ $td->columns = array();
+
+ $row = array();
+
+ while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
+
+ $cd = new ColumnDef();
+
+ $cd->name = $row['Field'];
+
+ $packed = $row['Type'];
+
+ if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) {
+ $cd->type = $match[1];
+ $cd->size = $match[2];
+ } else {
+ $cd->type = $packed;
+ }
+
+ $cd->nullable = ($row['Null'] == 'YES') ? true : false;
+ $cd->key = $row['Key'];
+ $cd->default = $row['Default'];
+ $cd->extra = $row['Extra'];
+
+ $td->columns[] = $cd;
+ }
+
+ return $td;
+ }
+
+ /**
+ * Gets a ColumnDef object for a single column.
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $table name of the table
+ * @param string $column name of the column
+ *
+ * @return ColumnDef definition of the column or null
+ * if not found.
+ */
+
+ public function getColumnDef($table, $column)
+ {
+ $td = $this->getTableDef($table);
+
+ foreach ($td->columns as $cd) {
+ if ($cd->name == $column) {
+ return $cd;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Creates a table with the given names and columns.
+ *
+ * @param string $name Name of the table
+ * @param array $columns Array of ColumnDef objects
+ * for new table.
+ *
+ * @return boolean success flag
+ */
+
+ public function createTable($name, $columns)
+ {
+ $uniques = array();
+ $primary = array();
+ $indices = array();
+
+ $sql = "CREATE TABLE $name (\n";
+
+ for ($i = 0; $i < count($columns); $i++) {
+
+ $cd =& $columns[$i];
+
+ if ($i > 0) {
+ $sql .= ",\n";
+ }
+
+ $sql .= $this->_columnSql($cd);
+
+ switch ($cd->key) {
+ case 'UNI':
+ $uniques[] = $cd->name;
+ break;
+ case 'PRI':
+ $primary[] = $cd->name;
+ break;
+ case 'MUL':
+ $indices[] = $cd->name;
+ break;
+ }
+ }
+
+ if (count($primary) > 0) { // it really should be...
+ $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")";
+ }
+
+ foreach ($uniques as $u) {
+ $sql .= ",\nunique index {$name}_{$u}_idx ($u)";
+ }
+
+ foreach ($indices as $i) {
+ $sql .= ",\nindex {$name}_{$i}_idx ($i)";
+ }
+
+ $sql .= "); ";
+
+ common_log(LOG_INFO, $sql);
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a table from the schema
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $name Name of the table to drop
+ *
+ * @return boolean success flag
+ */
+
+ public function dropTable($name)
+ {
+ $res = $this->conn->query("DROP TABLE $name");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Adds an index to a table.
+ *
+ * If no name is provided, a name will be made up based
+ * on the table name and column names.
+ *
+ * Throws an exception on database error, esp. if the table
+ * does not exist.
+ *
+ * @param string $table Name of the table
+ * @param array $columnNames Name of columns to index
+ * @param string $name (Optional) name of the index
+ *
+ * @return boolean success flag
+ */
+
+ public function createIndex($table, $columnNames, $name=null)
+ {
+ if (!is_array($columnNames)) {
+ $columnNames = array($columnNames);
+ }
+
+ if (empty($name)) {
+ $name = "$table_".implode("_", $columnNames)."_idx";
+ }
+
+ $res = $this->conn->query("ALTER TABLE $table ".
+ "ADD INDEX $name (".
+ implode(",", $columnNames).")");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a named index from a table.
+ *
+ * @param string $table name of the table the index is on.
+ * @param string $name name of the index
+ *
+ * @return boolean success flag
+ */
+
+ public function dropIndex($table, $name)
+ {
+ $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Adds a column to a table
+ *
+ * @param string $table name of the table
+ * @param ColumnDef $columndef Definition of the new
+ * column.
+ *
+ * @return boolean success flag
+ */
+
+ public function addColumn($table, $columndef)
+ {
+ $sql = "ALTER TABLE $table ADD COLUMN " . $this->_columnSql($columndef);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Modifies a column in the schema.
+ *
+ * The name must match an existing column and table.
+ *
+ * @param string $table name of the table
+ * @param ColumnDef $columndef new definition of the column.
+ *
+ * @return boolean success flag
+ */
+
+ public function modifyColumn($table, $columndef)
+ {
+ $sql = "ALTER TABLE $table MODIFY COLUMN " .
+ $this->_columnSql($columndef);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a column from a table
+ *
+ * The name must match an existing column.
+ *
+ * @param string $table name of the table
+ * @param string $columnName name of the column to drop
+ *
+ * @return boolean success flag
+ */
+
+ public function dropColumn($table, $columnName)
+ {
+ $sql = "ALTER TABLE $table DROP COLUMN $columnName";
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Ensures that a table exists with the given
+ * name and the given column definitions.
+ *
+ * If the table does not yet exist, it will
+ * create the table. If it does exist, it will
+ * alter the table to match the column definitions.
+ *
+ * @param string $tableName name of the table
+ * @param array $columns array of ColumnDef
+ * objects for the table
+ *
+ * @return boolean success flag
+ */
+
+ public function ensureTable($tableName, $columns)
+ {
+ // XXX: DB engine portability -> toilet
+
+ try {
+ $td = $this->getTableDef($tableName);
+ } catch (Exception $e) {
+ if (preg_match('/no such table/', $e->getMessage())) {
+ return $this->createTable($tableName, $columns);
+ } else {
+ throw $e;
+ }
+ }
+
+ $cur = $this->_names($td->columns);
+ $new = $this->_names($columns);
+
+ $toadd = array_diff($new, $cur);
+ $todrop = array_diff($cur, $new);
+ $same = array_intersect($new, $cur);
+ $tomod = array();
+
+ foreach ($same as $m) {
+ $curCol = $this->_byName($td->columns, $m);
+ $newCol = $this->_byName($columns, $m);
+
+ if (!$newCol->equals($curCol)) {
+ $tomod[] = $newCol->name;
+ }
+ }
+
+ if (count($toadd) + count($todrop) + count($tomod) == 0) {
+ // nothing to do
+ return true;
+ }
+
+ // For efficiency, we want this all in one
+ // query, instead of using our methods.
+
+ $phrase = array();
+
+ foreach ($toadd as $columnName) {
+ $cd = $this->_byName($columns, $columnName);
+
+ $phrase[] = 'ADD COLUMN ' . $this->_columnSql($cd);
+ }
+
+ foreach ($todrop as $columnName) {
+ $phrase[] = 'DROP COLUMN ' . $columnName;
+ }
+
+ foreach ($tomod as $columnName) {
+ $cd = $this->_byName($columns, $columnName);
+
+ $phrase[] = 'MODIFY COLUMN ' . $this->_columnSql($cd);
+ }
+
+ $sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the array of names from an array of
+ * ColumnDef objects.
+ *
+ * @param array $cds array of ColumnDef objects
+ *
+ * @return array strings for name values
+ */
+
+ private function _names($cds)
+ {
+ $names = array();
+
+ foreach ($cds as $cd) {
+ $names[] = $cd->name;
+ }
+
+ return $names;
+ }
+
+ /**
+ * Get a ColumnDef from an array matching
+ * name.
+ *
+ * @param array $cds Array of ColumnDef objects
+ * @param string $name Name of the column
+ *
+ * @return ColumnDef matching item or null if no match.
+ */
+
+ private function _byName($cds, $name)
+ {
+ foreach ($cds as $cd) {
+ if ($cd->name == $name) {
+ return $cd;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Return the proper SQL for creating or
+ * altering a column.
+ *
+ * Appropriate for use in CREATE TABLE or
+ * ALTER TABLE statements.
+ *
+ * @param ColumnDef $cd column to create
+ *
+ * @return string correct SQL for that column
+ */
+
+ private function _columnSql($cd)
+ {
+ $sql = "{$cd->name} ";
+
+ if (!empty($cd->size)) {
+ $sql .= "{$cd->type}({$cd->size}) ";
+ } else {
+ $sql .= "{$cd->type} ";
+ }
+
+ if (!empty($cd->default)) {
+ $sql .= "default {$cd->default} ";
+ } else {
+ $sql .= ($cd->nullable) ? "null " : "not null ";
+ }
+
+ if (!empty($cd->auto_increment)) {
+ $sql .= " auto_increment ";
+ }
+
+ if (!empty($cd->extra)) {
+ $sql .= "{$cd->extra} ";
+ }
+
+ return $sql;
+ }
+}
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 78abf34a7..88a925241 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -294,6 +294,7 @@ class NoticeListItem extends Widget
}
$this->out->elementStart('a', $attrs);
$this->showAvatar();
+ $this->out->text(' ');
$this->showNickname();
$this->out->elementEnd('a');
$this->out->elementEnd('span');
@@ -379,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));
@@ -432,17 +433,20 @@ class NoticeListItem extends Widget
$url = $location->getUrl();
+ $this->out->text(' ');
$this->out->elementStart('span', array('class' => 'location'));
$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');
}
@@ -473,9 +477,11 @@ class NoticeListItem extends Widget
function showNoticeSource()
{
if ($this->notice->source) {
+ $this->out->text(' ');
$this->out->elementStart('span', 'source');
$this->out->text(_('from'));
$source_name = _($this->notice->source);
+ $this->out->text(' ');
switch ($this->notice->source) {
case 'web':
case 'xmpp':
@@ -486,15 +492,35 @@ class NoticeListItem extends Widget
$this->out->element('span', 'device', $source_name);
break;
default:
- $ns = Notice_source::staticGet($this->notice->source);
- if ($ns) {
+
+ $name = $source_name;
+ $url = null;
+
+ if (Event::handle('StartNoticeSourceLink', array($this->notice, &$name, &$url, &$title))) {
+ $ns = Notice_source::staticGet($this->notice->source);
+
+ if ($ns) {
+ $name = $ns->name;
+ $url = $ns->url;
+ } else {
+ $app = Oauth_application::staticGet('name', $this->notice->source);
+ if ($app) {
+ $name = $app->name;
+ $url = $app->source_url;
+ }
+ }
+ }
+ Event::handle('EndNoticeSourceLink', array($this->notice, &$name, &$url, &$title));
+
+ if (!empty($name) && !empty($url)) {
$this->out->elementStart('span', 'device');
- $this->out->element('a', array('href' => $ns->url,
- 'rel' => 'external'),
- $ns->name);
+ $this->out->element('a', array('href' => $url,
+ 'rel' => 'external',
+ 'title' => $title),
+ $name);
$this->out->elementEnd('span');
} else {
- $this->out->element('span', 'device', $source_name);
+ $this->out->element('span', 'device', $name);
}
break;
}
@@ -514,21 +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){
- $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);
+ }
}
}
@@ -555,11 +600,8 @@ class NoticeListItem extends Widget
$this->out->raw(_('Repeated by'));
- $avatar = $repeater->getAvatar(AVATAR_MINI_SIZE);
-
$this->out->elementStart('a', $attrs);
-
- $this->out->element('span', 'nickname', $repeater->nickname);
+ $this->out->element('span', 'fn nickname', $repeater->nickname);
$this->out->elementEnd('a');
$this->out->elementEnd('span');
@@ -578,12 +620,14 @@ class NoticeListItem extends Widget
function showReplyLink()
{
if (common_logged_in()) {
+ $this->out->text(' ');
$reply_url = common_local_url('newnotice',
array('replyto' => $this->profile->nickname, 'inreplyto' => $this->notice->id));
$this->out->elementStart('a', array('href' => $reply_url,
'class' => 'notice_reply',
'title' => _('Reply to this notice')));
$this->out->text(_('Reply'));
+ $this->out->text(' ');
$this->out->element('span', 'notice_id', $this->notice->id);
$this->out->elementEnd('a');
}
@@ -603,7 +647,7 @@ class NoticeListItem extends Widget
if (!empty($user) &&
($todel->profile_id == $user->id || $user->hasRight(Right::DELETEOTHERSNOTICE))) {
-
+ $this->out->text(' ');
$deleteurl = common_local_url('deletenotice',
array('notice' => $todel->id));
$this->out->element('a', array('href' => $deleteurl,
@@ -622,6 +666,7 @@ class NoticeListItem extends Widget
{
$user = common_current_user();
if ($user && $user->id != $this->notice->profile_id) {
+ $this->out->text(' ');
$profile = $user->getProfile();
if ($profile->hasRepeated($this->notice->id)) {
$this->out->element('span', array('class' => 'repeated',
diff --git a/lib/noticesection.php b/lib/noticesection.php
index 24465f8ba..7157feafc 100644
--- a/lib/noticesection.php
+++ b/lib/noticesection.php
@@ -90,6 +90,7 @@ class NoticeSection extends Section
'alt' => ($profile->fullname) ?
$profile->fullname :
$profile->nickname));
+ $this->out->text(' ');
$this->out->element('span', 'fn nickname', $profile->nickname);
$this->out->elementEnd('a');
$this->out->elementEnd('span');
diff --git a/lib/oauthclient.php b/lib/oauthclient.php
index b22fd7897..bc7587183 100644
--- a/lib/oauthclient.php
+++ b/lib/oauthclient.php
@@ -90,20 +90,47 @@ class OAuthClient
/**
* Gets a request token from the given url
*
- * @param string $url OAuth endpoint for grabbing request tokens
+ * @param string $url OAuth endpoint for grabbing request tokens
+ * @param string $callback authorized request token callback
*
* @return OAuthToken $token the request token
*/
- function getRequestToken($url)
+ function getRequestToken($url, $callback = null)
{
- $response = $this->oAuthGet($url);
+ $params = null;
+
+ if (!is_null($callback)) {
+ $params['oauth_callback'] = $callback;
+ }
+
+ $response = $this->oAuthGet($url, $params);
+
$arr = array();
parse_str($response, $arr);
- if (isset($arr['oauth_token']) && isset($arr['oauth_token_secret'])) {
- $token = new OAuthToken($arr['oauth_token'], @$arr['oauth_token_secret']);
+
+ $token = $arr['oauth_token'];
+ $secret = $arr['oauth_token_secret'];
+ $confirm = $arr['oauth_callback_confirmed'];
+
+ if (isset($token) && isset($secret)) {
+
+ $token = new OAuthToken($token, $secret);
+
+ if (isset($confirm)) {
+ if ($confirm == 'true') {
+ common_debug('Twitter bridge - callback confirmed.');
+ return $token;
+ } else {
+ throw new OAuthClientException(
+ 'Callback was not confirmed by Twitter.'
+ );
+ }
+ }
return $token;
} else {
- throw new OAuthClientException();
+ throw new OAuthClientException(
+ 'Could not get a request token from Twitter.'
+ );
}
}
@@ -113,49 +140,64 @@ class OAuthClient
*
* @param string $url endpoint for authorizing request tokens
* @param OAuthToken $request_token the request token to be authorized
- * @param string $oauth_callback optional callback url
*
* @return string $authorize_url the url to redirect to
*/
- function getAuthorizeLink($url, $request_token, $oauth_callback = null)
+ function getAuthorizeLink($url, $request_token)
{
$authorize_url = $url . '?oauth_token=' .
$request_token->key;
- if (isset($oauth_callback)) {
- $authorize_url .= '&oauth_callback=' . urlencode($oauth_callback);
- }
-
return $authorize_url;
}
/**
* Fetches an access token
*
- * @param string $url OAuth endpoint for exchanging authorized request tokens
- * for access tokens
+ * @param string $url OAuth endpoint for exchanging authorized request tokens
+ * for access tokens
+ * @param string $verifier 1.0a verifier
*
* @return OAuthToken $token the access token
*/
- function getAccessToken($url)
+ function getAccessToken($url, $verifier = null)
{
- $response = $this->oAuthPost($url);
- parse_str($response);
- $token = new OAuthToken($oauth_token, $oauth_token_secret);
- return $token;
+ $params = array();
+
+ if (!is_null($verifier)) {
+ $params['oauth_verifier'] = $verifier;
+ }
+
+ $response = $this->oAuthPost($url, $params);
+
+ $arr = array();
+ parse_str($response, $arr);
+
+ $token = $arr['oauth_token'];
+ $secret = $arr['oauth_token_secret'];
+
+ if (isset($token) && isset($secret)) {
+ $token = new OAuthToken($token, $secret);
+ return $token;
+ } else {
+ throw new OAuthClientException(
+ 'Could not get a access token from Twitter.'
+ );
+ }
}
/**
- * Use HTTP GET to make a signed OAuth request
+ * Use HTTP GET to make a signed OAuth requesta
*
- * @param string $url OAuth endpoint
+ * @param string $url OAuth request token endpoint
+ * @param array $params additional parameters
*
* @return mixed the request
*/
- function oAuthGet($url)
+ function oAuthGet($url, $params = null)
{
$request = OAuthRequest::from_consumer_and_token($this->consumer,
- $this->token, 'GET', $url, null);
+ $this->token, 'GET', $url, $params);
$request->sign_request($this->sha1_method,
$this->consumer, $this->token);
diff --git a/lib/oauthstore.php b/lib/oauthstore.php
index df63cc151..a6a6de750 100644
--- a/lib/oauthstore.php
+++ b/lib/oauthstore.php
@@ -65,7 +65,7 @@ class StatusNetOAuthDataStore extends OAuthDataStore
{
$n = new Nonce();
$n->consumer_key = $consumer->key;
- $n->ts = $timestamp;
+ $n->ts = common_sql_date($timestamp);
$n->nonce = $nonce;
if ($n->find(true)) {
return true;
@@ -362,7 +362,6 @@ class StatusNetOAuthDataStore extends OAuthDataStore
array('is_local' => Notice::REMOTE_OMB,
'uri' => $omb_notice->getIdentifierURI()));
- common_broadcast_notice($notice, true);
}
/**
@@ -391,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 0f38a4936..db60fa0ef 100644
--- a/lib/omb.php
+++ b/lib/omb.php
@@ -29,11 +29,9 @@ require_once 'Auth/Yadis/Yadis.php';
function omb_oauth_consumer()
{
- static $con = null;
- if (is_null($con)) {
- $con = new OAuthConsumer(common_root_url(), '');
- }
- return $con;
+ // Don't try to make this static. Leads to issues in
+ // multi-site setups - Z
+ return new OAuthConsumer(common_root_url(), '');
}
function omb_oauth_server()
@@ -79,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 . ' ');
@@ -95,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);
@@ -127,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 . ' ');
@@ -143,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);
@@ -161,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/ombqueuehandler.php b/lib/ombqueuehandler.php
index 24896c784..1921c2bac 100644
--- a/lib/ombqueuehandler.php
+++ b/lib/ombqueuehandler.php
@@ -39,7 +39,7 @@ class OmbQueueHandler extends QueueHandler
function handle($notice)
{
if ($this->is_remote($notice)) {
- $this->log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id);
+ common_log(LOG_DEBUG, 'Ignoring remote notice ' . $notice->id);
return true;
} else {
require_once(INSTALLDIR.'/lib/omb.php');
diff --git a/lib/personalgroupnav.php b/lib/personalgroupnav.php
index cdde1feca..25db5baa9 100644
--- a/lib/personalgroupnav.php
+++ b/lib/personalgroupnav.php
@@ -78,9 +78,9 @@ class PersonalGroupNav extends Widget
function show()
{
$user = null;
-
+
// FIXME: we should probably pass this in
-
+
$action = $this->action->trimmed('action');
$nickname = $this->action->trimmed('nickname');
@@ -117,7 +117,8 @@ class PersonalGroupNav extends Widget
$cur = common_current_user();
- if ($cur && $cur->id == $user->id) {
+ if ($cur && $cur->id == $user->id &&
+ !common_config('singleuser', 'enabled')) {
$this->out->menuItem(common_local_url('inbox', array('nickname' =>
$nickname)),
diff --git a/lib/personaltagcloudsection.php b/lib/personaltagcloudsection.php
index 091425f92..5ea3f188d 100644
--- a/lib/personaltagcloudsection.php
+++ b/lib/personaltagcloudsection.php
@@ -59,6 +59,7 @@ class PersonalTagCloudSection extends TagCloudSection
function getTags()
{
$weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+ // @fixme should we use the cutoff too? Doesn't help with indexing per-user.
$qry = 'SELECT notice_tag.tag, '.
$weightexpr . ' as weight ' .
diff --git a/lib/pgsqlschema.php b/lib/pgsqlschema.php
new file mode 100644
index 000000000..91bc09667
--- /dev/null
+++ b/lib/pgsqlschema.php
@@ -0,0 +1,503 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Database schema utilities
+ *
+ * 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 Database
+ * @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);
+}
+
+/**
+ * Class representing the database schema
+ *
+ * A class representing the database schema. Can be used to
+ * manipulate the schema -- especially for plugins and upgrade
+ * utilities.
+ *
+ * @category Database
+ * @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/
+ */
+
+class PgsqlSchema extends Schema
+{
+
+ /**
+ * Returns a TableDef object for the table
+ * in the schema with the given name.
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $name Name of the table to get
+ *
+ * @return TableDef tabledef for that table.
+ */
+
+ public function getTableDef($name)
+ {
+ $res = $this->conn->query("select *, column_default as default, is_nullable as Null, udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ $td = new TableDef();
+
+ $td->name = $name;
+ $td->columns = array();
+
+ $row = array();
+
+ while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
+// var_dump($row);
+ $cd = new ColumnDef();
+
+ $cd->name = $row['field'];
+
+ $packed = $row['type'];
+
+ if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) {
+ $cd->type = $match[1];
+ $cd->size = $match[2];
+ } else {
+ $cd->type = $packed;
+ }
+
+ $cd->nullable = ($row['null'] == 'YES') ? true : false;
+ $cd->key = $row['Key'];
+ $cd->default = $row['default'];
+ $cd->extra = $row['Extra'];
+
+ $td->columns[] = $cd;
+ }
+ return $td;
+ }
+
+ /**
+ * Gets a ColumnDef object for a single column.
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $table name of the table
+ * @param string $column name of the column
+ *
+ * @return ColumnDef definition of the column or null
+ * if not found.
+ */
+
+ public function getColumnDef($table, $column)
+ {
+ $td = $this->getTableDef($table);
+
+ foreach ($td->columns as $cd) {
+ if ($cd->name == $column) {
+ return $cd;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Creates a table with the given names and columns.
+ *
+ * @param string $name Name of the table
+ * @param array $columns Array of ColumnDef objects
+ * for new table.
+ *
+ * @return boolean success flag
+ */
+
+ public function createTable($name, $columns)
+ {
+ $uniques = array();
+ $primary = array();
+ $indices = array();
+
+ $sql = "CREATE TABLE $name (\n";
+
+ for ($i = 0; $i < count($columns); $i++) {
+
+ $cd =& $columns[$i];
+
+ if ($i > 0) {
+ $sql .= ",\n";
+ }
+
+ $sql .= $this->_columnSql($cd);
+
+ switch ($cd->key) {
+ case 'UNI':
+ $uniques[] = $cd->name;
+ break;
+ case 'PRI':
+ $primary[] = $cd->name;
+ break;
+ case 'MUL':
+ $indices[] = $cd->name;
+ break;
+ }
+ }
+
+ if (count($primary) > 0) { // it really should be...
+ $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")";
+ }
+
+ foreach ($uniques as $u) {
+ $sql .= ",\nunique index {$name}_{$u}_idx ($u)";
+ }
+
+ foreach ($indices as $i) {
+ $sql .= ",\nindex {$name}_{$i}_idx ($i)";
+ }
+
+ $sql .= "); ";
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a table from the schema
+ *
+ * Throws an exception if the table is not found.
+ *
+ * @param string $name Name of the table to drop
+ *
+ * @return boolean success flag
+ */
+
+ public function dropTable($name)
+ {
+ $res = $this->conn->query("DROP TABLE $name");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Adds an index to a table.
+ *
+ * If no name is provided, a name will be made up based
+ * on the table name and column names.
+ *
+ * Throws an exception on database error, esp. if the table
+ * does not exist.
+ *
+ * @param string $table Name of the table
+ * @param array $columnNames Name of columns to index
+ * @param string $name (Optional) name of the index
+ *
+ * @return boolean success flag
+ */
+
+ public function createIndex($table, $columnNames, $name=null)
+ {
+ if (!is_array($columnNames)) {
+ $columnNames = array($columnNames);
+ }
+
+ if (empty($name)) {
+ $name = "$table_".implode("_", $columnNames)."_idx";
+ }
+
+ $res = $this->conn->query("ALTER TABLE $table ".
+ "ADD INDEX $name (".
+ implode(",", $columnNames).")");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a named index from a table.
+ *
+ * @param string $table name of the table the index is on.
+ * @param string $name name of the index
+ *
+ * @return boolean success flag
+ */
+
+ public function dropIndex($table, $name)
+ {
+ $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name");
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Adds a column to a table
+ *
+ * @param string $table name of the table
+ * @param ColumnDef $columndef Definition of the new
+ * column.
+ *
+ * @return boolean success flag
+ */
+
+ public function addColumn($table, $columndef)
+ {
+ $sql = "ALTER TABLE $table ADD COLUMN " . $this->_columnSql($columndef);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Modifies a column in the schema.
+ *
+ * The name must match an existing column and table.
+ *
+ * @param string $table name of the table
+ * @param ColumnDef $columndef new definition of the column.
+ *
+ * @return boolean success flag
+ */
+
+ public function modifyColumn($table, $columndef)
+ {
+ $sql = "ALTER TABLE $table MODIFY COLUMN " .
+ $this->_columnSql($columndef);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Drops a column from a table
+ *
+ * The name must match an existing column.
+ *
+ * @param string $table name of the table
+ * @param string $columnName name of the column to drop
+ *
+ * @return boolean success flag
+ */
+
+ public function dropColumn($table, $columnName)
+ {
+ $sql = "ALTER TABLE $table DROP COLUMN $columnName";
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Ensures that a table exists with the given
+ * name and the given column definitions.
+ *
+ * If the table does not yet exist, it will
+ * create the table. If it does exist, it will
+ * alter the table to match the column definitions.
+ *
+ * @param string $tableName name of the table
+ * @param array $columns array of ColumnDef
+ * objects for the table
+ *
+ * @return boolean success flag
+ */
+
+ public function ensureTable($tableName, $columns)
+ {
+ // XXX: DB engine portability -> toilet
+
+ try {
+ $td = $this->getTableDef($tableName);
+ } catch (Exception $e) {
+ if (preg_match('/no such table/', $e->getMessage())) {
+ return $this->createTable($tableName, $columns);
+ } else {
+ throw $e;
+ }
+ }
+
+ $cur = $this->_names($td->columns);
+ $new = $this->_names($columns);
+
+ $toadd = array_diff($new, $cur);
+ $todrop = array_diff($cur, $new);
+ $same = array_intersect($new, $cur);
+ $tomod = array();
+
+ foreach ($same as $m) {
+ $curCol = $this->_byName($td->columns, $m);
+ $newCol = $this->_byName($columns, $m);
+
+ if (!$newCol->equals($curCol)) {
+ $tomod[] = $newCol->name;
+ }
+ }
+
+ if (count($toadd) + count($todrop) + count($tomod) == 0) {
+ // nothing to do
+ return true;
+ }
+
+ // For efficiency, we want this all in one
+ // query, instead of using our methods.
+
+ $phrase = array();
+
+ foreach ($toadd as $columnName) {
+ $cd = $this->_byName($columns, $columnName);
+
+ $phrase[] = 'ADD COLUMN ' . $this->_columnSql($cd);
+ }
+
+ foreach ($todrop as $columnName) {
+ $phrase[] = 'DROP COLUMN ' . $columnName;
+ }
+
+ foreach ($tomod as $columnName) {
+ $cd = $this->_byName($columns, $columnName);
+
+ $phrase[] = 'MODIFY COLUMN ' . $this->_columnSql($cd);
+ }
+
+ $sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase);
+
+ $res = $this->conn->query($sql);
+
+ if (PEAR::isError($res)) {
+ throw new Exception($res->getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the array of names from an array of
+ * ColumnDef objects.
+ *
+ * @param array $cds array of ColumnDef objects
+ *
+ * @return array strings for name values
+ */
+
+ private function _names($cds)
+ {
+ $names = array();
+
+ foreach ($cds as $cd) {
+ $names[] = $cd->name;
+ }
+
+ return $names;
+ }
+
+ /**
+ * Get a ColumnDef from an array matching
+ * name.
+ *
+ * @param array $cds Array of ColumnDef objects
+ * @param string $name Name of the column
+ *
+ * @return ColumnDef matching item or null if no match.
+ */
+
+ private function _byName($cds, $name)
+ {
+ foreach ($cds as $cd) {
+ if ($cd->name == $name) {
+ return $cd;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Return the proper SQL for creating or
+ * altering a column.
+ *
+ * Appropriate for use in CREATE TABLE or
+ * ALTER TABLE statements.
+ *
+ * @param ColumnDef $cd column to create
+ *
+ * @return string correct SQL for that column
+ */
+
+ private function _columnSql($cd)
+ {
+ $sql = "{$cd->name} ";
+
+ if (!empty($cd->size)) {
+ $sql .= "{$cd->type}({$cd->size}) ";
+ } else {
+ $sql .= "{$cd->type} ";
+ }
+
+ if (!empty($cd->default)) {
+ $sql .= "default {$cd->default} ";
+ } else {
+ $sql .= ($cd->nullable) ? "null " : "not null ";
+ }
+
+ if (!empty($cd->auto_increment)) {
+ $sql .= " auto_increment ";
+ }
+
+ if (!empty($cd->extra)) {
+ $sql .= "{$cd->extra} ";
+ }
+
+ return $sql;
+ }
+}
diff --git a/lib/popularnoticesection.php b/lib/popularnoticesection.php
index fbf9a60ab..296ddbbb5 100644
--- a/lib/popularnoticesection.php
+++ b/lib/popularnoticesection.php
@@ -59,12 +59,15 @@ class PopularNoticeSection extends NoticeSection
}
}
$weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+ $cutoff = sprintf("fave.modified > '%s'",
+ common_sql_date(time() - common_config('popular', 'cutoff')));
$qry = "SELECT notice.*, $weightexpr as weight ";
if(isset($tag)) {
$qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' .
- "WHERE notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
+ "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
} else {
- $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id';
+ $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+ "WHERE $cutoff";
}
$qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' .
'notice.rendered,notice.url,notice.created,notice.modified,' .
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 3412d41d1..d970e605a 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -191,6 +191,7 @@ class ProfileListItem extends Widget
'alt' =>
($this->profile->fullname) ? $this->profile->fullname :
$this->profile->nickname));
+ $this->out->text(' ');
$hasFN = (!empty($this->profile->fullname)) ? 'nickname' : 'fn nickname';
$this->out->elementStart('span', $hasFN);
$this->out->raw($this->highlight($this->profile->nickname));
@@ -201,6 +202,7 @@ class ProfileListItem extends Widget
function showFullName()
{
if (!empty($this->profile->fullname)) {
+ $this->out->text(' ');
$this->out->elementStart('span', 'fn');
$this->out->raw($this->highlight($this->profile->fullname));
$this->out->elementEnd('span');
@@ -210,6 +212,7 @@ class ProfileListItem extends Widget
function showLocation()
{
if (!empty($this->profile->location)) {
+ $this->out->text(' ');
$this->out->elementStart('span', 'location');
$this->out->raw($this->highlight($this->profile->location));
$this->out->elementEnd('span');
@@ -219,6 +222,7 @@ class ProfileListItem extends Widget
function showHomepage()
{
if (!empty($this->profile->homepage)) {
+ $this->out->text(' ');
$this->out->elementStart('a', array('href' => $this->profile->homepage,
'class' => 'url'));
$this->out->raw($this->highlight($this->profile->homepage));
@@ -269,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/profilesection.php b/lib/profilesection.php
index 504b1b7f7..a9482cd63 100644
--- a/lib/profilesection.php
+++ b/lib/profilesection.php
@@ -85,6 +85,7 @@ class ProfileSection extends Section
'href' => $profile->profileurl,
'rel' => 'contact member',
'class' => 'url'));
+ $this->out->text(' ');
$avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
$this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE,
@@ -93,6 +94,7 @@ class ProfileSection extends Section
'alt' => ($profile->fullname) ?
$profile->fullname :
$profile->nickname));
+ $this->out->text(' ');
$this->out->element('span', 'fn nickname', $profile->nickname);
$this->out->elementEnd('a');
$this->out->elementEnd('span');
diff --git a/lib/publicqueuehandler.php b/lib/publicqueuehandler.php
index c9edb8d5d..a497d1385 100644
--- a/lib/publicqueuehandler.php
+++ b/lib/publicqueuehandler.php
@@ -38,7 +38,7 @@ class PublicQueueHandler extends QueueHandler
try {
return jabber_public_notice($notice);
} catch (XMPPHP_Exception $e) {
- $this->log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
+ common_log(LOG_ERR, "Got an XMPPHP_Exception: " . $e->getMessage());
return false;
}
}
diff --git a/lib/queued_xmpp.php b/lib/queued_xmpp.php
index 4b890c4ca..fdd074db2 100644
--- a/lib/queued_xmpp.php
+++ b/lib/queued_xmpp.php
@@ -63,7 +63,7 @@ class Queued_XMPP extends XMPPHP_XMPP
*/
public function send($msg, $timeout=NULL)
{
- $qm = QueueManager::get();
+ $qm = QueueManager::get('xmppout');
$qm->enqueue(strval($msg), 'xmppout');
}
diff --git a/lib/queuemanager.php b/lib/queuemanager.php
index b2e86b127..87bd356aa 100644
--- a/lib/queuemanager.php
+++ b/lib/queuemanager.php
@@ -39,9 +39,10 @@ abstract class QueueManager extends IoManager
{
static $qm = null;
- public $master = null;
- public $handlers = array();
- public $groups = array();
+ protected $master = null;
+ protected $handlers = array();
+ protected $groups = array();
+ protected $activeGroups = array();
/**
* Factory function to pull the appropriate QueueManager object
@@ -101,6 +102,23 @@ abstract class QueueManager extends IoManager
}
/**
+ * 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
+ * and such.
+ *
+ * Called from scripts/queuectl.php controller utility.
+ *
+ * @param string $event event key
+ * @param string $param optional parameter to append to key
+ * @return boolean success
+ */
+ public function sendControlSignal($event, $param='')
+ {
+ throw new Exception(get_class($this) . " does not support control signals.");
+ }
+
+ /**
* Store an object (usually/always a Notice) into the given queue
* for later processing. No guarantee is made on when it will be
* processed; it could be immediately or at some unspecified point
@@ -138,26 +156,26 @@ abstract class QueueManager extends IoManager
}
/**
- * Encode an object for queued storage.
- * Next gen may use serialization.
+ * Encode an object or variable for queued storage.
+ * Notice objects are currently stored as an id reference;
+ * other items are serialized.
*
- * @param mixed $object
+ * @param mixed $item
* @return string
*/
- protected function encode($object)
+ protected function encode($item)
{
- if ($object instanceof Notice) {
- return $object->id;
- } else if (is_string($object)) {
- return $object;
+ if ($item instanceof Notice) {
+ // Backwards compat
+ return $item->id;
} else {
- throw new ServerException("Can't queue this type", 500);
+ return serialize($item);
}
}
/**
* Decode an object from queued storage.
- * Accepts back-compat notice reference entries and strings for now.
+ * Accepts notice reference entries and serialized items.
*
* @param string
* @return mixed
@@ -165,9 +183,23 @@ abstract class QueueManager extends IoManager
protected function decode($frame)
{
if (is_numeric($frame)) {
+ // Back-compat for notices...
return Notice::staticGet(intval($frame));
- } else {
+ } elseif (substr($frame, 0, 1) == '<') {
+ // Back-compat for XML source
return $frame;
+ } else {
+ // Deserialize!
+ #$old = error_reporting();
+ #error_reporting($old & ~E_NOTICE);
+ $out = unserialize($frame);
+ #error_reporting($old);
+
+ if ($out === false && $frame !== 'b:0;') {
+ common_log(LOG_ERR, "Couldn't unserialize queued frame: $frame");
+ return false;
+ }
+ return $out;
}
}
@@ -186,55 +218,67 @@ abstract class QueueManager extends IoManager
} else if (class_exists($class)) {
return new $class();
} else {
- common_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'");
+ $this->_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'");
}
} else {
- common_log(LOG_ERR, "Requested handler for unkown queue '$queue'");
+ $this->_log(LOG_ERR, "Requested handler for unkown queue '$queue'");
}
return null;
}
/**
* Get a list of registered queue transport names to be used
- * for this daemon.
+ * for listening in this daemon.
*
* @return array of strings
*/
- function getQueues()
+ function activeQueues()
{
- $group = $this->activeGroup();
- return array_keys($this->groups[$group]);
+ $queues = array();
+ foreach ($this->activeGroups as $group) {
+ if (isset($this->groups[$group])) {
+ $queues = array_merge($queues, $this->groups[$group]);
+ }
+ }
+
+ return array_keys($queues);
}
/**
- * Initialize the list of queue handlers
+ * Initialize the list of queue handlers for the current site.
*
* @event StartInitializeQueueManager
* @event EndInitializeQueueManager
*/
function initialize()
{
- // @fixme we'll want to be able to listen to particular queues...
+ $this->handlers = array();
+ $this->groups = array();
+ $this->groupsByTransport = array();
+
if (Event::handle('StartInitializeQueueManager', array($this))) {
- $this->connect('plugin', 'PluginQueueHandler');
+ $this->connect('distrib', 'DistribQueueHandler');
$this->connect('omb', 'OmbQueueHandler');
$this->connect('ping', 'PingQueueHandler');
if (common_config('sms', 'enabled')) {
$this->connect('sms', 'SmsQueueHandler');
}
+ // Broadcasting profile updates to OMB remote subscribers
+ $this->connect('profile', 'ProfileQueueHandler');
+
// XMPP output handlers...
- $this->connect('jabber', 'JabberQueueHandler');
- $this->connect('public', 'PublicQueueHandler');
-
- // @fixme this should get an actual queue
- //$this->connect('confirm', 'XmppConfirmHandler');
+ if (common_config('xmpp', 'enabled')) {
+ // Delivery prep, read by queuedaemon.php:
+ $this->connect('jabber', 'JabberQueueHandler');
+ $this->connect('public', 'PublicQueueHandler');
+
+ // Raw output, read by xmppdaemon.php:
+ $this->connect('xmppout', 'XmppOutQueueHandler', 'xmpp');
+ }
// For compat with old plugins not registering their own handlers.
$this->connect('plugin', 'PluginQueueHandler');
-
- $this->connect('xmppout', 'XmppOutQueueHandler', 'xmppdaemon');
-
}
Event::handle('EndInitializeQueueManager', array($this));
}
@@ -247,25 +291,41 @@ abstract class QueueManager extends IoManager
* @param string $class class name or object instance
* @param string $group
*/
- public function connect($transport, $class, $group='queuedaemon')
+ public function connect($transport, $class, $group='main')
{
$this->handlers[$transport] = $class;
$this->groups[$group][$transport] = $class;
+ $this->groupsByTransport[$transport] = $group;
}
/**
- * @return string queue group to use for this request
+ * Set the active group which will be used for listening.
+ * @param string $group
*/
- function activeGroup()
+ function setActiveGroup($group)
{
- $group = 'queuedaemon';
- if ($this->master) {
- // hack hack
- if ($this->master instanceof XmppMaster) {
- return 'xmppdaemon';
- }
+ $this->activeGroups = array($group);
+ }
+
+ /**
+ * Set the active group(s) which will be used for listening.
+ * @param array $groups
+ */
+ function setActiveGroups($groups)
+ {
+ $this->activeGroups = $groups;
+ }
+
+ /**
+ * @return string queue group for this queue
+ */
+ function queueGroup($queue)
+ {
+ if (isset($this->groupsByTransport[$queue])) {
+ return $this->groupsByTransport[$queue];
+ } else {
+ throw new Exception("Requested group for unregistered transport $queue");
}
- return $group;
}
/**
@@ -289,4 +349,15 @@ abstract class QueueManager extends IoManager
$monitor->stats($key, $owners);
}
}
+
+ protected function _log($level, $msg)
+ {
+ $class = get_class($this);
+ if ($this->activeGroups) {
+ $groups = ' (' . implode(',', $this->activeGroups) . ')';
+ } else {
+ $groups = '';
+ }
+ common_log($level, "$class$groups: $msg");
+ }
}
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 5e66eae0e..deb451fde 100644
--- a/lib/right.php
+++ b/lib/right.php
@@ -57,5 +57,8 @@ class Right
const EMAILONREPLY = 'emailonreply';
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 42bff2778..706120e0b 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -73,12 +73,8 @@ class Router
if (Event::handle('StartInitializeRouter', array(&$m))) {
- // In the "root"
+ $m->connect('robots.txt', array('action' => 'robotstxt'));
- $m->connect('', array('action' => 'public'));
- $m->connect('rss', array('action' => 'publicrss'));
- $m->connect('featuredrss', array('action' => 'featuredrss'));
- $m->connect('favoritedrss', array('action' => 'favoritedrss'));
$m->connect('opensearch/people', array('action' => 'opensearch',
'type' => 'people'));
$m->connect('opensearch/notice', array('action' => 'opensearch',
@@ -102,6 +98,7 @@ class Router
'groupblock', 'groupunblock',
'sandbox', 'unsandbox',
'silence', 'unsilence',
+ 'grantrole', 'revokerole',
'repeat',
'deleteuser',
'geocode',
@@ -145,6 +142,22 @@ class Router
$m->connect('settings/'.$s, array('action' => $s.'settings'));
}
+ $m->connect('settings/oauthapps/show/:id',
+ array('action' => 'showapplication'),
+ array('id' => '[0-9]+')
+ );
+ $m->connect('settings/oauthapps/new',
+ array('action' => 'newapplication')
+ );
+ $m->connect('settings/oauthapps/edit/:id',
+ array('action' => 'editapplication'),
+ array('id' => '[0-9]+')
+ );
+ $m->connect('settings/oauthapps/delete/:id',
+ array('action' => 'deleteapplication'),
+ array('id' => '[0-9]+')
+ );
+
// search
foreach (array('group', 'people', 'notice') as $s) {
@@ -227,11 +240,6 @@ class Router
array('action' => 'peopletag'),
array('tag' => '[a-zA-Z0-9]+'));
- $m->connect('featured/', array('action' => 'featured'));
- $m->connect('featured', array('action' => 'featured'));
- $m->connect('favorited/', array('action' => 'favorited'));
- $m->connect('favorited', array('action' => 'favorited'));
-
// groups
$m->connect('group/new', array('action' => 'newgroup'));
@@ -240,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) {
@@ -622,87 +633,167 @@ class Router
$m->connect('api/search.json', array('action' => 'twitapisearchjson'));
$m->connect('api/trends.json', array('action' => 'twitapitrends'));
+ $m->connect('api/oauth/request_token',
+ array('action' => 'apioauthrequesttoken'));
+
+ $m->connect('api/oauth/access_token',
+ array('action' => 'apioauthaccesstoken'));
+
+ $m->connect('api/oauth/authorize',
+ array('action' => 'apioauthauthorize'));
+
+ // Admin
+
$m->connect('admin/site', array('action' => 'siteadminpanel'));
$m->connect('admin/design', array('action' => 'designadminpanel'));
$m->connect('admin/user', array('action' => 'useradminpanel'));
+ $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'),
array('filename' => '[A-Za-z0-9._-]+'));
- // user stuff
+ // In the "root"
- foreach (array('subscriptions', 'subscribers',
- 'nudge', 'all', 'foaf', 'xrds',
- 'replies', 'inbox', 'outbox', 'microsummary') as $a) {
- $m->connect(':nickname/'.$a,
- array('action' => $a),
+ if (common_config('singleuser', 'enabled')) {
+
+ $user = User::siteOwner();
+
+ if (!empty($user)) {
+ $nickname = $user->nickname;
+ } else {
+ $nickname = common_config('singleuser', 'nickname');
+ if (empty($nickname)) {
+ throw new ServerException(_("No single user defined for single-user mode."));
+ }
+ }
+
+ foreach (array('subscriptions', 'subscribers',
+ 'all', 'foaf', 'xrds',
+ 'replies', 'microsummary', 'hcard') as $a) {
+ $m->connect($a,
+ array('action' => $a,
+ 'nickname' => $nickname));
+ }
+
+ foreach (array('subscriptions', 'subscribers') as $a) {
+ $m->connect($a.'/:tag',
+ array('action' => $a,
+ 'nickname' => $nickname),
+ array('tag' => '[a-zA-Z0-9]+'));
+ }
+
+ foreach (array('rss', 'groups') as $a) {
+ $m->connect($a,
+ array('action' => 'user'.$a,
+ 'nickname' => $nickname));
+ }
+
+ foreach (array('all', 'replies', 'favorites') as $a) {
+ $m->connect($a.'/rss',
+ array('action' => $a.'rss',
+ 'nickname' => $nickname));
+ }
+
+ $m->connect('favorites',
+ array('action' => 'showfavorites',
+ 'nickname' => $nickname));
+
+ $m->connect('avatar/:size',
+ array('action' => 'avatarbynickname',
+ 'nickname' => $nickname),
+ array('size' => '(original|96|48|24)'));
+
+ $m->connect('tag/:tag/rss',
+ array('action' => 'userrss',
+ 'nickname' => $nickname),
+ array('tag' => '[a-zA-Z0-9]+'));
+
+ $m->connect('tag/:tag',
+ array('action' => 'showstream',
+ 'nickname' => $nickname),
+ array('tag' => '[a-zA-Z0-9]+'));
+
+ $m->connect('rsd.xml',
+ array('action' => 'rsd',
+ 'nickname' => $nickname));
+
+ $m->connect('',
+ array('action' => 'showstream',
+ 'nickname' => $nickname));
+
+ } else {
+
+ $m->connect('', array('action' => 'public'));
+ $m->connect('rss', array('action' => 'publicrss'));
+ $m->connect('featuredrss', array('action' => 'featuredrss'));
+ $m->connect('favoritedrss', array('action' => 'favoritedrss'));
+ $m->connect('featured/', array('action' => 'featured'));
+ $m->connect('featured', array('action' => 'featured'));
+ $m->connect('favorited/', array('action' => 'favorited'));
+ $m->connect('favorited', array('action' => 'favorited'));
+ $m->connect('rsd.xml', array('action' => 'rsd'));
+
+ foreach (array('subscriptions', 'subscribers',
+ 'nudge', 'all', 'foaf', 'xrds',
+ 'replies', 'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
+ $m->connect(':nickname/'.$a,
+ array('action' => $a),
+ array('nickname' => '[a-zA-Z0-9]{1,64}'));
+ }
+
+ foreach (array('subscriptions', 'subscribers') as $a) {
+ $m->connect(':nickname/'.$a.'/:tag',
+ array('action' => $a),
+ array('tag' => '[a-zA-Z0-9]+',
+ 'nickname' => '[a-zA-Z0-9]{1,64}'));
+ }
+
+ foreach (array('rss', 'groups') as $a) {
+ $m->connect(':nickname/'.$a,
+ array('action' => 'user'.$a),
+ array('nickname' => '[a-zA-Z0-9]{1,64}'));
+ }
+
+ foreach (array('all', 'replies', 'favorites') as $a) {
+ $m->connect(':nickname/'.$a.'/rss',
+ array('action' => $a.'rss'),
+ array('nickname' => '[a-zA-Z0-9]{1,64}'));
+ }
+
+ $m->connect(':nickname/favorites',
+ array('action' => 'showfavorites'),
array('nickname' => '[a-zA-Z0-9]{1,64}'));
- }
- $m->connect('settings/oauthapps/show/:id',
- array('action' => 'showapplication'),
- array('id' => '[0-9]+')
- );
- $m->connect('settings/oauthapps/new',
- array('action' => 'newapplication')
- );
- $m->connect('settings/oauthapps/edit/:id',
- array('action' => 'editapplication'),
- array('id' => '[0-9]+')
- );
-
- $m->connect('api/oauth/request_token',
- array('action' => 'apioauthrequesttoken'));
-
- $m->connect('api/oauth/access_token',
- array('action' => 'apioauthaccesstoken'));
+ $m->connect(':nickname/avatar/:size',
+ array('action' => 'avatarbynickname'),
+ array('size' => '(original|96|48|24)',
+ 'nickname' => '[a-zA-Z0-9]{1,64}'));
- $m->connect('api/oauth/authorize',
- array('action' => 'apioauthauthorize'));
+ $m->connect(':nickname/tag/:tag/rss',
+ array('action' => 'userrss'),
+ array('nickname' => '[a-zA-Z0-9]{1,64}'),
+ array('tag' => '[a-zA-Z0-9]+'));
- foreach (array('subscriptions', 'subscribers') as $a) {
- $m->connect(':nickname/'.$a.'/:tag',
- array('action' => $a),
- array('tag' => '[a-zA-Z0-9]+',
- 'nickname' => '[a-zA-Z0-9]{1,64}'));
- }
+ $m->connect(':nickname/tag/:tag',
+ array('action' => 'showstream'),
+ array('nickname' => '[a-zA-Z0-9]{1,64}'),
+ array('tag' => '[a-zA-Z0-9]+'));
- foreach (array('rss', 'groups') as $a) {
- $m->connect(':nickname/'.$a,
- array('action' => 'user'.$a),
+ $m->connect(':nickname/rsd.xml',
+ array('action' => 'rsd'),
array('nickname' => '[a-zA-Z0-9]{1,64}'));
- }
- foreach (array('all', 'replies', 'favorites') as $a) {
- $m->connect(':nickname/'.$a.'/rss',
- array('action' => $a.'rss'),
+ $m->connect(':nickname',
+ array('action' => 'showstream'),
array('nickname' => '[a-zA-Z0-9]{1,64}'));
}
- $m->connect(':nickname/favorites',
- array('action' => 'showfavorites'),
- array('nickname' => '[a-zA-Z0-9]{1,64}'));
-
- $m->connect(':nickname/avatar/:size',
- array('action' => 'avatarbynickname'),
- array('size' => '(original|96|48|24)',
- 'nickname' => '[a-zA-Z0-9]{1,64}'));
-
- $m->connect(':nickname/tag/:tag/rss',
- array('action' => 'userrss'),
- array('nickname' => '[a-zA-Z0-9]{1,64}'),
- array('tag' => '[a-zA-Z0-9]+'));
-
- $m->connect(':nickname/tag/:tag',
- array('action' => 'showstream'),
- array('nickname' => '[a-zA-Z0-9]{1,64}'),
- array('tag' => '[a-zA-Z0-9]+'));
-
- $m->connect(':nickname',
- array('action' => 'showstream'),
- array('nickname' => '[a-zA-Z0-9]{1,64}'));
+ // user stuff
Event::handle('RouterInitialized', array($m));
}
diff --git a/lib/schema.php b/lib/schema.php
index 6292a3d56..137b814e0 100644
--- a/lib/schema.php
+++ b/lib/schema.php
@@ -75,74 +75,15 @@ class Schema
static function get()
{
+ $type = common_config('db', 'type');
if (empty(self::$_single)) {
- self::$_single = new Schema();
+ $schemaClass = ucfirst($type).'Schema';
+ self::$_single = new $schemaClass();
}
return self::$_single;
}
/**
- * Returns a TableDef object for the table
- * in the schema with the given name.
- *
- * Throws an exception if the table is not found.
- *
- * @param string $name Name of the table to get
- *
- * @return TableDef tabledef for that table.
- */
-
- public function getTableDef($name)
- {
- if(common_config('db','type') == 'pgsql') {
- $res = $this->conn->query("select column_default as default, is_nullable as Null, udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'");
- }
- else {
- $res = $this->conn->query('DESCRIBE ' . $name);
- }
-
- if (PEAR::isError($res)) {
- throw new Exception($res->getMessage());
- }
-
- $td = new TableDef();
-
- $td->name = $name;
- $td->columns = array();
-
- $row = array();
-
- while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
- //lower case the keys, because the php postgres driver is case insentive for column names
- foreach($row as $k=>$v) {
- $row[strtolower($k)] = $row[$k];
- }
-
- $cd = new ColumnDef();
-
- $cd->name = $row['field'];
-
- $packed = $row['type'];
-
- if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) {
- $cd->type = $match[1];
- $cd->size = $match[2];
- } else {
- $cd->type = $packed;
- }
-
- $cd->nullable = ($row['null'] == 'YES') ? true : false;
- $cd->key = $row['Key'];
- $cd->default = $row['default'];
- $cd->extra = $row['Extra'];
-
- $td->columns[] = $cd;
- }
-
- return $td;
- }
-
- /**
* Gets a ColumnDef object for a single column.
*
* Throws an exception if the table is not found.
@@ -532,7 +473,7 @@ class Schema
} else {
$sql .= ($cd->nullable) ? "null " : "not null ";
}
-
+
if (!empty($cd->auto_increment)) {
$sql .= " auto_increment ";
}
diff --git a/lib/spawningdaemon.php b/lib/spawningdaemon.php
index 8baefe88e..fd9ae4355 100644
--- a/lib/spawningdaemon.php
+++ b/lib/spawningdaemon.php
@@ -36,6 +36,11 @@ abstract class SpawningDaemon extends Daemon
{
protected $threads=1;
+ const EXIT_OK = 0;
+ const EXIT_ERR = 1;
+ const EXIT_SHUTDOWN = 100;
+ const EXIT_RESTART = 101;
+
function __construct($id=null, $daemonize=true, $threads=1)
{
parent::__construct($daemonize);
@@ -49,7 +54,7 @@ abstract class SpawningDaemon extends Daemon
/**
* Perform some actual work!
*
- * @return boolean true on success, false on failure
+ * @return int exit code; use self::EXIT_SHUTDOWN to request not to respawn.
*/
public abstract function runThread();
@@ -78,6 +83,7 @@ abstract class SpawningDaemon extends Daemon
$this->log(LOG_INFO, "Spawned thread $i as pid $pid");
$children[$i] = $pid;
}
+ sleep(common_config('queue', 'spawndelay'));
}
$this->log(LOG_INFO, "Waiting for children to complete.");
@@ -87,20 +93,34 @@ abstract class SpawningDaemon extends Daemon
if ($pid > 0) {
$i = array_search($pid, $children);
if ($i === false) {
- $this->log(LOG_ERR, "Unrecognized child pid $pid exited!");
+ $this->log(LOG_ERR, "Ignoring exit of unrecognized child pid $pid");
continue;
}
+ if (pcntl_wifexited($status)) {
+ $exitCode = pcntl_wexitstatus($status);
+ $info = "status $exitCode";
+ } else if (pcntl_wifsignaled($status)) {
+ $exitCode = self::EXIT_ERR;
+ $signal = pcntl_wtermsig($status);
+ $info = "signal $signal";
+ }
unset($children[$i]);
- $this->log(LOG_INFO, "Thread $i pid $pid exited.");
-
- $pid = pcntl_fork();
- if ($pid < 0) {
- $this->log(LOG_ERROR, "Couldn't fork to respawn thread $i; aborting thread.\n");
- } else if ($pid == 0) {
- $this->initAndRunChild($i);
+
+ if ($this->shouldRespawn($exitCode)) {
+ $this->log(LOG_INFO, "Thread $i pid $pid exited with $info; respawing.");
+
+ $pid = pcntl_fork();
+ if ($pid < 0) {
+ $this->log(LOG_ERROR, "Couldn't fork to respawn thread $i; aborting thread.\n");
+ } else if ($pid == 0) {
+ $this->initAndRunChild($i);
+ } else {
+ $this->log(LOG_INFO, "Respawned thread $i as pid $pid");
+ $children[$i] = $pid;
+ }
+ sleep(common_config('queue', 'spawndelay'));
} else {
- $this->log(LOG_INFO, "Respawned thread $i as pid $pid");
- $children[$i] = $pid;
+ $this->log(LOG_INFO, "Thread $i pid $pid exited with status $exitCode; closing out thread.");
}
}
}
@@ -109,6 +129,24 @@ abstract class SpawningDaemon extends Daemon
}
/**
+ * Determine whether to respawn an exited subprocess based on its exit code.
+ * Otherwise we'll respawn all exits by default.
+ *
+ * @param int $exitCode
+ * @return boolean true to respawn
+ */
+ protected function shouldRespawn($exitCode)
+ {
+ if ($exitCode == self::EXIT_SHUTDOWN) {
+ // Thread requested a clean shutdown.
+ return false;
+ } else {
+ // Otherwise we should always respawn!
+ return true;
+ }
+ }
+
+ /**
* Initialize things for a fresh thread, call runThread(), and
* exit at completion with appropriate return value.
*/
@@ -116,8 +154,8 @@ abstract class SpawningDaemon extends Daemon
{
$this->set_id($this->get_id() . "." . $thread);
$this->resetDb();
- $ok = $this->runThread();
- exit($ok ? 0 : 1);
+ $exitCode = $this->runThread();
+ exit($exitCode);
}
/**
diff --git a/lib/statusnet.php b/lib/statusnet.php
index beeb26ccc..eba9ab9b8 100644
--- a/lib/statusnet.php
+++ b/lib/statusnet.php
@@ -30,6 +30,7 @@ global $config, $_server, $_path;
class StatusNet
{
protected static $have_config;
+ protected static $is_api;
/**
* Configure and instantiate a plugin into the current configuration.
@@ -102,6 +103,60 @@ class StatusNet
}
/**
+ * Get identifier of the currently active site configuration
+ * @return string
+ */
+ public static function currentSite()
+ {
+ return common_config('site', 'nickname');
+ }
+
+ /**
+ * Change site configuration to site specified by nickname,
+ * if set up via Status_network. If not, sites other than
+ * the current will fail horribly.
+ *
+ * May throw exception or trigger a fatal error if the given
+ * site is missing or configured incorrectly.
+ *
+ * @param string $nickname
+ */
+ public static function switchSite($nickname)
+ {
+ if ($nickname == StatusNet::currentSite()) {
+ return true;
+ }
+
+ $sn = Status_network::staticGet($nickname);
+ if (empty($sn)) {
+ return false;
+ throw new Exception("No such site nickname '$nickname'");
+ }
+
+ $server = $sn->getServerName();
+ StatusNet::init($server);
+ }
+
+ /**
+ * Pull all local sites from status_network table.
+ *
+ * Behavior undefined if site is not configured via Status_network.
+ *
+ * @return array of nicknames
+ */
+ public static function findAllSites()
+ {
+ $sites = array();
+ $sn = new Status_network();
+ $sn->find();
+ while ($sn->fetch()) {
+ $sites[] = $sn->nickname;
+ }
+ return $sites;
+ }
+
+
+ /**
* Fire initialization events for all instantiated plugins.
*/
protected static function initPlugins()
@@ -147,6 +202,16 @@ class StatusNet
return self::$have_config;
}
+ public function isApi()
+ {
+ return self::$is_api;
+ }
+
+ public function setApi($mode)
+ {
+ self::$is_api = $mode;
+ }
+
/**
* Build default configuration array
* @return array
@@ -289,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 4bbdeedc2..9af8b2f48 100644
--- a/lib/stompqueuemanager.php
+++ b/lib/stompqueuemanager.php
@@ -29,29 +29,41 @@
*/
require_once 'Stomp.php';
-
+require_once 'Stomp/Exception.php';
class StompQueueManager extends QueueManager
{
- var $server = null;
- var $username = null;
- var $password = null;
- var $base = null;
- var $con = null;
-
- protected $sites = array();
+ protected $servers;
+ protected $username;
+ protected $password;
+ protected $base;
+ protected $control;
protected $useTransactions = true;
- protected $transaction = null;
- protected $transactionCount = 0;
+
+ protected $sites = array();
+ protected $subscriptions = array();
+
+ protected $cons = array(); // all open connections
+ protected $disconnect = array();
+ protected $transaction = array();
+ protected $transactionCount = array();
+ protected $defaultIdx = 0;
function __construct()
{
parent::__construct();
- $this->server = common_config('queue', 'stomp_server');
+ $server = common_config('queue', 'stomp_server');
+ if (is_array($server)) {
+ $this->servers = $server;
+ } else {
+ $this->servers = array($server);
+ }
$this->username = common_config('queue', 'stomp_username');
$this->password = common_config('queue', 'stomp_password');
$this->base = common_config('queue', 'queue_basename');
+ $this->control = common_config('queue', 'control_channel');
+ $this->breakout = common_config('queue', 'breakout');
}
/**
@@ -64,96 +76,101 @@ class StompQueueManager extends QueueManager
}
/**
- * Record each site we'll be handling input for in this process,
- * so we can listen to the necessary queues for it.
+ * 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
+ * and such.
*
- * @fixme possibly actually do subscription here to save another
- * loop over all sites later?
- * @fixme possibly don't assume it's the current site
- */
- public function addSite($server)
- {
- $this->sites[] = $server;
- $this->initialize();
- }
-
-
- /**
- * Instantiate the appropriate QueueHandler class for the given queue.
+ * Currently only relevant for multi-site queue managers such as Stomp.
*
- * @param string $queue
- * @return mixed QueueHandler or null
+ * @param string $event event key
+ * @param string $param optional parameter to append to key
+ * @return boolean success
*/
- function getHandler($queue)
+ public function sendControlSignal($event, $param='')
{
- $handlers = $this->handlers[common_config('site', 'server')];
- if (isset($handlers[$queue])) {
- $class = $handlers[$queue];
- if (class_exists($class)) {
- return new $class();
- } else {
- common_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'");
- }
- } else {
- common_log(LOG_ERR, "Requested handler for unkown queue '$queue'");
+ $message = $event;
+ if ($param != '') {
+ $message .= ':' . $param;
}
- return null;
- }
-
- /**
- * Get a list of all registered queue transport names.
- *
- * @return array of strings
- */
- function getQueues()
- {
- $group = $this->activeGroup();
- $site = common_config('site', 'server');
- if (empty($this->groups[$site][$group])) {
- return array();
+ $this->_connect();
+ $con = $this->cons[$this->defaultIdx];
+ $result = $con->send($this->control,
+ $message,
+ array ('created' => common_sql_now()));
+ if ($result) {
+ $this->_log(LOG_INFO, "Sent control ping to queue daemons: $message");
+ return true;
} else {
- return array_keys($this->groups[$site][$group]);
+ $this->_log(LOG_ERR, "Failed sending control ping to queue daemons: $message");
+ return false;
}
}
/**
- * Register a queue transport name and handler class for your plugin.
- * Only registered transports will be reliably picked up!
+ * Saves an object into the queue item table.
*
- * @param string $transport
- * @param string $class
- * @param string $group
+ * @param mixed $object
+ * @param string $queue
+ *
+ * @return boolean true on success
+ * @throws StompException on connection or send error
*/
- public function connect($transport, $class, $group='queuedaemon')
+ public function enqueue($object, $queue)
{
- $this->handlers[common_config('site', 'server')][$transport] = $class;
- $this->groups[common_config('site', 'server')][$group][$transport] = $class;
+ $this->_connect();
+ return $this->_doEnqueue($object, $queue, $this->defaultIdx);
}
/**
- * Saves a notice object reference into the queue item table.
+ * Saves a notice object reference into the queue item table
+ * on the given connection.
+ *
* @return boolean true on success
+ * @throws StompException on connection or send error
*/
- public function enqueue($object, $queue)
+ protected function _doEnqueue($object, $queue, $idx)
{
- $msg = $this->encode($object);
$rep = $this->logrep($object);
+ $envelope = array('site' => common_config('site', 'nickname'),
+ 'handler' => $queue,
+ 'payload' => $this->encode($object));
+ $msg = serialize($envelope);
+
+ $props = array('created' => common_sql_now());
+ if ($this->isPersistent($queue)) {
+ $props['persistent'] = 'true';
+ }
- $this->_connect();
-
- // XXX: serialize and send entire notice
-
- $result = $this->con->send($this->queueName($queue),
- $msg, // BODY of the message
- array ('created' => common_sql_now()));
+ $con = $this->cons[$idx];
+ $host = $con->getServer();
+ $target = $this->queueName($queue);
+ $result = $con->send($target, $msg, $props);
if (!$result) {
- common_log(LOG_ERR, "Error sending $rep to $queue queue");
+ $this->_log(LOG_ERR, "Error sending $rep to $queue queue on $host $target");
return false;
}
- common_log(LOG_DEBUG, "complete remote queueing $rep for $queue");
+ $this->_log(LOG_DEBUG, "complete remote queueing $rep for $queue on $host $target");
$this->stats('enqueued', $queue);
+ return true;
+ }
+
+ /**
+ * Determine whether messages to this queue should be marked as persistent.
+ * Actual persistent storage depends on the queue server's configuration.
+ * @param string $queue
+ * @return bool
+ */
+ protected function isPersistent($queue)
+ {
+ $mode = common_config('queue', 'stomp_persistent');
+ if (is_array($mode)) {
+ return in_array($queue, $mode);
+ } else {
+ return (bool)$mode;
+ }
}
/**
@@ -164,7 +181,29 @@ class StompQueueManager extends QueueManager
*/
public function getSockets()
{
- return array($this->con->getSocket());
+ $sockets = array();
+ foreach ($this->cons as $con) {
+ if ($con) {
+ $sockets[] = $con->getSocket();
+ }
+ }
+ return $sockets;
+ }
+
+ /**
+ * Get the Stomp connection object associated with the given socket.
+ * @param resource $socket
+ * @return int index into connections list
+ * @throws Exception
+ */
+ protected function connectionFromSocket($socket)
+ {
+ foreach ($this->cons as $i => $con) {
+ if ($con && $con->getSocket() === $socket) {
+ return $i;
+ }
+ }
+ throw new Exception(__CLASS__ . " asked to read from unrecognized socket");
}
/**
@@ -176,18 +215,61 @@ class StompQueueManager extends QueueManager
*/
public function handleInput($socket)
{
- assert($socket === $this->con->getSocket());
+ $idx = $this->connectionFromSocket($socket);
+ $con = $this->cons[$idx];
+ $host = $con->getServer();
+ $this->defaultIdx = $idx;
+
$ok = true;
- $frames = $this->con->readFrames();
+ try {
+ $frames = $con->readFrames();
+ } catch (StompException $e) {
+ $this->_log(LOG_ERR, "Lost connection to $host: " . $e->getMessage());
+ fclose($socket); // ???
+ $this->cons[$idx] = null;
+ $this->transaction[$idx] = null;
+ $this->disconnect[$idx] = time();
+ return false;
+ }
foreach ($frames as $frame) {
- $ok = $ok && $this->_handleItem($frame);
+ $dest = $frame->headers['destination'];
+ if ($dest == $this->control) {
+ if (!$this->handleControlSignal($frame)) {
+ // We got a control event that requests a shutdown;
+ // close out and stop handling anything else!
+ break;
+ }
+ } else {
+ $ok = $this->handleItem($frame) && $ok;
+ }
+ $this->ack($idx, $frame);
+ $this->commit($idx);
+ $this->begin($idx);
}
return $ok;
}
/**
+ * Attempt to reconnect in background if we lost a connection.
+ */
+ function idle()
+ {
+ $now = time();
+ foreach ($this->cons as $idx => $con) {
+ if (empty($con)) {
+ $age = $now - $this->disconnect[$idx];
+ if ($age >= 60) {
+ $this->_reconnect($idx);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Initialize our connection and subscribe to all the queues
- * we're going to need to handle...
+ * we're going to need to handle... If multiple queue servers
+ * are configured for failover, we'll listen to all of them.
*
* Side effects: in multi-site mode, may reset site configuration.
*
@@ -197,22 +279,19 @@ class StompQueueManager extends QueueManager
public function start($master)
{
parent::start($master);
- if ($this->sites) {
- foreach ($this->sites as $server) {
- StatusNet::init($server);
- $this->doSubscribe();
+ $this->_connectAll();
+
+ foreach ($this->cons as $i => $con) {
+ if ($con) {
+ $this->doSubscribe($con);
+ $this->begin($i);
}
- } else {
- $this->doSubscribe();
}
- $this->begin();
return true;
}
-
+
/**
- * Subscribe to all the queues we're going to need to handle...
- *
- * Side effects: in multi-site mode, may reset site configuration.
+ * Close out any active connections.
*
* @return bool return false on failure
*/
@@ -220,58 +299,153 @@ class StompQueueManager extends QueueManager
{
// If there are any outstanding delivered messages we haven't processed,
// free them for another thread to take.
- $this->rollback();
- if ($this->sites) {
- foreach ($this->sites as $server) {
- StatusNet::init($server);
- $this->doUnsubscribe();
+ foreach ($this->cons as $i => $con) {
+ if ($con) {
+ $this->rollback($i);
+ $con->disconnect();
+ $this->cons[$i] = null;
}
- } else {
- $this->doUnsubscribe();
}
return true;
}
-
+
/**
- * Lazy open connection to Stomp queue server.
+ * Lazy open a single connection to Stomp queue server.
+ * If multiple servers are configured, we let the Stomp client library
+ * worry about finding a working connection among them.
*/
protected function _connect()
{
- if (empty($this->con)) {
- $this->_log(LOG_INFO, "Connecting to '$this->server' as '$this->username'...");
- $this->con = new LiberalStomp($this->server);
-
- if ($this->con->connect($this->username, $this->password)) {
- $this->_log(LOG_INFO, "Connected.");
+ if (empty($this->cons)) {
+ $list = $this->servers;
+ if (count($list) > 1) {
+ shuffle($list); // Randomize to spread load
+ $url = 'failover://(' . implode(',', $list) . ')';
} else {
- $this->_log(LOG_ERR, 'Failed to connect to queue server');
- throw new ServerException('Failed to connect to queue server');
+ $url = $list[0];
}
+ $con = $this->_doConnect($url);
+ $this->cons = array($con);
+ $this->transactionCount = array(0);
+ $this->transaction = array(null);
+ $this->disconnect = array(null);
}
}
/**
- * Subscribe to all enabled notice queues for the current site.
+ * Lazy open connections to all Stomp servers, if in manual failover
+ * mode. This means the queue servers don't speak to each other, so
+ * we have to listen to all of them to make sure we get all events.
*/
- protected function doSubscribe()
+ protected function _connectAll()
{
- $this->_connect();
- foreach ($this->getQueues() as $queue) {
- $rawqueue = $this->queueName($queue);
- $this->_log(LOG_INFO, "Subscribing to $rawqueue");
- $this->con->subscribe($rawqueue);
+ if (!common_config('queue', 'stomp_manual_failover')) {
+ return $this->_connect();
+ }
+ if (empty($this->cons)) {
+ $this->cons = array();
+ $this->transactionCount = array();
+ $this->transaction = array();
+ foreach ($this->servers as $idx => $server) {
+ try {
+ $this->cons[] = $this->_doConnect($server);
+ $this->disconnect[] = null;
+ } catch (Exception $e) {
+ // s'okay, we'll live
+ $this->cons[] = null;
+ $this->disconnect[] = time();
+ }
+ $this->transactionCount[] = 0;
+ $this->transaction[] = null;
+ }
+ if (empty($this->cons)) {
+ throw new ServerException("No queue servers reachable...");
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Attempt to manually reconnect to the Stomp server for the given
+ * slot. If successful, set up our subscriptions on it.
+ */
+ protected function _reconnect($idx)
+ {
+ try {
+ $con = $this->_doConnect($this->servers[$idx]);
+ } catch (Exception $e) {
+ $this->_log(LOG_ERR, $e->getMessage());
+ $con = null;
+ }
+ if ($con) {
+ $this->cons[$idx] = $con;
+ $this->disconnect[$idx] = null;
+
+ $this->doSubscribe($con);
+ $this->begin($idx);
+ } else {
+ // Try again later...
+ $this->disconnect[$idx] = time();
+ }
+ }
+
+ protected function _doConnect($server)
+ {
+ $this->_log(LOG_INFO, "Connecting to '$server' as '$this->username'...");
+ $con = new LiberalStomp($server);
+
+ if ($con->connect($this->username, $this->password)) {
+ $this->_log(LOG_INFO, "Connected.");
+ } else {
+ $this->_log(LOG_ERR, 'Failed to connect to queue server');
+ throw new ServerException('Failed to connect to queue server');
+ }
+
+ return $con;
+ }
+
+ /**
+ * Set up all our raw queue subscriptions on the given connection
+ * @param LiberalStomp $con
+ */
+ protected function doSubscribe(LiberalStomp $con)
+ {
+ $host = $con->getServer();
+ foreach ($this->subscriptions() as $sub) {
+ $this->_log(LOG_INFO, "Subscribing to $sub on $host");
+ $con->subscribe($sub);
}
}
/**
- * Subscribe from all enabled notice queues for the current site.
+ * 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 doUnsubscribe()
+ protected function subscriptions()
{
- $this->_connect();
- foreach ($this->getQueues() as $queue) {
- $this->con->unsubscribe($this->queueName($queue));
+ $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);
}
/**
@@ -284,130 +458,280 @@ class StompQueueManager extends QueueManager
* match the site that queued the event.
*
* @param StompFrame $frame
- * @return bool
+ * @return bool success
*/
- protected function _handleItem($frame)
+ protected function handleItem($frame)
{
- list($site, $queue) = $this->parseDestination($frame->headers['destination']);
- if ($site != common_config('site', 'server')) {
- $this->stats('switch');
- StatusNet::init($site);
+ $host = $this->cons[$this->defaultIdx]->getServer();
+ $message = unserialize($frame->body);
+ $site = $message['site'];
+ $queue = $message['handler'];
+
+ if ($this->isDeadletter($frame, $message)) {
+ $this->stats('deadletter', $queue);
+ return false;
}
- $item = $this->decode($frame->body);
+ // @fixme detect failing site switches
+ $this->switchSite($site);
+
+ $item = $this->decode($message['payload']);
+ if (empty($item)) {
+ $this->_log(LOG_ERR, "Skipping empty or deleted item in queue $queue from $host");
+ $this->stats('baditem', $queue);
+ return false;
+ }
+ $info = $this->logrep($item) . " posted at " .
+ $frame->headers['created'] . " in queue $queue from $host";
+ $this->_log(LOG_DEBUG, "Dequeued $info");
$handler = $this->getHandler($queue);
if (!$handler) {
- $this->_log(LOG_ERROR, "Missing handler class; skipping $info");
- $this->ack($frame);
- $this->commit();
- $this->begin();
+ $this->_log(LOG_ERR, "Missing handler class; skipping $info");
$this->stats('badhandler', $queue);
return false;
}
- $ok = $handler->handle($item);
+ try {
+ $ok = $handler->handle($item);
+ } catch (Exception $e) {
+ $this->_log(LOG_ERR, "Exception on queue $queue: " . $e->getMessage());
+ $ok = false;
+ }
- if (!$ok) {
+ if ($ok) {
+ $this->_log(LOG_INFO, "Successfully handled $info");
+ $this->stats('handled', $queue);
+ } else {
$this->_log(LOG_WARNING, "Failed handling $info");
- // FIXME we probably shouldn't have to do
- // this kind of queue management ourselves;
- // if we don't ack, it should resend...
- $this->ack($frame);
+ // Requeing moves the item to the end of the line for its next try.
+ // @fixme add a manual retry count
$this->enqueue($item, $queue);
- $this->commit();
- $this->begin();
$this->stats('requeued', $queue);
- return false;
}
- $this->_log(LOG_INFO, "Successfully handled $info");
- $this->ack($frame);
- $this->commit();
- $this->begin();
- $this->stats('handled', $queue);
- return true;
+ return $ok;
+ }
+
+ /**
+ * Check if a redelivered message has been run through enough
+ * that we're going to give up on it.
+ *
+ * @param StompFrame $frame
+ * @param array $message unserialized message body
+ * @return boolean true if we should discard
+ */
+ protected function isDeadLetter($frame, $message)
+ {
+ if (isset($frame->headers['redelivered']) && $frame->headers['redelivered'] == 'true') {
+ // Message was redelivered, possibly indicating a previous failure.
+ $msgId = $frame->headers['message-id'];
+ $site = $message['site'];
+ $queue = $message['handler'];
+ $msgInfo = "message $msgId for $site in queue $queue";
+
+ $deliveries = $this->incDeliveryCount($msgId);
+ if ($deliveries > common_config('queue', 'max_retries')) {
+ $info = "DEAD-LETTER FILE: Gave up after retry $deliveries on $msgInfo";
+
+ $outdir = common_config('queue', 'dead_letter_dir');
+ if ($outdir) {
+ $filename = $outdir . "/$site-$queue-" . rawurlencode($msgId);
+ $info .= ": dumping to $filename";
+ file_put_contents($filename, $message['payload']);
+ }
+
+ common_log(LOG_ERR, $info);
+ return true;
+ } else {
+ common_log(LOG_INFO, "retry $deliveries on $msgInfo");
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Update count of times we've re-encountered this message recently,
+ * triggered when we get a message marked as 'redelivered'.
+ *
+ * Requires a CLI-friendly cache configuration.
+ *
+ * @param string $msgId message-id header from message
+ * @return int number of retries recorded
+ */
+ function incDeliveryCount($msgId)
+ {
+ $count = 0;
+ $cache = common_memcache();
+ if ($cache) {
+ $key = 'statusnet:stomp:message-retries:' . $msgId;
+ $count = $cache->increment($key);
+ if (!$count) {
+ $count = 1;
+ $cache->set($key, $count, null, 3600);
+ $got = $cache->get($key);
+ }
+ }
+ return $count;
+ }
+
+ /**
+ * Process a control signal broadcast.
+ *
+ * @param int $idx connection index
+ * @param array $frame Stomp frame
+ * @return bool true to continue; false to stop further processing.
+ */
+ protected function handleControlSignal($idx, $frame)
+ {
+ $message = trim($frame->body);
+ if (strpos($message, ':') !== false) {
+ list($event, $param) = explode(':', $message, 2);
+ } else {
+ $event = $message;
+ $param = '';
+ }
+
+ $shutdown = false;
+
+ if ($event == 'shutdown') {
+ $this->master->requestShutdown();
+ $shutdown = true;
+ } else if ($event == 'restart') {
+ $this->master->requestRestart();
+ $shutdown = true;
+ } else if ($event == 'update') {
+ $this->updateSiteConfig($param);
+ } else {
+ $this->_log(LOG_ERR, "Ignoring unrecognized control message: $message");
+ }
+ return $shutdown;
+ }
+
+ /**
+ * Switch site, if necessary, and reset current handler assignments
+ * @param string $site
+ */
+ function switchSite($site)
+ {
+ if ($site != StatusNet::currentSite()) {
+ $this->stats('switch');
+ StatusNet::switchSite($site);
+ $this->initialize();
+ }
+ }
+
+ /**
+ * (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)
+ {
+ $sn = Status_network::staticGet($nickname);
+ if ($sn) {
+ $this->switchSite($nickname);
+ if (!in_array($nickname, $this->sites)) {
+ $this->addSite();
+ }
+ $this->stats('siteupdate');
+ } else {
+ $this->_log(LOG_ERR, "Ignoring ping for unrecognized new site $nickname");
+ }
}
/**
* Combines the queue_basename from configuration with the
- * site server name and queue name to give eg:
+ * group name for this queue to give eg:
*
- * /queue/statusnet/identi.ca/sms
+ * /queue/statusnet/main
+ * /queue/statusnet/main/distrib
+ * /queue/statusnet/xmpp/xmppout/site01
*
* @param string $queue
* @return string
*/
protected function queueName($queue)
{
- return common_config('queue', 'queue_basename') .
- common_config('site', 'server') . '/' . $queue;
+ $group = $this->queueGroup($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;
}
/**
- * Returns the site and queue name from the server-side queue.
+ * Get the breakout mode for the given queue on the current site.
*
- * @param string queue destination (eg '/queue/statusnet/identi.ca/sms')
- * @return array of site and queue: ('identi.ca','sms') or false if unrecognized
+ * @param string $queue
+ * @return string one of 'shared', 'handler', 'site'
*/
- protected function parseDestination($dest)
+ protected function breakoutMode($queue)
{
- $prefix = common_config('queue', 'queue_basename');
- if (substr($dest, 0, strlen($prefix)) == $prefix) {
- $rest = substr($dest, strlen($prefix));
- return explode("/", $rest, 2);
+ $breakout = common_config('queue', 'breakout');
+ if (isset($breakout[$queue])) {
+ return $breakout[$queue];
+ } else if (isset($breakout['*'])) {
+ return $breakout['*'];
} else {
- common_log(LOG_ERR, "Got a message from unrecognized stomp queue: $dest");
- return array(false, false);
+ return 'shared';
}
}
- function _log($level, $msg)
- {
- common_log($level, 'StompQueueManager: '.$msg);
- }
-
- protected function begin()
+ protected function begin($idx)
{
if ($this->useTransactions) {
- if ($this->transaction) {
+ if (!empty($this->transaction[$idx])) {
throw new Exception("Tried to start transaction in the middle of a transaction");
}
- $this->transactionCount++;
- $this->transaction = $this->master->id . '-' . $this->transactionCount . '-' . time();
- $this->con->begin($this->transaction);
+ $this->transactionCount[$idx]++;
+ $this->transaction[$idx] = $this->master->id . '-' . $this->transactionCount[$idx] . '-' . time();
+ $this->cons[$idx]->begin($this->transaction[$idx]);
}
}
- protected function ack($frame)
+ protected function ack($idx, $frame)
{
if ($this->useTransactions) {
- if (!$this->transaction) {
+ if (empty($this->transaction[$idx])) {
throw new Exception("Tried to ack but not in a transaction");
}
+ $this->cons[$idx]->ack($frame, $this->transaction[$idx]);
+ } else {
+ $this->cons[$idx]->ack($frame);
}
- $this->con->ack($frame, $this->transaction);
}
- protected function commit()
+ protected function commit($idx)
{
if ($this->useTransactions) {
- if (!$this->transaction) {
+ if (empty($this->transaction[$idx])) {
throw new Exception("Tried to commit but not in a transaction");
}
- $this->con->commit($this->transaction);
- $this->transaction = null;
+ $this->cons[$idx]->commit($this->transaction[$idx]);
+ $this->transaction[$idx] = null;
}
}
- protected function rollback()
+ protected function rollback($idx)
{
if ($this->useTransactions) {
- if (!$this->transaction) {
+ if (empty($this->transaction[$idx])) {
throw new Exception("Tried to rollback but not in a transaction");
}
- $this->con->commit($this->transaction);
- $this->transaction = null;
+ $this->cons[$idx]->commit($this->transaction[$idx]);
+ $this->transaction[$idx] = null;
}
}
}
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/theme.php b/lib/theme.php
index 020ce1ac4..0be8c3b9d 100644
--- a/lib/theme.php
+++ b/lib/theme.php
@@ -110,9 +110,20 @@ class Theme
$server = common_config('site', 'server');
}
- // XXX: protocol
+ $ssl = common_config('theme', 'ssl');
+
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('theme', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
- $this->path = 'http://'.$server.$path.$name;
+ $this->path = $protocol . '://'.$server.$path.$name;
}
}
diff --git a/lib/uapplugin.php b/lib/uapplugin.php
new file mode 100644
index 000000000..ef35bafbf
--- /dev/null
+++ b/lib/uapplugin.php
@@ -0,0 +1,204 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * UAP (Universal Ad Package) plugin
+ *
+ * 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 Sarven Capadisli <csarven@status.net>
+ * @author Evan Prodromou <evan@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') && !defined('LACONICA')) {
+ exit(1);
+}
+
+/**
+ * Abstract superclass for advertising plugins
+ *
+ * Plugins for showing ads should derive from this plugin.
+ *
+ * Outputs the following ad types (based on UAP):
+ *
+ * Medium Rectangle 300x250
+ * Rectangle 180x150
+ * Leaderboard 728x90
+ * Wide Skyscraper 160x600
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@status.net>
+ * @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/
+ */
+
+abstract class UAPPlugin extends Plugin
+{
+ public $mediumRectangle = null;
+ public $rectangle = null;
+ public $leaderboard = null;
+ public $wideSkyscraper = null;
+
+ /**
+ * Output our dedicated stylesheet
+ *
+ * @param Action $action Action being shown
+ *
+ * @return boolean hook flag
+ */
+
+ function onEndShowStatusNetStyles($action)
+ {
+ // XXX: allow override by theme
+ $action->cssLink('css/uap.css', 'base', 'screen, projection, tv');
+ return true;
+ }
+
+ /**
+ * Add a medium rectangle ad at the beginning of sidebar
+ *
+ * @param Action $action Action being shown
+ *
+ * @return boolean hook flag
+ */
+
+ function onStartShowAside($action)
+ {
+ if (!is_null($this->mediumRectangle)) {
+
+ $action->elementStart('div',
+ array('id' => 'ad_medium-rectangle',
+ 'class' => 'ad'));
+
+ $this->showMediumRectangle($action);
+
+ $action->elementEnd('div');
+ }
+
+ return true;
+ }
+
+ /**
+ * Add a leaderboard in the header
+ *
+ * @param Action $action Action being shown
+ *
+ * @return boolean hook flag
+ */
+
+ function onEndShowHeader($action)
+ {
+ if (!is_null($this->leaderboard)) {
+ $action->elementStart('div',
+ array('id' => 'ad_leaderboard',
+ 'class' => 'ad'));
+ $this->showLeaderboard($action);
+ $action->elementEnd('div');
+ }
+
+ return true;
+ }
+
+ /**
+ * Add a rectangle before aside sections
+ *
+ * @param Action $action Action being shown
+ *
+ * @return boolean hook flag
+ */
+
+ function onStartShowSections($action)
+ {
+ if (!is_null($this->rectangle)) {
+ $action->elementStart('div',
+ array('id' => 'ad_rectangle',
+ 'class' => 'ad'));
+ $this->showRectangle($action);
+ $action->elementEnd('div');
+ }
+
+ return true;
+ }
+
+ /**
+ * Add a wide skyscraper after the aside
+ *
+ * @param Action $action Action being shown
+ *
+ * @return boolean hook flag
+ */
+
+ function onEndShowAside($action)
+ {
+ if (!is_null($this->wideSkyscraper)) {
+ $action->elementStart('div',
+ array('id' => 'ad_wide-skyscraper',
+ 'class' => 'ad'));
+
+ $this->showWideSkyscraper($action);
+
+ $action->elementEnd('div');
+ }
+ return true;
+ }
+
+ /**
+ * Show a medium rectangle ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ abstract protected function showMediumRectangle($action);
+
+ /**
+ * Show a rectangle ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ abstract protected function showRectangle($action);
+
+ /**
+ * Show a wide skyscraper ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ abstract protected function showWideSkyscraper($action);
+
+ /**
+ * Show a leaderboard ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ abstract protected function showLeaderboard($action);
+}
diff --git a/lib/userprofile.php b/lib/userprofile.php
index 07e575085..8464c2446 100644
--- a/lib/userprofile.php
+++ b/lib/userprofile.php
@@ -238,9 +238,12 @@ class UserProfile extends Widget
if (Event::handle('StartProfilePageActionsElements', array(&$this->out, $this->profile))) {
if (empty($cur)) { // not logged in
- $this->out->elementStart('li', 'entity_subscribe');
- $this->showRemoteSubscribeLink();
- $this->out->elementEnd('li');
+ if (Event::handle('StartProfileRemoteSubscribe', array(&$this->out, $this->profile))) {
+ $this->out->elementStart('li', 'entity_subscribe');
+ $this->showRemoteSubscribeLink();
+ $this->out->elementEnd('li');
+ Event::handle('EndProfileRemoteSubscribe', array(&$this->out, $this->profile));
+ }
} else {
if ($cur->id == $this->profile->id) { // your own page
$this->out->elementStart('li', 'entity_edit');
@@ -343,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');
+ }
}
}
@@ -356,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 01b159ac1..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),
@@ -178,7 +180,6 @@ function common_ensure_session()
}
if (isset($id)) {
session_id($id);
- setcookie(session_name(), $id);
}
@session_start();
if (!isset($_SESSION['started'])) {
@@ -368,7 +369,8 @@ function common_current_user()
if ($_cur === false) {
- if (isset($_REQUEST[session_name()]) || (isset($_SESSION['userid']) && $_SESSION['userid'])) {
+ if (isset($_COOKIE[session_name()]) || isset($_GET[session_name()])
+ || (isset($_SESSION['userid']) && $_SESSION['userid'])) {
common_ensure_session();
$id = isset($_SESSION['userid']) ? $_SESSION['userid'] : false;
if ($id) {
@@ -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,39 +852,11 @@ 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);
- $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);
- if ($group && $sender->isMember($group)) {
+ $group = User_group::getForNickname($nickname, $sender);
+ if ($sender && $group && $sender->isMember($group)) {
$attrs = array('href' => $group->permalink(),
'class' => 'url');
if (!empty($group->fullname)) {
@@ -706,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
@@ -765,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);
@@ -773,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;
@@ -797,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')."/" : '';
@@ -821,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;
}
@@ -980,7 +1127,7 @@ function common_redirect($url, $code=307)
function common_broadcast_notice($notice, $remote=false)
{
- return common_enqueue_notice($notice);
+ // DO NOTHING!
}
// Stick the notice on the queue
@@ -990,9 +1137,13 @@ function common_enqueue_notice($notice)
static $localTransports = array('omb',
'ping');
- static $allTransports = array('sms', 'plugin');
-
- $transports = $allTransports;
+ $transports = array();
+ if (common_config('sms', 'enabled')) {
+ $transports[] = 'sms';
+ }
+ if (Event::hasHandler('HandleQueuedNotice')) {
+ $transports[] = 'plugin';
+ }
$xmpp = common_config('xmpp', 'enabled');
@@ -1000,6 +1151,7 @@ function common_enqueue_notice($notice)
$transports[] = 'jabber';
}
+ // @fixme move these checks into QueueManager and/or individual handlers
if ($notice->is_local == Notice::LOCAL_PUBLIC ||
$notice->is_local == Notice::LOCAL_NONPUBLIC) {
$transports = array_merge($transports, $localTransports);
@@ -1023,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);
@@ -1326,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)
@@ -1506,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
@@ -1520,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);
}
}
@@ -1558,3 +1717,57 @@ function common_client_ip()
return array($proxy, $ip);
}
+
+function common_url_to_nickname($url)
+{
+ static $bad = array('query', 'user', 'password', 'port', 'fragment');
+
+ $parts = parse_url($url);
+
+ # If any of these parts exist, this won't work
+
+ foreach ($bad as $badpart) {
+ if (array_key_exists($badpart, $parts)) {
+ return null;
+ }
+ }
+
+ # We just have host and/or path
+
+ # If it's just a host...
+ if (array_key_exists('host', $parts) &&
+ (!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0))
+ {
+ $hostparts = explode('.', $parts['host']);
+
+ # Try to catch common idiom of nickname.service.tld
+
+ if ((count($hostparts) > 2) &&
+ (strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au
+ (strcmp($hostparts[0], 'www') != 0))
+ {
+ return common_nicknamize($hostparts[0]);
+ } else {
+ # Do the whole hostname
+ return common_nicknamize($parts['host']);
+ }
+ } else {
+ if (array_key_exists('path', $parts)) {
+ # Strip starting, ending slashes
+ $path = preg_replace('@/$@', '', $parts['path']);
+ $path = preg_replace('@^/@', '', $path);
+ $path = basename($path);
+ if ($path) {
+ return common_nicknamize($path);
+ }
+ }
+ }
+
+ return null;
+}
+
+function common_nicknamize($str)
+{
+ $str = preg_replace('/\W/', '', $str);
+ return strtolower($str);
+}
diff --git a/lib/xmppmanager.php b/lib/xmppmanager.php
index 299175dd7..f37635855 100644
--- a/lib/xmppmanager.php
+++ b/lib/xmppmanager.php
@@ -48,7 +48,7 @@ class XmppManager extends IoManager
public static function get()
{
if (common_config('xmpp', 'enabled')) {
- $site = common_config('site', 'server');
+ $site = StatusNet::currentSite();
if (empty(self::$singletons[$site])) {
self::$singletons[$site] = new XmppManager();
}
@@ -69,7 +69,7 @@ class XmppManager extends IoManager
function __construct()
{
- $this->site = common_config('site', 'server');
+ $this->site = StatusNet::currentSite();
$this->resource = common_config('xmpp', 'resource') . 'daemon';
}
@@ -101,7 +101,7 @@ class XmppManager extends IoManager
$this->conn->addEventHandler('reconnect', 'handle_reconnect', $this);
$this->conn->setReconnectTimeout(600);
- jabber_send_presence("Send me a message to post a notice", 'available', null, 'available', -1);
+ jabber_send_presence("Send me a message to post a notice", 'available', null, 'available', 100);
return !is_null($this->conn);
}
@@ -233,7 +233,7 @@ class XmppManager extends IoManager
common_log(LOG_NOTICE, 'XMPP reconnected');
$this->conn->processUntil('session_start');
- $this->conn->presence(null, 'available', null, 'available', -1);
+ $this->conn->presence(null, 'available', null, 'available', 100);
}
@@ -476,10 +476,10 @@ class XmppManager extends IoManager
*/
protected function switchSite()
{
- if ($this->site != common_config('site', 'server')) {
+ if ($this->site != StatusNet::currentSite()) {
common_log(LOG_DEBUG, __METHOD__ . ": switching to site $this->site");
$this->stats('switch');
- StatusNet::init($this->site);
+ StatusNet::switchSite($this->site);
}
}
}
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index bbe2597a2..9f7bd5cbb 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -9,24 +9,82 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:00+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:34:53+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Ù†Ùاذ"
+
+#. 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 "تسجيل"
+
+#. 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 "خاص"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "بالدعوة Ùقط"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "عطّل التسجيل الجديد."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Ù…Ùغلق"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Ø­Ùظ إعدادت الوصول"
+
+#: 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
@@ -35,83 +93,92 @@ msgstr "لا صÙحة كهذه"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -121,22 +188,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيلة API."
@@ -151,7 +218,7 @@ msgstr "لم يتم العثور على وسيلة API."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "تتطلب هذه الطريقة POST."
@@ -169,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 "ليس للمستخدم مل٠شخصي."
@@ -180,7 +248,7 @@ msgstr "لم يمكن Ø­Ùظ الملÙ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -194,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."
@@ -225,7 +293,7 @@ msgstr "رسائل مباشرة من %s"
#: actions/apidirectmessage.php:93
#, php-format
msgid "All the direct messages sent from %s"
-msgstr ""
+msgstr "جميع الرسائل المرسلة من %s"
#: actions/apidirectmessage.php:101
#, php-format
@@ -235,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!"
@@ -296,76 +364,76 @@ msgstr "لا يمكنك عدم متابعة Ù†Ùسك."
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
-msgstr ""
+msgstr "تعذّر تحديد المستخدم المصدر."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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 ""
+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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
+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 ""
@@ -376,24 +444,24 @@ 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."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
-msgstr ""
+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."
@@ -413,94 +481,110 @@ msgstr "مجموعات %s"
msgid "groups on %s"
msgstr "مجموعات %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "طلب سيء."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "اسم/كلمة سر غير صحيحة!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+#, fuzzy
+msgid "Database error deleting OAuth application user."
msgstr "خطأ قاعدة البيانات أثناء حذ٠المستخدم OAuth app"
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+#, fuzzy
+msgid "Database error inserting OAuth application user."
msgstr "خطأ قاعدة البيانات أثناء إدخال المستخدم OAuth app"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "الحساب"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "الاسم المستعار"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "كلمة السر"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "ارÙض"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "اسمح"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -533,17 +617,17 @@ msgstr "Ø­ÙØ°ÙÙت الحالة."
msgid "No status with that ID found."
msgstr "لا حالة ÙˆÙجدت بهذه الهوية."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "لم يوجد"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -557,23 +641,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"
@@ -594,27 +666,22 @@ msgstr "مسار %s الزمني العام"
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "كرّره %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ""
@@ -630,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 "لا اسم مستعار."
@@ -643,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 "Ø£Ùتار"
@@ -651,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
@@ -660,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -691,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 ""
@@ -722,22 +788,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "نعم"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -745,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 "ألغ٠منع هذا المستخدم"
@@ -833,16 +904,55 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "يجب أن تسجل الدخول لتحذ٠تطبيقا."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "لم يوجد التطبيق."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "أنت لست مالك هذا التطبيق."
+
+#: 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 "احذ٠هذا التطبيق"
+
+#: 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 "لا تحذ٠هذا التطبيق"
+
+#: actions/deleteapplication.php:160
+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 "لست والجًا."
@@ -869,7 +979,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -885,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 "التصميم"
@@ -947,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"
@@ -999,12 +1109,13 @@ msgstr "ارجع إلى المبدئي"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "أرسل"
@@ -1020,32 +1131,24 @@ msgstr "هذا الشعار ليس Ù…Ùضلًا!"
msgid "Add to favorites"
msgstr "أض٠إلى المÙضلات"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "لا مستند كهذا."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "لا مستند باسم \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "عدّل التطبيق"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "أنت لست مالك هذا التطبيق."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "لا تطبيق كهذا."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "استخدم هذا النموذج لتعدل تطبيقك."
@@ -1054,43 +1157,47 @@ msgstr "استخدم هذا النموذج لتعدل تطبيقك."
msgid "Name is required."
msgstr "الاسم مطلوب."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "الاسم طويل جدا (الأقصى 255 حرÙا)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr ""
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "الوص٠مطلوب."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "مسار المصدر ليس صحيحا."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "المنظمة مطلوبة."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "المنظمة طويلة جدا (الأقصى 255 حرÙا)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "صÙحة المنظمة الرئيسية مطلوبة."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "لم يمكن تحديث التطبيق."
@@ -1103,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: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 "Ø­ÙÙظت الخيارات."
@@ -1160,8 +1267,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "ألغÙ"
@@ -1209,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."
@@ -1225,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
@@ -1241,7 +1348,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1253,7 +1360,7 @@ msgstr "هذا هو عنوان بريدك الإكتروني سابقًا."
msgid "That email address already belongs to another user."
msgstr "هذا البريد الإلكتروني ملك مستخدم آخر بالÙعل."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "تعذّر إدراج رمز التأكيد."
@@ -1294,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."
@@ -1312,15 +1419,15 @@ msgstr "هذا الإشعار Ù…Ùضلة مسبقًا!"
msgid "Disfavor favorite"
msgstr "ألغ٠تÙضيل المÙضلة"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr "إشعارات مشهورة"
+msgstr "إشعارات محبوبة"
#: actions/favorited.php:67
#, php-format
msgid "Popular notices, page %d"
-msgstr "إشعارات مشهورة، الصÙحة %d"
+msgstr "إشعارات محبوبة، الصÙحة %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
@@ -1352,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
@@ -1425,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
@@ -1454,7 +1580,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙŠ المجموعة."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1486,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr ""
+msgstr "اجعل المستخدم إداريًا ÙÙŠ المجموعة"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 "مجموعات"
@@ -1720,14 +1852,19 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "هذه ليست هويتك ÙÙŠ جابر."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+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."
@@ -1778,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"
@@ -1796,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"
@@ -1840,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"
@@ -1849,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"
@@ -1870,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ù„Ùج"
@@ -1885,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?"
@@ -1896,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
@@ -1904,21 +2048,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "لم يمكن الحصول على تسجيل العضوية Ù„%1$s ÙÙŠ المجموعة %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "لم يمكن جعل %1$s إداريا للمجموعة %2$s."
@@ -1928,7 +2072,7 @@ msgid "No current status"
msgstr "لا حالة حالية"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "تطبيق جديد"
#: actions/newapplication.php:64
@@ -1939,11 +2083,11 @@ msgstr "يجب أن تكون مسجل الدخول لتسجل تطبيقا."
msgid "Use this form to register a new application."
msgstr "استخدم هذا النموذج لتسجل تطبيقا جديدا."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "لم يمكن إنشاء التطبيق."
@@ -2070,28 +2214,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "لست مستخدما لهذا التطبيق."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2102,7 +2246,7 @@ msgstr ""
#: actions/oembed.php:86 actions/shownotice.php:180
#, php-format
msgid "%1$s's status on %2$s"
-msgstr ""
+msgstr "حالة %1$s ÙÙŠ يوم %2$s"
#: actions/oembed.php:157
msgid "content type "
@@ -2112,8 +2256,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "ليس نسق بيانات مدعوم."
@@ -2177,18 +2321,23 @@ msgstr "توكن دخول غير صحيح محدد."
msgid "Login token expired."
msgstr "توكن الدخول انتهى."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+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."
@@ -2208,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
@@ -2247,7 +2396,8 @@ msgstr "تعذّر Ø­Ùظ كلمة السر الجديدة."
msgid "Password saved."
msgstr "Ø­ÙÙظت كلمة السر."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2255,132 +2405,147 @@ msgstr "المسارات"
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "لا يمكن قراءة دليل السمات: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "لا يمكن الكتابة ÙÙŠ دليل الأÙتارات: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "لا يمكن الكتابة ÙÙŠ دليل الخلÙيات: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "لا يمكن قراءة دليل المحليات: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "الموقع"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "خادوم"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "اسم مضي٠خادوم الموقع."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "المسار"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "مسار الموقع"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "مسار المحليات"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "مسار دليل المحليات"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "مسارات Ùاخرة"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "أأستخدم مسارات Ùاخرة (يمكن قراءتها وتذكرها بسهولة أكبر)ØŸ"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "السمة"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "خادوم السمات"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "مسار السمات"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "دليل السمات"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ø£Ùتارات"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "خادوم الأÙتارات"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "مسار الأÙتارات"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "دليل الأÙتار."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "خلÙيات"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "خادوم الخلÙيات"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "مسار الخلÙيات"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "دليل الخلÙيات"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "أحيانًا"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "دائمًا"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "استخدم SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "خادم SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "احÙظ المسارات"
@@ -2403,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 ""
@@ -2421,7 +2586,7 @@ msgstr "إعدادات المل٠الشخصي"
#: actions/profilesettings.php:71
msgid ""
"You can update your personal profile info here so people know more about you."
-msgstr ""
+msgstr "بإمكانك تحديث بيانات ملÙÙƒ الشخصي ليعر٠عنك الناس أكثر."
#: actions/profilesettings.php:99
msgid "Profile information"
@@ -2429,27 +2594,27 @@ 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 "الاسم الكامل"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "الصÙحة الرئيسية"
#: actions/profilesettings.php:117 actions/register.php:455
msgid "URL of your homepage, blog, or profile on another site"
-msgstr ""
+msgstr "مسار صÙحتك الرئيسية أو مدونتك أو ملÙÙƒ الشخصي على موقع آخر"
#: actions/profilesettings.php:122 actions/register.php:461
#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr ""
+msgstr "تكلم عن Ù†Ùسك واهتمامتك ÙÙŠ %d حرÙ"
#: actions/profilesettings.php:125 actions/register.php:464
msgid "Describe yourself and your interests"
@@ -2460,15 +2625,15 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "الموقع"
#: actions/profilesettings.php:134 actions/register.php:473
msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr ""
+msgstr "مكان تواجدك، على سبيل المثال \"المدينة، الولاية (أو المنطقة)، الدولة\""
#: actions/profilesettings.php:138
msgid "Share my current location when posting notices"
@@ -2484,8 +2649,9 @@ msgstr "الوسوم"
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
+"سÙÙ… Ù†Ùسك (حرو٠وأرقام Ùˆ \"-\" Ùˆ \".\" Ùˆ \"_\")ØŒ اÙصلها بÙاصلة (',') أو مساÙØ©."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2504,14 +2670,14 @@ msgstr "ما المنطقة الزمنية التي تتواجد Ùيها عاد
#: actions/profilesettings.php:167
msgid ""
"Automatically subscribe to whoever subscribes to me (best for non-humans)"
-msgstr ""
+msgstr "اشترك تلقائيًا بأي شخص يشترك بي (ÙŠÙضل أن يستخدم لغير البشر)"
#: actions/profilesettings.php:228 actions/register.php:223
#, php-format
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تÙختر المنطقة الزمنية."
@@ -2524,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 "Ø­ÙÙظت الإعدادات."
@@ -2553,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "كن أول من ÙŠÙرسل!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2604,7 +2771,7 @@ msgstr ""
"الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! "
"([اقرأ المزيد](%%doc.help%%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2639,7 +2806,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "سحابة الوسوم"
@@ -2775,8 +2942,7 @@ msgstr "عذرا، رمز دعوة غير صالح."
msgid "Registration successful"
msgstr "نجح التسجيل"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "سجّل"
@@ -2815,7 +2981,7 @@ msgid "Same as password above. Required."
msgstr "Ù†Ùس كلمة السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -2899,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 "اشترك"
@@ -2935,7 +3101,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية."
msgid "You already repeated that notice."
msgstr "أنت كررت هذه الملاحظة بالÙعل."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "مكرر"
@@ -2943,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "الردود على %s"
+
+#: 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 "
@@ -2990,6 +3161,20 @@ 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 "ستاتس نت"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -2998,106 +3183,148 @@ msgstr ""
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 "الجلسات"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "الإعدادات الأساسية لموقع StatusNet هذا."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "أيقونة"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "الاسم"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "المنظمة"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "اسمح بالمسار"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "إشعارات %s المÙÙضلة"
+
#: actions/showfavorites.php:132
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 "
@@ -3106,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 "
@@ -3116,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 "إنها إحدى وسائل مشاركة ما تحب."
@@ -3125,67 +3352,72 @@ msgstr "إنها إحدى وسائل مشاركة ما تحب."
msgid "%s group"
msgstr "مجموعة %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "مل٠المجموعة الشخصي"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3194,8 +3426,13 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** مجموعة مستخدمين على %%%%site.name%%%%ØŒ خدمة [التدوين المÙصغّر](http://"
+"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
+"[انضم الآن](%%%%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."
@@ -3203,8 +3440,11 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
+"**%s** مجموعة مستخدمين على %%%%site.name%%%%ØŒ خدمة [التدوين المÙصغّر](http://"
+"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3235,6 +3475,11 @@ msgstr "Ø­Ùذ٠الإشعار."
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$sØŒ الصÙحة %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3260,25 +3505,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3286,8 +3531,13 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"لدى **%s** حساب على %%site.name%%ØŒ خدمة [التدوين المÙصغّر](http://en."
+"wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
+"[انضم الآن](%%%%action.register%%%%) لتتابع إشعارت **%s** وغيره! ([اقرأ "
+"المزيد](%%%%doc.help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3295,7 +3545,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "تكرار ل%s"
@@ -3309,197 +3559,130 @@ 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 "الإعدادات الأساسية لموقع StatusNet هذا."
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صÙرًا."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "يجب أن تملك عنوان بريد إلكتروني صحيح."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "لغة غير معروÙØ© \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرÙًا."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكتروني للاتصال بموقعك"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقة الزمنية المبدئية"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقة الزمنية المبدئية للموقع؛ ت‌ع‌م عادة."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr "لغة الموقع المبدئية"
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "مسارات"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "خادوم"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "اسم مضي٠خادوم الموقع."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "مسارات Ùاخرة"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "أأستخدم مسارات Ùاخرة (يمكن قراءتها وتذكرها بسهولة أكبر)ØŸ"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Ù†Ùاذ"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "خاص"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "بالدعوة Ùقط"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Ù…Ùغلق"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "عطّل التسجيل الجديد."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "ÙÙŠ مهمة Ù…Ùجدولة"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "التكرار"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "اللغة المبدئية"
-#: actions/siteadminpanel.php:360
-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:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحرو٠ÙÙŠ الإشعارات."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "اذ٠إعدادت الموقع"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:67
+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
+msgid "Site notice text"
+msgstr "نص إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "نص إشعار عام للموقع (255 حر٠كحد أقصى؛ يسمح بHTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "احÙظ إشعار الموقع"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3568,7 +3751,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."
@@ -3591,21 +3774,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: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 "Ù…Ùشترك"
@@ -3665,7 +3917,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 "
@@ -3675,30 +3927,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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "الإشعارات الموسومة ب%s"
+
+#: 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 ""
@@ -3716,7 +3973,8 @@ msgstr ""
msgid "User profile"
msgstr "مل٠المستخدم الشخصي"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "صورة"
@@ -3747,7 +4005,7 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3771,18 +4029,19 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3844,26 +4103,6 @@ msgstr "الدعوات Ù…ÙÙعلة"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "الجلسات"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "تنقيح الجلسة"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "مكّن تنقيح Ù…Ùخرجات الجلسة."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr ""
@@ -3875,84 +4114,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "الرخصة"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "اقبل"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "اشترك بهذا المستخدم"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "ارÙض"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "ارÙض هذا الاشتراك"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "لا طلب استيثاق!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "رÙÙض الاشتراك"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -3965,26 +4204,37 @@ 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!"
msgstr "استمتع بالنقانق!"
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
+
#: actions/usergroups.php:130
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"
@@ -3996,14 +4246,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
-
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "ستاتس نت"
+"هذا الموقع يشغله %1$s النسخة %2$s، حقوق النشر 2008-2010 StatusNet, Inc "
+"ومساهموها."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "المساهمون"
#: actions/version.php:168
msgid ""
@@ -4030,9 +4278,9 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr "ملحقات"
+msgstr "الملحقات"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "النسخة"
@@ -4069,6 +4317,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"
@@ -4086,61 +4338,100 @@ msgstr "تعذّر إدراج الرسالة."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
-#: classes/User.php:382
+#: 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 "غيّر إعدادات ملÙÙƒ الشخصي"
@@ -4178,124 +4469,172 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صÙحة غير Ù…Ùعنونة"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "الرئيسية"
-
-#: lib/action.php:433
+#. 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
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr ""
+msgstr "غير كلمة سرّك"
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "اتصالات"
+
+#: lib/action.php:443
msgid "Connect"
msgstr "اتصل"
-#: lib/action.php:438
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ادعÙ"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "إداري"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "اخرج"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "مساعدة"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ù„Ùج"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "ابحث"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "مساعدة"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr "ابحث عن أشخاص أو نص"
+msgstr "ابحث عن أشخاص أو نصوص"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصÙحة"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "مساعدة"
+
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئلة المكررة"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
-msgstr ""
+msgstr "الجسر"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "رخصة برنامج StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4304,12 +4643,12 @@ msgstr ""
"**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4320,130 +4659,206 @@ msgstr ""
"المتوÙر تحت [رخصة غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصة محتوى الموقع"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "الرخصة."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1141
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل"
-#: lib/adminpanelaction.php:96
-msgid "You cannot make changes to this site."
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
msgstr ""
-#: lib/adminpanelaction.php:107
+#: 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 "التغييرات لهذه اللوحة غير مسموح بها."
-#: 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 lib/adminpanelaction.php:327
+#. 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 "المستخدم"
+
+#. 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 "ضبط المسارات"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "ضبط الجلسات"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+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/applicationeditform.php:206
+#: 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 "عدّل التطبيق"
+
+#: 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:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "ص٠تطبيقك"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "مسار المصدر"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "متصÙØ­"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4471,11 +4886,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "وسوم هذا المرÙÙ‚"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "تغيير كلمة السر Ùشل"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "تغيير كلمة السر غير مسموح به"
@@ -4626,54 +5041,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 ""
+msgstr "الأمر لم ÙŠÙجهزّ بعد."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
-msgstr ""
+msgstr "الإشعار Ù…ÙØ·ÙØ£."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
-msgstr ""
+msgstr "تعذّر إطÙاء الإشعارات."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
-msgstr ""
+msgstr "الإشعار يعمل."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
-msgstr ""
+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] "لست مشتركًا بأحد."
@@ -4683,11 +5108,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] "لا أحد مشترك بك."
@@ -4697,11 +5122,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] "لست عضوًا ÙÙŠ أي مجموعة."
@@ -4711,7 +5136,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4725,6 +5150,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"
@@ -4752,19 +5178,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -4861,6 +5287,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 ""
@@ -4950,32 +5381,32 @@ 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 "كيلوبايت"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "مصدر صندوق وارد غير معرو٠%d."
@@ -4990,11 +5421,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"
@@ -5055,7 +5486,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
@@ -5077,12 +5508,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
@@ -5127,7 +5558,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
@@ -5153,7 +5584,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
@@ -5180,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 "من"
@@ -5269,6 +5700,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 "أرسل إشعارًا"
@@ -5300,48 +5736,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "ÙÙŠ السياق"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "مكرر بواسطة"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5373,11 +5809,7 @@ msgstr "خطأ أثناء إدراج المل٠الشخصي البعيد"
msgid "Duplicate notice"
msgstr "ضاع٠الإشعار"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "تعذّر إدراج اشتراك جديد."
@@ -5393,19 +5825,19 @@ msgstr "الردود"
msgid "Favorites"
msgstr "المÙضلات"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق الوارد"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "رسائلك الواردة"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "صندوق الصادر"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "رسائلك المÙرسلة"
@@ -5416,9 +5848,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 "الاشتراكات"
@@ -5426,23 +5858,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 "كل المجموعات"
@@ -5472,7 +5904,7 @@ msgstr "Ù…Ùختارون"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr "مشهورة"
+msgstr "محبوبة"
#: lib/repeatform.php:107
msgid "Repeat this notice?"
@@ -5482,6 +5914,15 @@ msgstr "أأكرّر هذا الإشعار؟ّ"
msgid "Repeat this notice"
msgstr "كرّر هذا الإشعار"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5498,6 +5939,10 @@ msgstr "ابحث ÙÙŠ الموقع"
msgid "Keyword(s)"
msgstr "الكلمات المÙتاحية"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ابحث"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ابحث ÙÙŠ المساعدة"
@@ -5549,34 +5994,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"
@@ -5627,67 +6053,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
@@ -5701,7 +6142,7 @@ msgstr "%s ليس لونًا صحيحًا!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index 20bb7a4b2..3654f6326 100644
--- a/locale/arz/LC_MESSAGES/statusnet.po
+++ b/locale/arz/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Egyptian Spoken Arabic
#
+# Author@translatewiki.net: Dudi
# Author@translatewiki.net: Ghaly
# Author@translatewiki.net: Meno25
# --
@@ -9,24 +10,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:03+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:34: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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Ù†Ùاذ"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "اذ٠إعدادت الموقع"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "سجّل"
+
+#. 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 "خاص"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "بالدعوه Ùقط"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "عطّل التسجيل الجديد."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Ù…Ùغلق"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "اذ٠إعدادت الموقع"
+
+#: 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
@@ -35,83 +99,92 @@ msgstr "لا صÙحه كهذه"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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"
+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:202
+#: 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 ""
@@ -121,25 +194,25 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: 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
@@ -151,7 +224,7 @@ msgstr "لم يتم العثور على وسيله API."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "تتطلب هذه الطريقه POST."
@@ -169,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 "ليس للمستخدم مل٠شخصى."
@@ -180,7 +254,7 @@ msgstr "لم يمكن Ø­Ùظ الملÙ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -194,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."
@@ -207,7 +281,7 @@ msgstr "تعذّر تحديث تصميمك."
#: actions/apiblockcreate.php:105
msgid "You cannot block yourself!"
-msgstr "لا يمكنك منع Ù†Ùسك!"
+msgstr "ما ينÙعش تمنع Ù†Ùسك!"
#: actions/apiblockcreate.php:126
msgid "Block user failed."
@@ -261,7 +335,7 @@ msgstr ""
#: actions/apifavoritecreate.php:119
msgid "This status is already a favorite."
-msgstr "هذه الحاله Ù…Ùضله بالÙعل."
+msgstr "الحاله دى موجوده Ùعلا ÙÙ‰ التÙضيلات."
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
@@ -269,7 +343,7 @@ msgstr "تعذّر إنشاء Ù…Ùضله."
#: actions/apifavoritedestroy.php:122
msgid "That status is not a favorite."
-msgstr "تلك الحاله ليست Ù…Ùضله."
+msgstr "الحاله دى مش محطوطه ÙÙ‰ التÙضيلات."
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -290,82 +364,82 @@ msgstr ""
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself."
-msgstr "لا يمكنك عدم متابعه Ù†Ùسك."
+msgstr "ما ينÙعش عدم متابعة Ù†Ùسك."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr ""
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -376,27 +450,27 @@ 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."
+msgstr "ما Ù†Ùعش يضم %1$s للجروپ %2$s."
#: actions/apigroupleave.php:114
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."
+msgstr "ما Ù†Ùعش يتشال اليوزر %1$s من الجروپ %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -413,94 +487,110 @@ msgstr "مجموعات %s"
msgid "groups on %s"
msgstr "مجموعات %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "اسم/كلمه سر غير صحيحة!"
+msgstr "نيكنيم / پاسوورد مش مظبوطه!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+#, fuzzy
+msgid "Database error deleting OAuth application user."
msgstr "خطأ قاعده البيانات أثناء حذ٠المستخدم OAuth app"
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+#, fuzzy
+msgid "Database error inserting OAuth application user."
msgstr "خطأ قاعده البيانات أثناء إدخال المستخدم OAuth app"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "الحساب"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "الاسم المستعار"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "كلمه السر"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "ارÙض"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "اسمح"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -519,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."
@@ -533,17 +623,17 @@ msgstr "Ø­ÙØ°ÙÙت الحاله."
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "لم يوجد"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -557,23 +647,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"
@@ -594,27 +672,22 @@ msgstr "مسار %s الزمنى العام"
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ""
@@ -630,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 "لا اسم مستعار."
@@ -643,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 "Ø£Ùتار"
@@ -660,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -691,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 ""
@@ -722,22 +794,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "نعم"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "امنع هذا المستخدم"
@@ -745,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"
+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 "ألغ٠منع هذا المستخدم"
@@ -821,7 +898,7 @@ msgstr "تعذّر حذ٠تأكيد البريد الإلكترونى."
#: actions/confirmaddress.php:144
msgid "Confirm address"
-msgstr "أكد العنوان"
+msgstr "اكد العنوان"
#: actions/confirmaddress.php:159
#, php-format
@@ -833,16 +910,60 @@ 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 "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "لم يوجد رمز التأكيد."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "انت مش بتملك الapplication دى."
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "لا تطبيق كهذا."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "لا تحذ٠هذا الإشعار"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "لست والجًا."
@@ -869,7 +990,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -885,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 "التصميم"
@@ -999,12 +1120,13 @@ msgstr "ارجع إلى المبدئي"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "أرسل"
@@ -1020,79 +1142,76 @@ msgstr "هذا الشعار ليس Ù…Ùضلًا!"
msgid "Add to favorites"
msgstr "أض٠إلى المÙضلات"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "لا مستند كهذا."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "تطبيقات OAuth"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
-msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "أنت لست مالك هذا التطبيق."
+msgstr "لازم يكون متسجل دخولك علشان تعدّل application."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
-msgstr "لا تطبيق كهذا."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
+msgstr "ما Ùيش application زى كده."
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
-msgstr "استخدم النموذج ده علشان تعدل تطبيقك."
+msgstr "استعمل الÙورمه دى علشان تعدّل الapplication بتاعتك."
#: actions/editapplication.php:177 actions/newapplication.php:159
msgid "Name is required."
msgstr "الاسم مطلوب."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "الاسم طويل جدا (الأقصى 255 حرÙا)."
+msgstr "الاسم طويل جدا (اكتر حاجه 255 رمز)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr ""
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "الوص٠مطلوب."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "مسار المصدر ليس صحيحا."
+msgstr "الSource URL مش مظبوط."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "المنظمه طويله جدا (الأقصى 255 حرÙا)."
+msgstr "المنظمه طويله جدا (اكتر حاجه 255 رمز)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "لم يمكن تحديث التطبيق."
+msgstr "ما Ù†Ùعش تحديث الapplication."
#: actions/editgroup.php:56
#, php-format
@@ -1103,35 +1222,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
msgid "You must be an admin to edit the group."
-msgstr "يجب أن تكون إداريا لتعدل المجموعه."
+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: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 "Ø­ÙÙظت الخيارات."
#: actions/emailsettings.php:60
msgid "Email settings"
-msgstr "إعدادات البريد الإلكتروني"
+msgstr "تظبيطات الايميل"
#: actions/emailsettings.php:71
#, php-format
@@ -1160,14 +1279,14 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "ألغÙ"
#: actions/emailsettings.php:121
msgid "Email address"
-msgstr "عنوان البريد الإلكتروني"
+msgstr "عنوان الايميل"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1241,7 +1360,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1253,7 +1372,7 @@ msgstr "هذا هو عنوان بريدك الإكترونى سابقًا."
msgid "That email address already belongs to another user."
msgstr "هذا البريد الإلكترونى ملك مستخدم آخر بالÙعل."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "تعذّر إدراج رمز التأكيد."
@@ -1312,7 +1431,7 @@ msgstr "هذا الإشعار Ù…Ùضله مسبقًا!"
msgid "Disfavor favorite"
msgstr "ألغ٠تÙضيل المÙضلة"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "إشعارات مشهورة"
@@ -1371,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."
@@ -1383,7 +1502,7 @@ msgstr "لا مرÙقات."
#: actions/file.php:51
msgid "No uploaded attachments."
-msgstr "لا مرÙقات مرÙوعه."
+msgstr "ما Ùيش Ùايلات اتعمللها upload."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1425,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
@@ -1454,7 +1592,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr "المستخدم ليس عضوًا ÙÙ‰ المجموعه."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "امنع المستخدم من المجموعة"
@@ -1486,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 "المستخدم بدون مل٠مطابق."
+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"
+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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "إداري"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "امنع"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 "مجموعات"
@@ -1638,7 +1782,7 @@ msgstr "خطأ أثناء منع الحجب."
#: actions/imsettings.php:59
msgid "IM settings"
-msgstr "إعدادات المراسله الÙورية"
+msgstr "تظبيطات بعت الرسايل الÙوريه"
#: actions/imsettings.php:70
#, php-format
@@ -1664,7 +1808,7 @@ msgstr ""
#: actions/imsettings.php:124
msgid "IM address"
-msgstr "عنوان المراسله الÙورية"
+msgstr "عنوان الرساله الÙوريه"
#: actions/imsettings.php:126
#, php-format
@@ -1720,6 +1864,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "هذه ليست هويتك ÙÙ‰ جابر."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1796,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"
@@ -1840,23 +1992,28 @@ 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"
+msgstr "%1$s دخل جروپ %2$s"
#: actions/leavegroup.php:60
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"
+msgstr "%1$s ساب جروپ %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1870,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ù„Ùج"
@@ -1904,48 +2060,49 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "لم يمكن الحصول على تسجيل العضويه Ù„%1$s ÙÙ‰ المجموعه %2$s."
+msgstr "مش ناÙع يتجاب سجل العضويه لـ%1$s ÙÙ‰ جروپ %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "لم يمكن جعل %1$s إداريا للمجموعه %2$s."
+msgstr "%1$s مش ناÙع يبقى ادارى لجروپ %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "لا حاله حالية"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "لا تطبيق كهذا."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
-msgstr "يجب أن تكون مسجل الدخول لتسجل تطبيقا."
+msgstr "لازم تكون مسجل دخوللك علشان تسجل application."
#: actions/newapplication.php:143
msgid "Use this form to register a new application."
-msgstr "استخدم هذا النموذج لتسجل تطبيقا جديدا."
+msgstr "استعمل الÙورمه دى علشان تسجل application جديد."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "مش ممكن إنشاء التطبيق."
+msgstr "مش ممكن إنشاء الapplication."
#: actions/newgroup.php:53
msgid "New group"
@@ -1984,7 +2141,7 @@ msgstr "Ø£Ùرسلت الرسالة"
#: actions/newmessage.php:185
#, php-format
msgid "Direct message to %s sent."
-msgstr "رساله مباشره ل%s تم إرسالها."
+msgstr "رساله مباشره اتبعتت لـ%s."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2012,7 +2169,7 @@ msgstr "بحث ÙÙ‰ النصوص"
#: actions/noticesearch.php:91
#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "نتائج البحث ل\"%1$s\" على %2$s"
+msgstr "نتايج التدوير لـ\"%1$s\" على %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2053,11 +2210,11 @@ msgstr "Ø£Ùرسل التنبيه!"
#: actions/oauthappssettings.php:59
msgid "You must be logged in to list your applications."
-msgstr "يجب أن تكون مسجل الدخول لعرض تطبيقاتك."
+msgstr "لازم تكون مسجل دخولك علشان تشو٠ليستة الapplications بتاعتك."
#: actions/oauthappssettings.php:74
msgid "OAuth applications"
-msgstr "تطبيقات OAuth"
+msgstr "OAuth applications"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2068,28 +2225,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "أنت لست مستخدما لهذا التطبيق."
+msgstr "انت مش يوزر للapplication دى."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2110,8 +2267,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 " مش نظام بيانات مدعوم."
@@ -2125,7 +2282,7 @@ msgstr "بحث الإشعارات"
#: actions/othersettings.php:60
msgid "Other settings"
-msgstr "إعدادات تانيه"
+msgstr "تظبيطات تانيه"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2157,23 +2314,28 @@ msgstr ""
#: actions/otp.php:69
msgid "No user ID specified."
-msgstr "لا هويه مستخدم محدده."
+msgstr "ما Ùيش ID متحدد لليوزر."
#: actions/otp.php:83
msgid "No login token specified."
-msgstr "لا محتوى دخول محدد."
+msgstr "ما Ùيش امارة دخول متحدده."
#: actions/otp.php:90
msgid "No login token requested."
-msgstr "لا طلب استيثاق."
+msgstr "ما Ùيش طلب تسجيل دخول مطلوب."
#: actions/otp.php:95
msgid "Invalid login token specified."
-msgstr "توكن دخول غير صحيح محدد."
+msgstr "امارة تسجيل الدخول اللى اتحطت مش موجوده."
#: actions/otp.php:104
msgid "Login token expired."
-msgstr "توكن الدخول انتهى."
+msgstr "تاريخ صلاحية الاماره خلص."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
#: actions/outbox.php:61
#, php-format
@@ -2245,7 +2407,8 @@ msgstr "تعذّر Ø­Ùظ كلمه السر الجديده."
msgid "Password saved."
msgstr "Ø­ÙÙظت كلمه السر."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2253,132 +2416,147 @@ msgstr "المسارات"
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "لا يمكن قراءه دليل السمات: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "لا يمكن الكتابه ÙÙ‰ دليل الأÙتارات: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "لا يمكن الكتابه ÙÙ‰ دليل الخلÙيات: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "لا يمكن قراءه دليل المحليات: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "الموقع"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "خادوم"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "اسم مضي٠خادوم الموقع."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "المسار"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "مسار الموقع"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "مسار المحليات"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "مسار دليل المحليات"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "مسارات Ùاخرة"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "أأستخدم مسارات Ùاخره (يمكن قراءتها وتذكرها بسهوله أكبر)ØŸ"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "السمة"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "خادوم السمات"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "مسار السمات"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "دليل السمات"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ø£Ùتارات"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "خادوم الأÙتارات"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "مسار الأÙتارات"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "دليل الأÙتار."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "خلÙيات"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "خادوم الخلÙيات"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "مسار الخلÙيات"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "دليل الخلÙيات"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "أحيانًا"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "دائمًا"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "استخدم SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
-msgstr "خادم SSL"
+msgstr "SSL server"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "احÙظ المسارات"
@@ -2403,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 ""
@@ -2430,13 +2608,13 @@ 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 "الاسم الكامل"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "الصÙحه الرئيسية"
@@ -2458,8 +2636,8 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "الموقع"
@@ -2483,7 +2661,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2509,7 +2687,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تÙختر المنطقه الزمنيه."
@@ -2522,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 "Ø­ÙÙظت الإعدادات."
@@ -2551,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "كن أول من ÙŠÙرسل!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2602,7 +2781,7 @@ msgstr ""
"الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! "
"([اقرأ المزيد](%%doc.help%%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2637,7 +2816,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "سحابه الوسوم"
@@ -2773,8 +2952,7 @@ msgstr "عذرا، رمز دعوه غير صالح."
msgid "Registration successful"
msgstr "نجح التسجيل"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "سجّل"
@@ -2813,7 +2991,7 @@ msgid "Same as password above. Required."
msgstr "Ù†Ùس كلمه السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -2897,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 "اشترك"
@@ -2923,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "مكرر"
@@ -2941,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "الردود على %s"
+
+#: 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 "
@@ -2988,6 +3171,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -2996,106 +3193,148 @@ msgstr ""
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 "الجلسات"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "الإعدادات الأساسيه لموقع StatusNet هذا."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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 "يجب أن تكون مسجل الدخول لرؤيه تطبيق."
+msgstr "لازم تكون مسجل دخولك علشان تشو٠اى application."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "الاسم"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "المنظمة"
+msgstr "المنظمه"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr "اسمح بالمسار"
+msgstr "اسمح للURL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "إشعارات %s المÙÙضلة"
+
#: actions/showfavorites.php:132
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 "
@@ -3104,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 "
@@ -3114,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 "إنها إحدى وسائل مشاركه ما تحب."
@@ -3123,67 +3362,72 @@ msgstr "إنها إحدى وسائل مشاركه ما تحب."
msgid "%s group"
msgstr "مجموعه %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "مل٠المجموعه الشخصي"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3193,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."
@@ -3202,7 +3446,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3233,6 +3477,11 @@ msgstr "Ø­Ùذ٠الإشعار."
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s والأصدقاء, الصÙحه %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3258,25 +3507,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3285,7 +3534,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3293,7 +3542,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "تكرارات %s"
@@ -3307,201 +3556,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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صÙرًا."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
-msgstr "يجب أن تملك عنوان بريد إلكترونى صحيح."
+msgstr "لازم يكون عندك عنوان ايميل صالح."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
-msgstr "لغه غير معروÙÙ‡ \"%s\"."
+msgstr "لغه مش معروÙÙ‡ \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرÙًا."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكترونى للاتصال بموقعك"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقه الزمنيه المبدئية"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقه الزمنيه المبدئيه للموقع؛ ت‌ع‌م عاده."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "لغه الموقع المبدئية"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "مسارات"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "خادوم"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "اسم مضي٠خادوم الموقع."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "مسارات Ùاخرة"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "أأستخدم مسارات Ùاخره (يمكن قراءتها وتذكرها بسهوله أكبر)ØŸ"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Ù†Ùاذ"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "خاص"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "بالدعوه Ùقط"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Ù…Ùغلق"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "عطّل التسجيل الجديد."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "ÙÙ‰ مهمه Ù…Ùجدولة"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-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 ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "التكرار"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحرو٠ÙÙ‰ الإشعارات."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-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 "إعدادات الرسائل القصيرة"
+msgstr "تظبيطات الـSMS"
#: actions/smssettings.php:69
#, php-format
@@ -3530,7 +3718,7 @@ msgstr ""
#: actions/smssettings.php:138
msgid "SMS phone number"
-msgstr "رقم هات٠SMS"
+msgstr "نمرة تليÙون الـSMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3591,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: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 "Ù…Ùشترك"
@@ -3615,7 +3873,7 @@ msgstr "مشتركو %s"
#: actions/subscribers.php:52
#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "مشتركو %1$s, الصÙحه %2$d"
+msgstr "%1$s مشتركين, صÙحه %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
@@ -3652,7 +3910,7 @@ msgstr "اشتراكات %s"
#: actions/subscriptions.php:54
#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "اشتراكات%1$s, الصÙحه %2$d"
+msgstr "%1$s اشتراكات, صÙحه %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
@@ -3663,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 "
@@ -3673,30 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "الإشعارات الموسومه ب%s"
+
+#: 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 ""
@@ -3714,13 +3977,14 @@ msgstr ""
msgid "User profile"
msgstr "مل٠المستخدم الشخصي"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "صورة"
#: actions/tagother.php:141
msgid "Tag user"
-msgstr "اوسم المستخدم"
+msgstr "اعمل tag لليوزر"
#: actions/tagother.php:151
msgid ""
@@ -3745,7 +4009,7 @@ msgstr ""
msgid "No such tag."
msgstr "لا وسم كهذا."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3755,7 +4019,7 @@ msgstr "لم تمنع هذا المستخدم."
#: actions/unsandbox.php:72
msgid "User is not sandboxed."
-msgstr "المستخدم ليس ÙÙ‰ صندوق الرمل."
+msgstr "اليوزر مش ÙÙ‰ السبوره."
#: actions/unsilence.php:72
msgid "User is not silenced."
@@ -3769,18 +4033,20 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3842,26 +4108,6 @@ msgstr "الدعوات Ù…ÙÙعلة"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "الجلسات"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "تنقيح الجلسة"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "مكّن تنقيح Ù…Ùخرجات الجلسه."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr ""
@@ -3873,84 +4119,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "الرخصة"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "اقبل"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "اشترك بهذا المستخدم"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "ارÙض"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "ارÙض هذا الاشتراك"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "لا طلب استيثاق!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "رÙÙض الاشتراك"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -3969,24 +4215,35 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "استمتع بالنقانق!"
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
+
#: actions/usergroups.php:130
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"
-msgstr "ستاتس نت %s"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -3995,10 +4252,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "ستاتس نت"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4030,13 +4283,13 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "النسخة"
+msgstr "النسخه"
#: actions/version.php:197
msgid "Author(s)"
-msgstr "المؤلÙ(ون)"
+msgstr "المؤلÙ/ين"
#: classes/File.php:144
#, php-format
@@ -4057,20 +4310,25 @@ msgstr ""
#: classes/Group_member.php:41
msgid "Group join failed."
-msgstr "الانضمام للمجموعه Ùشل."
+msgstr "دخول الجروپ Ùشل."
#: classes/Group_member.php:53
msgid "Not part of group."
-msgstr "ليس جزءا من المجموعه."
+msgstr "مش جزء من الجروپ."
#: classes/Group_member.php:60
msgid "Group leave failed."
-msgstr "ترك المجموعه Ùشل."
+msgstr "الخروج من الجروپ Ùشل."
+
+#: classes/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."
@@ -4084,61 +4342,100 @@ msgstr "تعذّر إدراج الرساله."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
-#: classes/User.php:382
+#: 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 "غيّر إعدادات ملÙÙƒ الشخصي"
@@ -4176,124 +4473,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صÙحه غير Ù…Ùعنونة"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "الرئيسية"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "المل٠الشخصى ومسار الأصدقاء الزمني"
+#: 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:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "كونيكشونات (Connections)"
+
+#: lib/action.php:443
msgid "Connect"
msgstr "اتصل"
-#: lib/action.php:438
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ادعÙ"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "إداري"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "اخرج"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ادعÙ"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "مساعدة"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ù„Ùج"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "ابحث"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "مساعدة"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ابحث عن أشخاص أو نص"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصÙحة"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "مساعدة"
+
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئله المكررة"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4302,12 +4662,12 @@ msgstr ""
"**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4318,137 +4678,218 @@ msgstr ""
"المتوÙر تحت [رخصه غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصه محتوى الموقع"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "الرخصه."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1141
+#: 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 "التغييرات لهذه اللوحه غير مسموح بها."
+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 lib/adminpanelaction.php:327
+#. 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 "ضبط المسارات"
+
+#. 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 "ضبط التصميم"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ضبط المسارات"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "ضبط التصميم"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr ""
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "ص٠تطبيقك"
+msgstr "اوص٠الapplication بتاعتك"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "مسار المصدر"
+msgstr "Source URL"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
#: lib/applicationlist.php:154
msgid "Revoke"
-msgstr "اسحب"
+msgstr "بطّل"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4470,13 +4911,13 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "وسوم هذا المرÙÙ‚"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "تغيير كلمه السر Ùشل"
+msgstr "تغيير الپاسوورد Ùشل"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
-msgstr "تغيير كلمه السر غير مسموح به"
+msgstr "تغيير الپاسوورد مش مسموح"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
@@ -4497,7 +4938,7 @@ msgstr ""
#: lib/command.php:88
#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
+msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
@@ -4506,7 +4947,7 @@ msgstr ""
#: lib/command.php:99
#, php-format
msgid "Nudge sent to %s"
-msgstr "التنبيه تم إرساله إلى %s"
+msgstr "Nudge اتبعتت لـ %s"
#: lib/command.php:126
#, php-format
@@ -4521,7 +4962,7 @@ msgstr ""
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
msgid "Notice with that id does not exist"
-msgstr "الملاحظه بهذا الرقم غير موجودة"
+msgstr "الملاحظه بالـID ده مالهاش وجود"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
@@ -4534,12 +4975,12 @@ msgstr ""
#: lib/command.php:217
msgid "You are already a member of that group"
-msgstr "أنت بالÙعل عضو ÙÙ‰ هذه المجموعة"
+msgstr "انت اصلا عضو ÙÙ‰ الجروپ ده"
#: lib/command.php:231
#, php-format
msgid "Could not join user %s to group %s"
-msgstr "لم يمكن ضم المستخدم %s إلى المجموعه %s"
+msgstr "ما Ù†Ùعش يدخل اليوزر %s لجروپ %s"
#: lib/command.php:236
#, php-format
@@ -4549,12 +4990,12 @@ msgstr "%s انضم إلى مجموعه %s"
#: lib/command.php:275
#, php-format
msgid "Could not remove user %s to group %s"
-msgstr "لم يمكن إزاله المستخدم %s من المجموعه %s"
+msgstr "ما Ù†Ùعش يشيل اليوزر %s لجروپ %s"
#: lib/command.php:280
#, php-format
msgid "%s left group %s"
-msgstr "%s ترك المجموعه %s"
+msgstr "%s ساب الجروپ %s"
#: lib/command.php:309
#, php-format
@@ -4584,7 +5025,7 @@ msgstr ""
#: lib/command.php:367
#, php-format
msgid "Direct message to %s sent"
-msgstr "رساله مباشره إلى %s تم إرسالها"
+msgstr "رساله مباشره اتبعتت لـ %s"
#: lib/command.php:369
msgid "Error sending direct message."
@@ -4592,7 +5033,7 @@ msgstr ""
#: lib/command.php:413
msgid "Cannot repeat your own notice"
-msgstr "لا يمكنك تكرار ملاحظتك الخاصة"
+msgstr "الملاحظه بتاعتك مش ناÙعه تتكرر"
#: lib/command.php:418
msgid "Already repeated that notice"
@@ -4625,54 +5066,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] "لست مشتركًا بأحد."
@@ -4682,11 +5133,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] "لا أحد مشترك بك."
@@ -4696,11 +5147,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] "لست عضوًا ÙÙ‰ أى مجموعه."
@@ -4710,7 +5161,7 @@ msgstr[3] "أنت عضو ÙÙ‰ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4724,6 +5175,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"
@@ -4751,19 +5203,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -4781,7 +5233,7 @@ msgstr ""
#: lib/connectsettingsaction.php:120
msgid "Connections"
-msgstr "اتصالات"
+msgstr "كونيكشونات (Connections)"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
@@ -4860,6 +5312,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 ""
@@ -4949,35 +5406,35 @@ 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 "كيلوبايت"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
-msgstr "مصدر صندوق وارد غير معرو٠%d."
+msgstr "مصدر الـinbox مش معرو٠%d."
#: lib/joinform.php:114
msgid "Join"
@@ -5039,7 +5496,7 @@ msgstr ""
#: lib/mail.php:258
#, php-format
msgid "Bio: %s"
-msgstr "السيرة: %s"
+msgstr "عن Ù†Ùسك: %s"
#: lib/mail.php:286
#, php-format
@@ -5169,7 +5626,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 "من"
@@ -5192,7 +5649,7 @@ msgstr ""
#: lib/mailhandler.php:228
#, php-format
msgid "Unsupported message type: %s"
-msgstr "نوع رساله غير مدعوم: %s"
+msgstr "نوع رساله مش مدعوم: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
@@ -5234,7 +5691,7 @@ msgstr ""
#: lib/mediafile.php:201 lib/mediafile.php:237
msgid "Could not determine file's MIME type."
-msgstr "لم يمكن تحديد نوع MIME للملÙ."
+msgstr "مش ناÙع يتحدد نوع الـMIME بتاع الÙايل."
#: lib/mediafile.php:270
#, php-format
@@ -5258,6 +5715,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 "أرسل إشعارًا"
@@ -5277,11 +5740,11 @@ msgstr "أرÙÙ‚ ملÙًا"
#: lib/noticeform.php:212
msgid "Share my location"
-msgstr "شارك موقعى"
+msgstr "اعمل مشاركه لمكانى"
#: lib/noticeform.php:215
msgid "Do not share my location"
-msgstr "لا تشارك موقعي"
+msgstr "ما تعملش مشاركه لمكانى"
#: lib/noticeform.php:216
msgid ""
@@ -5289,48 +5752,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "ÙÙ‰ السياق"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "مكرر بواسطة"
+msgstr "متكرر من"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5362,11 +5825,7 @@ msgstr "خطأ أثناء إدراج المل٠الشخصى البعيد"
msgid "Duplicate notice"
msgstr "ضاع٠الإشعار"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "تعذّر إدراج اشتراك جديد."
@@ -5382,19 +5841,19 @@ msgstr "الردود"
msgid "Favorites"
msgstr "المÙضلات"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق الوارد"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "رسائلك الواردة"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "صندوق الصادر"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "رسائلك المÙرسلة"
@@ -5405,9 +5864,9 @@ msgstr ""
#: 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 "الاشتراكات"
@@ -5415,23 +5874,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 "كل المجموعات"
@@ -5471,6 +5930,15 @@ msgstr "كرر هذا الإشعار؟"
msgid "Repeat this notice"
msgstr "كرر هذا الإشعار"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5487,6 +5955,10 @@ msgstr "ابحث ÙÙ‰ الموقع"
msgid "Keyword(s)"
msgstr "الكلمات المÙتاحية"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ابحث"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ابحث ÙÙ‰ المساعدة"
@@ -5538,34 +6010,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"
@@ -5616,67 +6069,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
@@ -5690,7 +6159,7 @@ msgstr "%s ليس لونًا صحيحًا!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index e7bc79a13..71b22dd4f 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -9,23 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:06+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:34:58+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "ДоÑтъп"
+
+#. 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 "РегиÑтриране"
+
+#. 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 "ЧаÑтен"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Ðовите региÑтрации да Ñа Ñамо Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Само Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Изключване на новите региÑтрации."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Затворен"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Запазване наÑтройките за доÑтъп"
+
+#: 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
@@ -34,83 +94,92 @@ msgstr "ÐÑма такака Ñтраница."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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, Ñтраница %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:202
+#: 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."
@@ -120,22 +189,22 @@ msgstr "Бележки от %1$s и приÑтели в %2$s."
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Ðе е открит методът в API."
@@ -150,7 +219,7 @@ msgstr "Ðе е открит методът в API."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Този метод изиÑква заÑвка POST."
@@ -168,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 "ПотребителÑÑ‚ нÑма профил."
@@ -179,7 +249,7 @@ msgstr "Грешка при запазване на профила."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -193,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
@@ -302,16 +372,16 @@ msgstr "Ðе можете да Ñпрете да Ñледите Ñебе Ñи!"
msgid "Two user ids or screen_names must be supplied."
msgstr "ТрÑбва да Ñе дадат два идентификатора или имена на потребители."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Грешка при изтеглÑне на Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -319,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Опитайте друг пÑевдоним, този вече е зает."
+msgstr "ПÑевдонимът \"%s\" вече е зает. Опитайте друг."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
msgstr ""
@@ -385,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 "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
@@ -402,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 "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
@@ -422,98 +492,112 @@ msgstr "Групи на %s"
msgid "groups on %s"
msgstr "групи в %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Имаше проблем ÑÑŠÑ ÑеÑиÑта ви в Ñайта. МолÑ, опитайте отново!"
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Ðеправилно име или парола."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Грешка в наÑтройките на потребителÑ."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Ðеочаквано изпращане на форма."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Сметка"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "ПÑевдоним"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Парола"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Ð’Ñички"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -546,17 +630,17 @@ msgstr "Бележката е изтрита."
msgid "No status with that ID found."
msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентификатор."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Твърде дълга бележка. ТрÑбва да е най-много 140 знака."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Ðе е открито."
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -570,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"
@@ -607,27 +679,22 @@ msgstr "Общ поток на %s"
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Повторено от %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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."
@@ -644,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 "ÐÑма пÑевдоним."
@@ -657,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 "Ðватар"
@@ -675,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "ИзрÑзване"
@@ -706,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 ""
@@ -737,22 +803,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокиране на потребителÑ"
@@ -760,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 "Разблокиране на този потребител"
@@ -837,9 +908,8 @@ msgid "Couldn't delete email confirmation."
msgstr "Грешка при изтриване потвърждението по е-поща."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
-msgstr "Потвърждаване на адреÑа"
+msgstr "Потвърждаване на адреÑ"
#: actions/confirmaddress.php:159
#, php-format
@@ -851,16 +921,61 @@ 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 "За да редактирате група, Ñ‚Ñ€Ñбва да Ñте влезли."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Бележката нÑма профил"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "Ðе членувате в тази група."
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "ÐÑма такава бележка."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Да не Ñе изтрива бележката"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "Ðе Ñте влезли в ÑиÑтемата."
@@ -887,7 +1002,7 @@ msgstr "ÐаиÑтина ли иÑкате да изтриете тази бел
msgid "Do not delete this notice"
msgstr "Да не Ñе изтрива бележката"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Изтриване на бележката"
@@ -903,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 ""
@@ -1022,12 +1137,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "Запазване"
@@ -1043,35 +1159,27 @@ msgstr "Тази бележка не е отбелÑзана като любим
msgid "Add to favorites"
msgstr "ДобавÑне към любимите"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "ÐÑма такъв документ."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Други наÑтройки"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "За да редактирате група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Ðе членувате в тази група."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "ÐÑма такава бележка."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Имаше проблем ÑÑŠÑ ÑеÑиÑта ви в Ñайта."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1082,47 +1190,52 @@ msgstr "Използвайте тази бланка за Ñъздаване нÐ
msgid "Name is required."
msgstr "Същото като паролата по-горе. Задължително поле."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Пълното име е твърде дълго (макÑ. 255 знака)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Опитайте друг пÑевдоним, този вече е зает."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "ОпиÑание"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "ÐдреÑÑŠÑ‚ на личната Ñтраница не е правилен URL."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Името на меÑтоположението е твърде дълго (макÑ. 255 знака)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Грешка при обновÑване на групата."
@@ -1136,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 "ÐаÑтройки на е-поща"
@@ -1198,15 +1310,14 @@ msgstr ""
"Ñпам) за Ñъобщение Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Отказ"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "ÐдреÑи на е-поща"
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1281,7 +1392,7 @@ msgid "Cannot normalize that email address"
msgstr "Грешка при нормализиране адреÑа на е-пощата"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеправилен Ð°Ð´Ñ€ÐµÑ Ð½Ð° е-поща."
@@ -1293,7 +1404,7 @@ msgstr "Това и Ñега е адреÑÑŠÑ‚ на е-пощата ви."
msgid "That email address already belongs to another user."
msgstr "Тази е-поща вече Ñе използва от друг потребител."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Ðе може да Ñе вмъкне код за потвърждение."
@@ -1356,7 +1467,7 @@ msgstr "Тази бележка вече е отбелÑзана като люб
msgid "Disfavor favorite"
msgstr "Ðелюбимо"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "ПопулÑрни бележки"
@@ -1474,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
@@ -1503,7 +1633,7 @@ msgstr "ПотребителÑÑ‚ вече е блокиран за групатÐ
msgid "User is not a member of group."
msgstr "ПотребителÑÑ‚ не членува в групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Блокиране на потребителÑ"
@@ -1538,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокиране"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 "Групи"
@@ -1793,6 +1929,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Това не е вашиÑÑ‚ Jabber ID."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "ВходÑща ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1873,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"
@@ -1943,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"
@@ -1952,14 +2101,14 @@ 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
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s напуÑна групата %s"
+msgstr "%1$s напуÑна групата %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1974,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:460
-#: 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"
@@ -2012,21 +2160,21 @@ msgstr ""
"Влезте Ñ Ð¸Ð¼Ðµ и парола. ÐÑмате такива? [РегиÑтрирайте](%%action.register%%) "
"нова Ñметка или опитайте Ñ [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "ПотребителÑÑ‚ вече е блокиран за групата."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "За да редактирате групата, Ñ‚Ñ€Ñбва да Ñте й админиÑтратор."
@@ -2036,8 +2184,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "ÐÑма такава бележка."
#: actions/newapplication.php:64
#, fuzzy
@@ -2049,11 +2198,11 @@ msgstr "За да Ñъздавате група, Ñ‚Ñ€Ñбва да Ñте вле
msgid "Use this form to register a new application."
msgstr "Използвайте тази бланка за Ñъздаване на нова група."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Грешка при отбелÑзване като любима."
@@ -2185,29 +2334,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Ðе членувате в тази група."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2228,8 +2377,8 @@ msgstr "вид Ñъдържание "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "Ðеподдържан формат на данните"
@@ -2242,7 +2391,6 @@ msgid "Notice Search"
msgstr "ТърÑене на бележки"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Други наÑтройки"
@@ -2300,6 +2448,11 @@ msgstr "Ðевалидно Ñъдържание на бележка"
msgid "Login token expired."
msgstr "Влизане в Ñайта"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "ИзходÑща ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2371,7 +2524,8 @@ msgstr "Грешка при запазване на новата парола."
msgid "Password saved."
msgstr "Паролата е запиÑана."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пътища"
@@ -2379,133 +2533,147 @@ msgstr "Пътища"
msgid "Path and server settings for this StatusNet site."
msgstr "Пътища и Ñървърни наÑтройки за тази инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Страницата не е доÑтъпна във вида медиÑ, който приемате"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Сайт"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Сървър"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Път"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Път до Ñайта"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Кратки URL-адреÑи"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ðватари"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Сървър на аватара"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Път до аватара"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° аватара"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Фонове"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Сървър на фона"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Път до фона"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° фона"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикога"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "ПонÑкога"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Винаги"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Използване на SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Кога да Ñе използва SSL"
-#: actions/pathsadminpanel.php:308
-#, fuzzy
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-Ñървър"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Запазване на пътищата"
@@ -2532,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 ""
@@ -2559,13 +2727,13 @@ 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 "Пълно име"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Лична Ñтраница"
@@ -2587,8 +2755,8 @@ msgid "Bio"
msgstr "За мен"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "МеÑтоположение"
@@ -2612,7 +2780,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Език"
@@ -2640,7 +2808,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "БиографиÑта е твърде дълга (до %d Ñимвола)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Ðе е избран чаÑови поÑÑ"
@@ -2653,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 "ÐаÑтройките Ñа запазени."
@@ -2683,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ð½Ð° Ð¾Ð±Ñ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾Ðº (Atom)"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2730,7 +2899,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2764,7 +2933,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2903,8 +3072,7 @@ msgstr "Грешка в кода за потвърждение."
msgid "Registration successful"
msgstr "ЗапиÑването е уÑпешно."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтриране"
@@ -2945,7 +3113,7 @@ msgid "Same as password above. Required."
msgstr "Същото като паролата по-горе. Задължително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-поща"
@@ -2973,7 +3141,7 @@ msgid ""
msgstr " оÑвен тези лични данни: парола, е-поща, меÑинджър, телефон."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -2990,9 +3158,9 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"ПоздравлениÑ, %s! И добре дошли в %%%%site.name%%%%! от тук можете да...\n"
+"ПоздравлениÑ, %1$s! И добре дошли в %%%%site.name%%%%! от тук можете да...\n"
"\n"
-"* Отидете в [профила Ñи](%s) и да публикувате първата Ñи бележка.\n"
+"* Отидете в [профила Ñи](%2$s) и да публикувате първата Ñи бележка.\n"
"* Добавите [Ð°Ð´Ñ€ÐµÑ Ð² Jabber/GTalk](%%%%action.imsettings%%%%), за да "
"изпращате бележки от програмата Ñи за моментни ÑъобщениÑ.\n"
"* [ТърÑите хора](%%%%action.peoplesearch%%%%), които познавате или Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ "
@@ -3050,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 "Ðбониране"
@@ -3088,7 +3256,7 @@ msgstr "Ðе можете да повтарÑте ÑобÑтвена бележÐ
msgid "You already repeated that notice."
msgstr "Вече Ñте повторили тази бележка."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3096,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Отговори до %1$s в %2$s!"
+
+#: 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 "
@@ -3143,6 +3316,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3153,118 +3340,158 @@ msgstr "Ðе може да изпращате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ този Ð
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 "СеÑии"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "ОÑновни наÑтройки на тази инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Управление на ÑеÑии"
+
+#: 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
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "За напуÑнете група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Бележката нÑма профил"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Икона"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "ПÑевдоним"
+msgstr "Име"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Страниране"
+msgstr "ОрганизациÑ"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "Ðвтор"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "ÐаиÑтина ли иÑкате да изтриете тази бележка?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Любими бележки на %1$s, Ñтраница %2$d"
+
#: actions/showfavorites.php:132
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 "
@@ -3272,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 "Така можете да Ñподелите какво хареÑвате."
@@ -3281,67 +3508,72 @@ msgstr "Така можете да Ñподелите какво хареÑваÑ
msgid "%s group"
msgstr "Група %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Членове на групата %s, Ñтраница %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профил на групата"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/showgroup.php:271 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:177
msgid "URL"
-msgstr ""
+msgstr "URL"
-#: actions/showgroup.php:274 actions/tagother.php:128
-#: actions/userauthorization.php:179 lib/userprofile.php:194
+#: 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 ""
+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."
@@ -3351,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."
@@ -3360,7 +3592,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -3391,6 +3623,11 @@ msgstr "Бележката е изтрита."
msgid " tagged %s"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, Ñтраница %2$d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3416,25 +3653,25 @@ msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF за %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3443,7 +3680,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3451,7 +3688,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Отговори на %s"
@@ -3465,202 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Името на Ñайта е задължително."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "ÐдреÑÑŠÑ‚ на е-поща за контакт е задължителен"
-#: actions/siteadminpanel.php:172
-#, fuzzy, php-format
+#: actions/siteadminpanel.php:159
+#, php-format
msgid "Unknown language \"%s\"."
-msgstr "Ðепознат език \"%s\""
+msgstr "Ðепознат език \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничение на текÑта е 140 знака."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Общи"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на Ñайта"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща за контакт ÑÑŠÑ Ñайта"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "МеÑтоположение"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑови поÑÑ Ð¿Ð¾ подразбиране"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑови поÑÑ Ð¿Ð¾ подразбиране за Ñайта (обикновено UTC)."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Език по подразбиране за Ñайта"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Сървър"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Кратки URL-адреÑи"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "ДоÑтъп"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "ЧаÑтен"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Само Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Ðовите региÑтрации да Ñа Ñамо Ñ Ð¿Ð¾ÐºÐ°Ð½Ð¸."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Затворен"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Изключване на новите региÑтрации."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "ОграничениÑ"
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:348
-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:353
-msgid "Frequency"
-msgstr "ЧеÑтота"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ðова бележка"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr "ОграничениÑ"
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ðово Ñъобщение"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Грешка при запиÑване наÑтройките за Twitter"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Ðова бележка"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Запазване наÑтройките на Ñайта"
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ðова бележка"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
msgstr "ÐаÑтройки за SMS"
@@ -3691,7 +3866,6 @@ msgid "Enter the code you received on your phone."
msgstr "Въведете кода, който получихте по телефона."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
msgstr "Телефонен номер за SMS"
@@ -3762,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 "Ðбониране"
@@ -3836,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 "
@@ -3846,30 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s, Ñтраница %d"
+
+#: 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"
@@ -3888,7 +4138,8 @@ msgstr "Етикети"
msgid "User profile"
msgstr "ПотребителÑки профил"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Снимка"
@@ -3920,7 +4171,7 @@ msgstr ""
msgid "No such tag."
msgstr "ÐÑма такъв етикет."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Методът в API вÑе още Ñе разработва."
@@ -3947,18 +4198,20 @@ msgstr "Сървърът не е върнал Ð°Ð´Ñ€ÐµÑ Ð½Ð° профила."
msgid "Unsubscribed"
msgstr "ОтпиÑване"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4024,26 +4277,6 @@ msgstr "Поканите Ñа включени"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "СеÑии"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Управление на ÑеÑии"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "ОдобрÑване на абонамента"
@@ -4058,37 +4291,37 @@ msgstr ""
"Проверете тези детайли и Ñе уверете, че иÑкате да Ñе абонирате за бележките "
"на този потребител. Ðко не иÑкате абонамента, натиÑнете \"Cancel\" (Отказ)."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Лиценз"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Приемане"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Ðбониране за този потребител"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "ОхвърлÑне"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Ðбонаменти на %s"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "ÐÑма заÑвка за одобрение."
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Ðбонаментът е одобрен"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4098,11 +4331,11 @@ msgstr ""
"Ðбонаментът е одобрен, но не е зададен callback URL. За да завършите "
"одобрÑването, проверете инÑтрукциите на Ñайта. ВашиÑÑ‚ token за абонамент е:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Ðбонаментът е отказан"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4112,37 +4345,37 @@ msgstr ""
"Ðбонаментът е отказан, но не е зададен callback URL. За да откажете напълно "
"абонамента, проверете инÑтрукциите на Ñайта."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Грешка при четене адреÑа на аватара '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Грешен вид изображение за '%s'"
@@ -4162,25 +4395,35 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+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
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "СтатиÑтики"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4189,11 +4432,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Бележката е изтрита."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4223,17 +4461,15 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "ПриÑтавки"
-#: actions/version.php:196 lib/action.php:741
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "СеÑии"
+msgstr "ВерÑиÑ"
#: actions/version.php:197
-#, fuzzy
msgid "Author(s)"
-msgstr "Ðвтор"
+msgstr "Ðвтор(и)"
#: classes/File.php:144
#, php-format
@@ -4267,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"
@@ -4285,28 +4526,28 @@ msgstr "Грешка при вмъкване на Ñъобщението."
msgid "Could not update message with new URI."
msgstr "Грешка при обновÑване на бележката Ñ Ð½Ð¾Ð² URL-адреÑ."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Грешка при запиÑване на бележката. Ðепознат потребител."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4315,38 +4556,80 @@ msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забранено ви е да публикувате бележки в този Ñайт."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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 "ПромÑна наÑтройките на профила"
@@ -4377,136 +4660,197 @@ 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:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Ðачало"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "Свързване"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Свързване към уÑлуги"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Свързване"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "ПромÑна наÑтройките на Ñайта"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Покани"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ÐаÑтройки"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Изход"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Покани"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Излизане от Ñайта"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Помощ"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Вход"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощ"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "ТърÑене"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помощ"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ТърÑене за хора или бележки"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Ðова бележка"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Ðбонаменти"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помощ"
+
+#: lib/action.php:754
msgid "About"
msgstr "ОтноÑно"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "ВъпроÑи"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "УÑловиÑ"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПоверителноÑÑ‚"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Изходен код"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Табелка"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценз на програмата StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4515,12 +4859,12 @@ msgstr ""
"**%%site.name%%** е уÑлуга за микроблогване, предоÑтавена ви от [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е уÑлуга за микроблогване. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4531,138 +4875,220 @@ msgstr ""
"доÑтъпна под [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценз на Ñъдържанието"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Ð’Ñички "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "лиценз."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Страниране"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "След"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "ÐаÑтройка на пътищата"
+
+#. 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 "ÐаÑтройка на оформлението"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ÐаÑтройка на пътищата"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "ÐаÑтройка на оформлението"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Опишете групата или темата в до %d букви"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Опишете групата или темата"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Изходен код"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñтраница, блог или профил в друг Ñайт на групата"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñтраница, блог или профил в друг Ñайт на групата"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4691,12 +5117,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Паролата е запиÑана."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Паролата е запиÑана."
@@ -4851,80 +5277,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"
@@ -4938,6 +5373,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"
@@ -4965,19 +5401,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ðе е открит файл Ñ Ð½Ð°Ñтройки. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Влизане в Ñайта"
@@ -5079,6 +5515,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 "ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñтраница, блог или профил в друг Ñайт на групата"
@@ -5169,33 +5610,33 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Ðепознат език \"%s\""
@@ -5268,11 +5709,9 @@ msgstr ""
"Може да Ñмените адреÑа и наÑтройките за уведомÑване по е-поща на %8$s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr ""
-"БиографиÑ: %s\n"
-"\n"
+msgstr "БиографиÑ: %s"
#: lib/mail.php:286
#, php-format
@@ -5402,7 +5841,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 "от"
@@ -5492,6 +5931,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 "Изпращане на бележка"
@@ -5525,48 +5970,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑÑ‚"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено от"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ОтговарÑне на тази бележка"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Отговор"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Бележката е повторена."
@@ -5599,12 +6044,7 @@ msgstr "Грешка при вмъкване на отдалечен профиÐ
msgid "Duplicate notice"
msgstr "Изтриване на бележката"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "ПотребителÑÑ‚ е забранил да Ñе абонирате за него."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Грешка при добавÑне на нов абонамент."
@@ -5620,19 +6060,19 @@ msgstr "Отговори"
msgid "Favorites"
msgstr "Любими"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "ВходÑщи"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Получените от Ð²Ð°Ñ ÑъобщениÑ"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "ИзходÑщи"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Изпратените от Ð²Ð°Ñ ÑъобщениÑ"
@@ -5646,7 +6086,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 "Ðбонаменти"
@@ -5654,24 +6094,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 "Ð’Ñички групи"
@@ -5712,6 +6152,15 @@ msgstr "ПовтарÑне на тази бележка"
msgid "Repeat this notice"
msgstr "ПовтарÑне на тази бележка"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5731,6 +6180,10 @@ msgstr "ТърÑене"
msgid "Keyword(s)"
msgstr "Ключови думи"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ТърÑене"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5783,35 +6236,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
@@ -5865,67 +6297,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "преди около чаÑ"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d чаÑа"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "преди около меÑец"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "преди около %d меÑеца"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "преди около година"
@@ -5939,7 +6387,7 @@ msgstr "%s не е допуÑтим цвÑÑ‚!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s не е допуÑтим цвÑÑ‚! Използвайте 3 или 6 шеÑтнадеÑетични знака."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
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 ef08bf3f1..8a91dad60 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Catalan
#
+# Author@translatewiki.net: Aleator
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Toniher
# --
@@ -9,23 +10,88 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:10+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35: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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Accés"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Desa els paràmetres del lloc"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Registre"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
+
+#. 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."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Només invitació"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Inhabilita els nous registres."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Tancat"
+
+#. 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/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
@@ -34,51 +100,58 @@ msgstr "No existeix la pàgina."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -86,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:202
+#: 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!"
@@ -122,22 +197,22 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -153,7 +228,7 @@ msgstr "No s'ha trobat el mètode API!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Aquest mètode requereix POST."
@@ -172,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."
@@ -184,7 +260,7 @@ msgstr "No s'ha pogut guardar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -198,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
@@ -310,16 +386,16 @@ msgstr "No podeu suprimir els usuaris."
msgid "Two user ids or screen_names must be supplied."
msgstr "Dos ids d'usuari o screen_names has de ser substituïts."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "No s'ha pogut determinar l'usuari d'origen."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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."
@@ -327,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -393,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."
@@ -410,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."
@@ -430,23 +506,28 @@ msgstr "%s grups"
msgid "groups on %s"
msgstr "grups sobre %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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."
@@ -454,77 +535,86 @@ msgstr ""
"Sembla que hi ha hagut un problema amb la teva sessió. Prova-ho de nou, si "
"us plau."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Nom d'usuari o contrasenya invàlids."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Error en configurar l'usuari."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Hashtag de l'error de la base de dades:%s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Enviament de formulari inesperat."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Compte"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Sobrenom"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Contrasenya"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
#, fuzzy
msgid "Deny"
msgstr "Disseny"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Tot"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -559,17 +649,17 @@ msgstr "S'ha suprimit l'estat."
msgid "No status with that ID found."
msgstr "No s'ha trobat cap estatus amb la ID trobada."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Massa llarg. La longitud màxima és de %d caràcters."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "No s'ha trobat"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -583,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"
@@ -620,27 +698,22 @@ msgstr "%s línia temporal pública"
msgid "%s updates from everyone!"
msgstr "%s notificacions de tots!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repetit per %s"
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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!"
@@ -656,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."
@@ -669,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"
@@ -687,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -720,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."
@@ -751,22 +823,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Sí"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquejar aquest usuari"
@@ -774,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"
@@ -864,16 +941,61 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Heu d'iniciar una sessió per editar un grup."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Avís sense perfil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Ha ocorregut algun problema amb la teva sessió."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "No existeix aquest avís."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "No es pot esborrar la notificació."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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ó."
@@ -904,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Eliminar aquesta nota"
@@ -921,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"
@@ -1035,12 +1157,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1056,35 +1179,27 @@ msgstr "Aquesta notificació no és un favorit!"
msgid "Add to favorites"
msgstr "Afegeix als preferits"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "No existeix aquest document."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Altres opcions"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Heu d'iniciar una sessió per editar un grup."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "No sou un membre del grup."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "No existeix aquest avís."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Ha ocorregut algun problema amb la teva sessió."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1095,47 +1210,52 @@ msgstr "Utilitza aquest formulari per editar el grup."
msgid "Name is required."
msgstr "Igual a la contrasenya de dalt. Requerit."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "El teu nom és massa llarg (màx. 255 caràcters)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Aquest sobrenom ja existeix. Prova un altre. "
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Descripció"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "La pàgina personal no és un URL vàlid."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "La ubicació és massa llarga (màx. 255 caràcters)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "No s'ha pogut actualitzar el grup."
@@ -1149,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."
@@ -1210,8 +1330,8 @@ msgstr ""
"carpeta de spam!) per al missatge amb les instruccions."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancel·la"
@@ -1297,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adreça de correu electrònic no vàlida."
@@ -1309,7 +1429,7 @@ msgstr "Ja és la vostra adreça electrònica."
msgid "That email address already belongs to another user."
msgstr "L'adreça electrònica ja pertany a un altre usuari."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "No s'ha pogut inserir el codi de confirmació."
@@ -1371,7 +1491,7 @@ msgstr "Aquesta nota ja és favorita."
msgid "Disfavor favorite"
msgstr "Desfavoritar favorit"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Notificacions populars"
@@ -1486,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
@@ -1516,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloca l'usuari del grup"
@@ -1551,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."
@@ -1563,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloca"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Fes l'usuari un administrador del grup"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Fes-lo administrador"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1802,6 +1947,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Aquest no és el teu Jabber ID."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Safata d'entrada per %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1887,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"
@@ -1957,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"
@@ -1966,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"
@@ -1988,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inici de sessió"
@@ -2029,21 +2186,21 @@ msgstr ""
"tens un nom d'usuari? [Crea](%%action.register%%) un nou compte o prova "
"[OpenID] (%%action.openidlogin%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Només un administrador poc fer a un altre usuari administrador."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s ja és un administrador del grup «%s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "No s'ha pogut eliminar l'usuari %s del grup %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "No es pot fer %s un administrador del grup %s"
@@ -2053,8 +2210,9 @@ msgid "No current status"
msgstr "No té cap estatus ara mateix"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "No existeix aquest avís."
#: actions/newapplication.php:64
#, fuzzy
@@ -2066,11 +2224,11 @@ msgstr "Has d'haver entrat per crear un grup."
msgid "Use this form to register a new application."
msgstr "Utilitza aquest formulari per crear un nou grup."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "No s'han pogut crear els àlies."
@@ -2110,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"
@@ -2190,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"
@@ -2203,29 +2360,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
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:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2246,8 +2402,8 @@ msgstr "tipus de contingut "
msgid "Only "
msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2260,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."
@@ -2294,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
@@ -2318,6 +2472,11 @@ msgstr "El contingut de l'avís és invàlid"
msgid "Login token expired."
msgstr "Accedir al lloc"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Safata de sortida per %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2390,7 +2549,8 @@ msgstr "No es pot guardar la nova contrasenya."
msgid "Password saved."
msgstr "Contrasenya guardada."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camins"
@@ -2398,133 +2558,148 @@ msgstr "Camins"
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Aquesta pàgina no està disponible en "
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "No es pot escriure al directori de fons: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Lloc"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servidor"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Servidor central del lloc."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Camí"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Camí del lloc"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Tema"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Servidor dels temes"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Camí dels temes"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Directori de temes"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatars"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Servidor d'avatars"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Camí de l'avatar"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Directori d'avatars"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Fons"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Servidor de fons"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Camí dels fons"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Directori de fons"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "A vegades"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Sempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Utilitza l'SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Servidor SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Avís del lloc"
@@ -2552,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 ""
@@ -2582,13 +2757,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Pàgina personal"
@@ -2611,8 +2786,8 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Ubicació"
@@ -2638,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2666,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Franja horària no seleccionada."
@@ -2679,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."
@@ -2708,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Flux de canal públic (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Flux de canal públic (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Flux de canal públic (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2738,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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Sigueu el primer en escriure-hi!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2750,7 +2926,7 @@ msgstr ""
"Per què no [registreu un compte](%%action.register%%) i sou el primer en "
"escriure-hi!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2759,7 +2935,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2794,7 +2970,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Núvol d'etiquetes"
@@ -2936,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registre"
@@ -2979,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correu electrònic"
@@ -3085,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"
@@ -3128,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetit"
@@ -3136,28 +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:144
+#: 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: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 "
@@ -3166,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 "
@@ -3185,6 +3365,21 @@ 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"
+msgstr "S'ha suprimit l'estat."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3195,117 +3390,159 @@ 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:390
+msgid "Sessions"
+msgstr "Sessions"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "Paràmetres de disseny d'aquest lloc StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gestiona les sessions"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Depuració de la sessió"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Activa la sortida de depuració per a les sessions."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Desa els paràmetres del lloc"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Has d'haver entrat per a poder marxar d'un grup."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Avís sense perfil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nom"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Paginació"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Descripció"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadístiques"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "Autoria"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "N'estàs segur que vols eliminar aquesta notificació?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s's notes favorites"
+
#: actions/showfavorites.php:132
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 "
@@ -3313,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."
@@ -3322,67 +3559,72 @@ msgstr "És una forma de compartir allò que us agrada."
msgid "%s group"
msgstr "%s grup"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%s membre/s en el grup, pàgina %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil del grup"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3392,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."
@@ -3403,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"
@@ -3435,6 +3677,11 @@ msgstr "Notificació publicada"
msgid " tagged %s"
msgstr "Aviso etiquetats amb %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s perfils blocats, pàgina %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3460,27 +3707,27 @@ msgstr "Feed d'avisos de %s"
msgid "FOAF for %s"
msgstr "Safata de sortida per %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Aquesta és la línia temporal de %s i amics, però ningú hi ha enviat res "
"encara."
-#: actions/showstream.php:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3489,7 +3736,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3499,7 +3746,7 @@ msgstr ""
"**%s** té un compte a %%%%site.name%%%%, un servei de [microblogging](http://"
"ca.wikipedia.org/wiki/Microblogging) "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Repetició de %s"
@@ -3513,207 +3760,143 @@ 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:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, fuzzy, php-format
msgid "Unknown language \"%s\"."
msgstr "Llengua desconeguda «%s»"
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom del lloc"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adreça electrònica de contacte del vostre lloc"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fus horari per defecte"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fus horari per defecte del lloc; normalment UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Llengua per defecte del lloc"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Servidor"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Servidor central del lloc."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Accés"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privat"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Voleu prohibir als usuaris anònims (que no han iniciat cap sessió) "
-"visualitzar el lloc?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Només invitació"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Fes que el registre sigui només amb invitacions."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Tancat"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Inhabilita els nous registres."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Instantànies"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "En una tasca planificada"
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Instantànies de dades"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Freqüència"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Les instantànies s'enviaran a aquest URL"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Límits"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Límits del text"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Límit de duplicats"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Desa els paràmetres del lloc"
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Avís del lloc"
-#: actions/smssettings.php:58
+#: 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 "Configuració SMS"
+msgstr "Paràmetres de l'SMS"
#: actions/smssettings.php:69
#, php-format
@@ -3743,9 +3926,8 @@ msgid "Enter the code you received on your phone."
msgstr "Escriu el codi que has rebut en el teu telèfon mòbil."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
-msgstr "Número de telèfon pels SMS"
+msgstr "Número de telèfon per als SMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3815,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:107
+#, fuzzy
+msgid "No such profile."
+msgstr "No existeix el fitxer."
-#: actions/subscribe.php:69
+#: 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"
@@ -3891,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 "
@@ -3901,30 +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:86
+#: 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: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"
@@ -3943,7 +4201,8 @@ msgstr "Etiqueta %s"
msgid "User profile"
msgstr "Perfil de l'usuari"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -3980,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ó."
@@ -4005,18 +4264,20 @@ msgstr "No id en el perfil sol·licitat."
msgid "Unsubscribed"
msgstr "No subscrit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4078,26 +4339,6 @@ msgstr "S'han habilitat les invitacions"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessions"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Gestiona les sessions"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Depuració de la sessió"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Activa la sortida de depuració per a les sessions."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autoritzar subscripció"
@@ -4113,36 +4354,36 @@ msgstr ""
"subscriure't als avisos d'aquest usuari. Si no has demanat subscriure't als "
"avisos de ningú, clica \"Cancel·lar\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Llicència"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Accepta"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Subscriure's a aquest usuari"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Rebutja"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Rebutja la subscripció"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Cap petició d'autorització!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Subscripció autoritzada"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4153,11 +4394,11 @@ msgstr ""
"Llegeix de nou les instruccions per a saber com autoritzar la subscripció. "
"El teu identificador de subscripció és:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Subscripció rebutjada"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4167,37 +4408,37 @@ msgstr ""
"S'ha rebutjat la subscripció, però no s'ha enviat un URL de retorn. Llegeix "
"de nou les instruccions per a saber com rebutjar la subscripció completament."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "No es pot llegir l'URL de l'avatar '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipus d'imatge incorrecte per a '%s'"
@@ -4218,20 +4459,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Gaudiu de l'entrepà!"
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%s membre/s en el grup, pàgina %d"
+
#: actions/usergroups.php:130
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"
@@ -4244,11 +4496,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "S'ha suprimit l'estat."
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Col·laboració"
@@ -4280,7 +4527,7 @@ msgstr ""
msgid "Plugins"
msgstr "Connectors"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sessions"
@@ -4322,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"
@@ -4339,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:171
+#: 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:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema al guardar la notificació. Usuari desconegut."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4369,37 +4621,78 @@ msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Error de BD en inserir resposta: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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"
@@ -4438,125 +4731,187 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Pàgina sense titol"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegació primària del lloc"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Inici"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Connexió"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convida"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Finalitza la sessió"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convida"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inici de sessió"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajuda'm"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Cerca"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistes locals"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notificació pàgina"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegació del lloc secundària"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Quant a"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntes més freqüents"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privadesa"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Font"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacte"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Insígnia"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Llicència del programari StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4565,12 +4920,12 @@ msgstr ""
"**%%site.name%%** és un servei de microblogging de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** és un servei de microblogging."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4581,138 +4936,220 @@ msgstr ""
"%s, disponible sota la [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Llicència de contingut del lloc"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Tot "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "llicència."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginació"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriors"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuració dels camins"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Configuració del disseny"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Descriu el grup amb 140 caràcters"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Descriu el grup amb 140 caràcters"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Font"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL del teu web, blog del grup u tema"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL del teu web, blog del grup u tema"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4741,11 +5178,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr "Etiquetes de l'adjunció"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "El canvi de contrasenya ha fallat"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Contrasenya canviada."
@@ -4899,82 +5336,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] "No sou un membre del grup."
-msgstr[1] "No sou un membre del grup."
+msgstr[0] "Sou un membre d'aquest grup:"
+msgstr[1] "Sou un membre d'aquests grups:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4988,6 +5434,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 +5462,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "No s'ha trobat cap fitxer de configuració. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Vés a l'instal·lador."
@@ -5044,13 +5491,12 @@ msgid "Updates by SMS"
msgstr "Actualitzacions per SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Connexió"
+msgstr "Connexions"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Aplicacions de connexió autoritzades"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5111,9 +5557,8 @@ msgid "All"
msgstr "Tot"
#: lib/galleryaction.php:139
-#, fuzzy
msgid "Select tag to filter"
-msgstr "Selecciona un transport"
+msgstr "Seleccioneu l'etiqueta per filtrar"
#: lib/galleryaction.php:140
msgid "Tag"
@@ -5127,19 +5572,23 @@ 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"
#: lib/groupeditform.php:168
-#, fuzzy
msgid "Describe the group or topic"
-msgstr "Descriu el grup amb 140 caràcters"
+msgstr "Descriviu el grup o el tema"
#: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr "Descriu el grup amb 140 caràcters"
+msgstr "Descriviu el grup o el tema en %d caràcters"
#: lib/groupeditform.php:179
msgid ""
@@ -5161,9 +5610,9 @@ msgid "Blocked"
msgstr "Blocat"
#: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked users"
-msgstr "Usuari bloquejat."
+msgstr "%susuaris blocats"
#: lib/groupnav.php:108
#, php-format
@@ -5180,9 +5629,9 @@ msgid "Add or edit %s logo"
msgstr "Afegir o editar logo %s"
#: lib/groupnav.php:120
-#, fuzzy, php-format
+#, php-format
msgid "Add or edit %s design"
-msgstr "Afegir o editar logo %s"
+msgstr "Afegeix o edita el disseny %s"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
@@ -5218,32 +5667,32 @@ 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 ""
+msgstr "MB"
-#: lib/imagefile.php:219
+#: lib/imagefile.php:253
msgid "kB"
-msgstr ""
+msgstr "kB"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Llengua desconeguda «%s»"
@@ -5454,7 +5903,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"
@@ -5544,6 +5993,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ó"
@@ -5577,49 +6032,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "en context"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetit per"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "respondre a aquesta nota"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Respon"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Notificació publicada"
@@ -5653,11 +6108,7 @@ msgstr "Error en inserir perfil remot"
msgid "Duplicate notice"
msgstr "Eliminar nota."
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Se us ha banejat la subscripció."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "No s'ha pogut inserir una nova subscripció."
@@ -5673,19 +6124,19 @@ msgstr "Respostes"
msgid "Favorites"
msgstr "Preferits"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Safata d'entrada"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Els teus missatges rebuts"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Safata de sortida"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Els teus missatges enviats"
@@ -5699,7 +6150,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"
@@ -5707,23 +6158,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"
@@ -5765,6 +6216,15 @@ msgstr "Repeteix l'avís"
msgid "Repeat this notice"
msgstr "Repeteix l'avís"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5783,6 +6243,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"
@@ -5834,35 +6298,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
@@ -5915,67 +6358,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fa un any"
@@ -5989,7 +6449,7 @@ msgstr "%s no és un color vàlid!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s no és un color vàlid! Feu servir 3 o 6 caràcters hexadecimals."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index 6fbec682b..8a8ccf6e6 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,24 +9,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:13+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:06+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Přijmout"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Nastavení"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Registrovat"
+
+#. 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í"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Žádný takový uživatel."
+
+#. 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/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
@@ -35,84 +100,93 @@ msgstr "Žádné takové oznámení."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -122,22 +196,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -153,7 +227,7 @@ msgstr "Potvrzující kód nebyl nalezen"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -172,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."
@@ -184,7 +259,7 @@ msgstr "Nelze uložit profil"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -198,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."
@@ -305,78 +380,78 @@ msgstr "Nelze aktualizovat uživatele"
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Nelze aktualizovat uživatele"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -388,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"
@@ -407,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"
@@ -427,99 +502,113 @@ msgstr ""
msgid "groups on %s"
msgstr ""
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Neplatné jméno nebo heslo"
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Chyba nastavení uživatele"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Chyba v DB při vkládání odpovědi: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "NeÄekaná forma submission."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "O nás"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Přezdívka"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Heslo"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
#, fuzzy
msgid "Deny"
msgstr "Vzhled"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -555,17 +644,17 @@ msgstr "Obrázek nahrán"
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr ""
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -580,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"
@@ -617,27 +694,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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"
@@ -655,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."
@@ -668,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"
@@ -685,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -717,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 ""
@@ -750,23 +821,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Ano"
-#: actions/block.php:144 actions/groupmembers.php:346 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"
@@ -774,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."
@@ -867,16 +943,61 @@ 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í"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Nelze aktualizovat uživatele"
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Sdělení nemá profil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Žádné takové oznámení."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Žádné takové oznámení."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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"
@@ -904,7 +1025,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Žádné takové oznámení."
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Odstranit toto oznámení"
@@ -922,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"
@@ -1042,12 +1163,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1063,34 +1185,26 @@ msgstr ""
msgid "Add to favorites"
msgstr "Přidat do oblíbených"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Žádný takový dokument."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Sdělení nemá profil"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Neodeslal jste nám profil"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Žádné takové oznámení."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1099,47 +1213,52 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Jméno je moc dlouhé (maximální délka je 255 znaků)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Přezdívku již někdo používá. Zkuste jinou"
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Odběry"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Stránka není platnou URL."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Umístění příliš dlouhé (maximálně 255 znaků)"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Nelze aktualizovat uživatele"
@@ -1153,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."
@@ -1213,8 +1332,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Zrušit"
@@ -1295,7 +1414,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Není platnou mailovou adresou."
@@ -1307,7 +1426,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Nelze vložit potvrzující kód"
@@ -1366,7 +1485,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1490,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
@@ -1521,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Žádný takový uživatel."
@@ -1557,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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"
@@ -1814,6 +1958,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Toto není váš Jabber"
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1890,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"
@@ -1934,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 ""
@@ -1943,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"
@@ -1966,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Přihlásit"
@@ -2003,21 +2159,21 @@ msgstr ""
"[Registrovat](%%action.register%%) nový úÄet, nebo vyzkouÅ¡ejte [OpenID](%%"
"action.openidlogin%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Uživatel nemá profil."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Nelze vytvořit OpenID z: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Uživatel nemá profil."
@@ -2027,8 +2183,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Žádné takové oznámení."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2038,11 +2195,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Nelze uložin informace o obrázku"
@@ -2171,29 +2328,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Neodeslal jste nám profil"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2215,8 +2372,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2287,6 +2444,11 @@ msgstr "Neplatný obsah sdělení"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2359,7 +2521,8 @@ msgstr "Nelze uložit nové heslo"
msgid "Password saved."
msgstr "Heslo uloženo"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2367,140 +2530,156 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Obnovit"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Nové sdělení"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Obrázek"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Nastavení"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Obrázek nahrán"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Obrázek nahrán"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Obnovit"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Sdělení"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Obnovit"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Nové sdělení"
@@ -2528,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 ""
@@ -2558,13 +2737,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Moje stránky"
@@ -2586,8 +2765,8 @@ msgid "Bio"
msgstr "O mÄ›"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Umístění"
@@ -2611,7 +2790,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Jazyk"
@@ -2637,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2650,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"
@@ -2681,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Veřejný Stream Feed"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2731,7 +2911,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2765,7 +2945,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2904,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrovat"
@@ -2944,7 +3123,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3035,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"
@@ -3076,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Vytvořit"
@@ -3086,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Odpovědi na %s"
+
+#: 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 "
@@ -3133,6 +3317,21 @@ 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"
+msgstr "Obrázek nahrán"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3143,117 +3342,158 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Nastavení"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Sdělení nemá profil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Přezdívka"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Umístění"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "Odběry"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiky"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s a přátelé"
+
#: actions/showfavorites.php:132
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 "
@@ -3261,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 ""
@@ -3270,70 +3510,75 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Všechny odběry"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Žádné takové oznámení."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3343,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."
@@ -3352,7 +3597,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3384,6 +3629,11 @@ msgstr "Sdělení"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s a přátelé"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3409,25 +3659,25 @@ msgstr "Feed sdělení pro %s"
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3436,7 +3686,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3444,7 +3694,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Odpovědi na %s"
@@ -3459,206 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Není platnou mailovou adresou."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Žádný registrovaný email pro tohoto uživatele."
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Umístění"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Obnovit"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Přijmout"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Soukromí"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "Žádný takový uživatel."
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
-
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-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:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Nastavení"
+msgid "Save site notice"
+msgstr "Nové sdělení"
#: actions/smssettings.php:58
#, fuzzy
@@ -3756,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"
@@ -3832,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 "
@@ -3842,31 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Mikroblog od %s"
+
+#: 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"
@@ -3886,7 +4142,8 @@ msgstr ""
msgid "User profile"
msgstr "Uživatel nemá profil."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3919,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 ""
@@ -3948,18 +4205,19 @@ msgstr "Nebylo vráceno žádné URL profilu od servu."
msgid "Unsubscribed"
msgstr "Odhlásit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php: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 ""
@@ -4024,26 +4282,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autorizovaný odběr"
@@ -4059,38 +4297,38 @@ msgstr ""
"sdělení tohoto uživatele. Pokud ne, ask to subscribe to somone's notices, "
"klikněte na \"Zrušit\""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licence"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Přijmout"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "Odběr autorizován"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Odmítnout"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Všechny odběry"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Žádné potvrení!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Odběr autorizován"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4101,11 +4339,11 @@ msgstr ""
"nápovědě jak správně postupovat při potvrzování odběru. Váš řetězec odběru "
"je:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Odběr odmítnut"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4115,37 +4353,37 @@ msgstr ""
"Odebírání bylo zamítnuto, ale neprošla žádná callback adresa. Zkontrolujte v "
"nápovědě jak správně postupovat při zamítání odběru"
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Nelze pÅ™eÄíst adresu obrázku '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Neplatný typ obrázku pro '%s'"
@@ -4165,20 +4403,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Všechny odběry"
+
#: actions/usergroups.php:130
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"
@@ -4191,11 +4440,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Obrázek nahrán"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4227,7 +4471,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Osobní"
@@ -4268,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"
@@ -4285,65 +4534,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: 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:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Chyba v DB při vkládání odpovědi: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 ""
@@ -4383,130 +4674,185 @@ msgstr "%1 statusů na %2"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Domů"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Osobní"
+
+#. 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:438
-msgid "Connect"
-msgstr "Připojit"
+msgstr "Změnit heslo"
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Odhlásit"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Neplatná velikost"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Nápověda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Přihlásit"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomoci mi!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Hledat"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Nápověda"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Nové sdělení"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Odběry"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Nápověda"
+
+#: lib/action.php:754
msgid "About"
msgstr "O nás"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Soukromí"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Zdroj"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4515,12 +4861,12 @@ msgstr ""
"**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** je služba mikroblogů."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4531,140 +4877,222 @@ msgstr ""
"dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Nové sdělení"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Novější"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Potvrzení emailové adresy"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Potvrzení emailové adresy"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Popiš sebe a své zájmy ve 140 znacích"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Popiš sebe a své zájmy ve 140 znacích"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Zdroj"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4693,12 +5121,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Heslo uloženo"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Heslo uloženo"
@@ -4854,86 +5282,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"
@@ -4947,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"
@@ -4974,20 +5413,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Žádný potvrzující kód."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5088,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"
@@ -5181,33 +5625,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5411,7 +5855,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 "
@@ -5503,6 +5947,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"
@@ -5537,51 +5987,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Žádný obsah!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Vytvořit"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "odpovÄ›Ä"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Sdělení"
@@ -5615,11 +6065,7 @@ msgstr "Chyba při vkládaní vzdáleného profilu"
msgid "Duplicate notice"
msgstr "Nové sdělení"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Nelze vložit odebírání"
@@ -5635,19 +6081,19 @@ msgstr "Odpovědi"
msgid "Favorites"
msgstr "Oblíbené"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5660,7 +6106,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"
@@ -5668,23 +6114,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 ""
@@ -5728,6 +6174,15 @@ msgstr "Odstranit toto oznámení"
msgid "Repeat this notice"
msgstr "Odstranit toto oznámení"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5746,6 +6201,10 @@ msgstr "Hledat"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Hledat"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5800,37 +6259,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"
@@ -5883,68 +6320,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "asi před rokem"
@@ -5958,7 +6410,7 @@ msgstr "Stránka není platnou URL."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index e1ea37636..5007074b7 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -3,6 +3,9 @@
# Author@translatewiki.net: Bavatar
# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
+# Author@translatewiki.net: McDutchie
+# Author@translatewiki.net: Michael
+# Author@translatewiki.net: Michi
# Author@translatewiki.net: Pill
# Author@translatewiki.net: Umherirrender
# --
@@ -12,23 +15,82 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:16+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:09+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Zugang"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Zugangseinstellungen speichern"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registrieren"
+
+#. 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
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Registrierung nur bei vorheriger Einladung erlauben."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Nur auf Einladung"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Neuregistrierungen deaktivieren."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Geschlossen"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Zugangs-Einstellungen speichern"
+
+#: actions/accessadminpanel.php:203
+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
@@ -37,51 +99,58 @@ msgstr "Seite nicht vorhanden"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -89,7 +158,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 "
@@ -98,17 +167,18 @@ msgstr ""
"Abonniere doch mehr Leute, [tritt einer Gruppe bei](%%action.groups%%) oder "
"poste selber etwas."
-#: actions/all.php:134
-#, fuzzy, php-format
+#. 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 ""
-"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
+"Du kannst [%1$s in seinem Profil einen Stups geben](../%2$s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -118,12 +188,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!"
@@ -133,22 +204,22 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -163,7 +234,7 @@ msgstr "API-Methode nicht gefunden."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Diese Methode benötigt ein POST."
@@ -181,8 +252,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."
@@ -192,7 +264,7 @@ msgstr "Konnte Profil nicht speichern."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -206,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."
@@ -311,15 +383,15 @@ msgstr "Du kannst dich nicht selbst entfolgen!"
msgid "Two user ids or screen_names must be supplied."
msgstr "Zwei IDs oder Benutzernamen müssen angegeben werden."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Konnte öffentlichen Stream nicht abrufen."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -327,63 +399,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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“"
+msgstr "Ungültiges Stichwort: „%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."
@@ -394,15 +466,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."
@@ -411,10 +483,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
@@ -431,100 +503,112 @@ msgstr "%s Gruppen"
msgid "groups on %s"
msgstr "Gruppen von %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Es gab ein Problem mit deinem Sitzungstoken. Bitte versuche es erneut."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Benutzername oder Passwort falsch."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Fehler bei den Nutzereinstellungen."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Unerwartete Formulareingabe."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Zugriff erlauben oder ablehnen"
+
+#: 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:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Nutzername"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Passwort"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr ""
+msgstr "Ablehnen"
-#: actions/apioauthauthorize.php:344
-#, fuzzy
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr "Alle"
+msgstr "Erlauben"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Zugang zu deinem Konto erlauben oder ablehnen"
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -555,18 +639,18 @@ msgstr "Status gelöscht."
msgid "No status with that ID found."
msgstr "Keine Nachricht mit dieser ID gefunden."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
"Das war zu lang. Die Länge einer Nachricht ist auf %d Zeichen beschränkt."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Nicht gefunden"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -582,23 +666,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"
@@ -619,27 +691,22 @@ msgstr "%s öffentliche Zeitleiste"
msgid "%s updates from everyone!"
msgstr "%s Nachrichten von allen!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Von %s wiederholt"
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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!"
@@ -655,8 +722,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."
@@ -668,7 +734,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"
@@ -686,30 +752,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -718,7 +784,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."
@@ -748,23 +814,27 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"Bist du sicher, dass du den Benutzer blockieren willst? Die Verbindung zum "
+"Benutzer wird gelöscht, dieser kann dich in Zukunft nicht mehr abonnieren "
+"und bekommt keine @-Antworten."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Diesen Benutzer blockieren"
@@ -772,39 +842,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"
@@ -861,16 +935,58 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Nachricht hat kein Profil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "Du bist Besitzer dieses Programms"
+
+#: 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 "Es gab ein Problem mit deinem Sessiontoken."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Programm entfernen"
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Diese Nachricht nicht löschen"
+
+#: actions/deleteapplication.php:160
+msgid "Delete this application"
+msgstr "Programm 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."
@@ -899,7 +1015,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Nachricht löschen"
@@ -915,20 +1031,22 @@ 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 ""
+"Bist du sicher, dass du den Benutzer löschen wisst? Alle Daten des Benutzers "
+"werden aus der Datenbank gelöscht (ohne ein Backup)."
-#: 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 ""
+msgstr "Design"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
@@ -995,7 +1113,7 @@ msgstr "Hintergrundbild ein- oder ausschalten."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Hintergrundbild kacheln"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -1019,7 +1137,7 @@ msgstr "Links"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Standardeinstellungen benutzen"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
@@ -1031,12 +1149,13 @@ msgstr "Standard wiederherstellen"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1052,87 +1171,74 @@ msgstr "Diese Nachricht ist kein Favorit!"
msgid "Add to favorites"
msgstr "Zu Favoriten hinzufügen"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Unbekanntes Dokument."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Unbekanntes Dokument \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+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."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Du bist kein Mitglied dieser Gruppe."
+msgstr "Du musst angemeldet sein, um eine Anwendung zu bearbeiten."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Unbekannte Nachricht."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Es gab ein Problem mit deinem Sessiontoken."
+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:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
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:165
-#, fuzzy
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Der Name wird bereits verwendet. Suche dir einen anderen aus."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Beschreibung"
+msgstr "Beschreibung ist erforderlich."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "Homepage ist zu lang."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
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:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Organisation ist erforderlich. (Pflichtangabe)"
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
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:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Homepage der Organisation ist erforderlich (Pflichtangabe)."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Antwort ist zu lang"
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Antwort URL ist nicht gültig"
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Konnte Gruppe nicht aktualisieren."
@@ -1146,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"
@@ -1207,15 +1312,14 @@ msgstr ""
"(auch den Spam-Ordner) auf eine Nachricht mit weiteren Instruktionen."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
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\""
@@ -1293,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ungültige E-Mail-Adresse."
@@ -1305,7 +1409,7 @@ msgstr "Dies ist bereits deine E-Mail-Adresse."
msgid "That email address already belongs to another user."
msgstr "Diese E-Mail-Adresse gehört einem anderen Nutzer."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Konnte keinen Bestätigungscode einfügen."
@@ -1367,7 +1471,7 @@ msgstr "Diese Nachricht ist bereits ein Favorit!"
msgid "Disfavor favorite"
msgstr "Aus Favoriten entfernen"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Beliebte Nachrichten"
@@ -1480,6 +1584,23 @@ msgstr "Datei nicht gefunden."
msgid "Cannot read file."
msgstr "Datei konnte nicht gelesen werden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ungültige Aufgabe"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Diese Aufgabe ist reserviert und kann nicht gesetzt werden"
+
+#: 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
+msgid "User already has this role."
+msgstr "Nutzer hat diese Aufgabe bereits"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1509,7 +1630,7 @@ msgstr "Dieser Nutzer ist bereits von der Gruppe gesperrt"
msgid "User is not a member of group."
msgstr "Nutzer ist kein Mitglied dieser Gruppe."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Benutzerzugang zu der Gruppe blockieren"
@@ -1534,7 +1655,6 @@ msgid "Database error blocking user from group."
msgstr "Datenbank Fehler beim Versuch den Nutzer aus der Gruppe zu blockieren."
#: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
msgstr "Keine ID"
@@ -1542,30 +1662,32 @@ 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 ""
+"Stelle ein wie die Gruppenseite aussehen soll. Hintergrundbild und "
+"Farbpalette frei wählbar."
-#: 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."
@@ -1573,63 +1695,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blockieren"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Benutzer zu einem Admin dieser Gruppe ernennen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Zum Admin ernennen"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1648,6 +1776,11 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"Finde und rede mit Gleichgesinnten in %%%%site.name%%%% Gruppen. Nachdem du "
+"einer Gruppe beigetreten bis kannst du mit \\\"!Gruppenname\\\" eine "
+"Nachricht an alle Gruppenmitglieder schicken. Du kannst nach einer [Gruppe "
+"suchen](%%%%action.groupsearch%%%%) oder deine eigene [Gruppe aufmachen!](%%%"
+"%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -1703,7 +1836,6 @@ msgid "Error removing the block."
msgstr "Fehler beim Freigeben des Benutzers."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
msgstr "IM-Einstellungen"
@@ -1800,6 +1932,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Dies ist nicht deine JabberID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Posteingang von %s - Seite %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1887,16 +2024,18 @@ 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
+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"
@@ -1956,23 +2095,27 @@ 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
-#, fuzzy, php-format
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Kein Benutzername oder ID"
+
+#: actions/joingroup.php:141
+#, php-format
msgid "%1$s joined group %2$s"
-msgstr "%s ist der Gruppe %s beigetreten"
+msgstr "%1$s ist der Gruppe %2$s beigetreten"
#: actions/leavegroup.php:60
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
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s hat die Gruppe %s verlassen"
+msgstr "%1$s hat die Gruppe %2$s verlassen"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1987,8 +2130,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Anmelden"
@@ -2025,21 +2167,21 @@ msgstr ""
"Melde dich mit Nutzernamen und Passwort an. Du hast noch keinen Nutzernamen? "
"[Registriere](%%action.register%%) ein neues Konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s ist bereits ein Administrator der Gruppe „%s“."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Konnte %s nicht zum Administrator der Gruppe %s machen"
@@ -2049,8 +2191,9 @@ msgid "No current status"
msgstr "Kein aktueller Status"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Unbekannte Nachricht."
#: actions/newapplication.php:64
#, fuzzy
@@ -2062,11 +2205,11 @@ msgstr "Du musst angemeldet sein, um eine Gruppe zu erstellen."
msgid "Use this form to register a new application."
msgstr "Benutzer dieses Formular, um eine neue Gruppe zu erstellen."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Quell-URL ist erforderlich."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Konnte keinen Favoriten erstellen."
@@ -2148,6 +2291,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Sei der erste der [zu diesem Thema etwas schreibt](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2182,47 +2327,44 @@ msgid "Nudge sent!"
msgstr "Stups gesendet!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
+msgstr "Du musst angemeldet sein, um deine Programm anzuzeigen"
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Sonstige Optionen"
+msgstr "OAuth-Anwendungen"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Registrierte Programme"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Du hast noch keine Programme registriert"
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Verbundene Programme"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "Du bist kein Mitglied dieser Gruppe."
+msgstr "Du bist kein Benutzer dieses Programms."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Kann Zugang dieses Programm nicht entfernen: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2241,10 +2383,10 @@ msgstr "Content-Typ "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Nur "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2257,7 +2399,6 @@ msgid "Notice Search"
msgstr "Nachrichtensuche"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Andere Einstellungen"
@@ -2267,7 +2408,7 @@ msgstr "Verwalte zahlreiche andere Einstellungen."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr "(kostenloser Dienst)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
@@ -2283,16 +2424,15 @@ 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)."
msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (max. 50 Zeichen)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "Keine Gruppe angegeben"
+msgstr "Keine Benutzer ID angegeben"
#: actions/otp.php:83
#, fuzzy
@@ -2314,6 +2454,11 @@ msgstr "Token ungültig oder abgelaufen."
msgid "Login token expired."
msgstr "An Seite anmelden"
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Postausgang für %1$s - Seite %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2385,142 +2530,156 @@ msgstr "Konnte neues Passwort nicht speichern"
msgid "Password saved."
msgstr "Passwort gespeichert."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
-msgstr ""
+msgstr "Pfad"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Theme-Verzeichnis nicht lesbar: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Avatar-Verzeichnis ist nicht beschreibbar: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Hintergrund Verzeichnis ist nicht beschreibbar: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
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:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Seite"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Server"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Server Name der Seite"
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Pfad"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Seitenpfad"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Schicke URLs."
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Schicke URLs (lesbarer und besser zu merken) verwenden?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
-msgstr ""
+msgstr "Motiv"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
-msgstr ""
+msgstr "Motiv-Server"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
-msgstr ""
+msgstr "Motiv-Pfad"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Theme-Verzeichnis"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatare"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Avatar-Server"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Avatarpfad"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Avatarverzeichnis"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
-msgstr ""
+msgstr "Hintergrundbilder"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
-msgstr ""
+msgstr "Server für Hintergrundbilder"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
-msgstr ""
+msgstr "Pfad zu den Hintergrundbildern"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Hintergrund Verzeichnis"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
-#, fuzzy
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
-msgstr "Wiederherstellung"
+msgstr "Nie"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Manchmal"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Immer"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "SSL verwenden"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Wann soll SSL verwendet werden"
-#: actions/pathsadminpanel.php:308
-#, fuzzy
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-Server"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Server an den SSL Anfragen gerichtet werden sollen"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Speicherpfade"
@@ -2544,20 +2703,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"
@@ -2579,13 +2738,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Homepage"
@@ -2608,8 +2767,8 @@ msgid "Bio"
msgstr "Biografie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Aufenthaltsort"
@@ -2620,22 +2779,22 @@ 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
#: lib/subscriptionlist.php:108 lib/userprofile.php:209
msgid "Tags"
-msgstr "Tags"
+msgstr "Stichwörter"
#: actions/profilesettings.php:147
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-"Tags über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas oder "
-"Leerzeichen getrennt"
+"Stichwörter über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas "
+"oder Leerzeichen getrennt"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Sprache"
@@ -2663,7 +2822,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Keine Zeitzone ausgewählt."
@@ -2674,77 +2833,81 @@ msgstr "Die eingegebene Sprache ist zu lang (maximal 50 Zeichen)"
#: actions/profilesettings.php:253 actions/tagother.php:178
#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Ungültiger Tag: „%s“"
+msgstr "Ungültiges Stichwort: „%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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed des öffentlichen Streams (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed des öffentlichen Streams (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Feed des öffentlichen Streams (Atom)"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
-msgstr ""
+msgstr "Sei der erste der etwas schreibt!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
+"Warum nicht ein [Benutzerkonto anlegen](%%action.register%%) und den ersten "
+"Beitrag abschicken!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2753,7 +2916,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2766,21 +2929,23 @@ msgstr ""
#: actions/publictagcloud.php:57
msgid "Public tag cloud"
-msgstr "Öffentliche Tag-Wolke"
+msgstr "Öffentliche Stichwort-Wolke"
#: actions/publictagcloud.php:63
#, php-format
msgid "These are most popular recent tags on %s "
-msgstr "Das sind die beliebtesten Tags auf %s "
+msgstr "Das sind die beliebtesten Stichwörter auf %s "
#: actions/publictagcloud.php:69
#, 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 Stichwort [hashtag](%%doc."
+"tags%%) gepostet."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "Sei der Erste der etwas schreibt!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2789,9 +2954,9 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
-msgstr "Tag-Wolke"
+msgstr "Stichwort-Wolke"
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
@@ -2833,11 +2998,11 @@ msgstr ""
#: actions/recoverpassword.php:188
msgid "Password recovery"
-msgstr ""
+msgstr "Password-Wiederherstellung"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Spitzname oder e-mail Adresse"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -2927,8 +3092,7 @@ msgstr "Entschuldigung, ungültiger Bestätigungscode."
msgid "Registration successful"
msgstr "Registrierung erfolgreich"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrieren"
@@ -2970,7 +3134,7 @@ msgid "Same as password above. Required."
msgstr "Gleiches Passwort wie zuvor. Pflichteingabe."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-Mail"
@@ -2990,7 +3154,7 @@ msgstr "Meine Texte und Daten sind verfügbar unter"
#: actions/register.php:496
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Namensnennung 3.0"
#: actions/register.php:497
msgid ""
@@ -3001,7 +3165,7 @@ msgstr ""
"Telefonnummer."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3079,7 +3243,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"
@@ -3101,58 +3265,56 @@ msgid "Couldn’t get a request token."
msgstr "Konnte keinen Anfrage-Token bekommen."
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Nur der Benutzer selbst kann seinen Posteingang lesen."
+msgstr "Nur angemeldete Nutzer können Nachrichten wiederholen."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "Kein Profil angegeben."
+msgstr "Keine Nachricht angegeen."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr ""
-"Du kannst dich nicht registrieren, wenn du die Lizenz nicht akzeptierst."
+msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Du hast diesen Benutzer bereits blockiert."
+msgstr "Nachricht bereits wiederholt"
-#: actions/repeat.php:114 lib/noticelist.php:629
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "Erstellt"
+msgstr "Wiederholt"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Erstellt"
+msgstr "Wiederholt!"
-#: 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:144
+#: 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: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 "
@@ -3161,20 +3323,20 @@ 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
-#, 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 ""
-"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
+"Du kannst [%1$s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
@@ -3183,6 +3345,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3193,118 +3369,159 @@ 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:390
+msgid "Sessions"
+msgstr "Sitzung"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "Design-Einstellungen für diese StatusNet-Website."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Sitzung verwalten"
+
+#: 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 "Site-Einstellungen speichern"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Nachricht hat kein Profil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Symbol"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "Nutzername"
+msgstr "Name"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Seitenerstellung"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Beschreibung"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiken"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "Autor"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%ss favorisierte Nachrichten"
+
#: actions/showfavorites.php:132
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 "
@@ -3312,76 +3529,81 @@ 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
msgid "%s group"
msgstr "%s Gruppe"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%s Gruppen-Mitglieder, Seite %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Gruppenprofil"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3391,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."
@@ -3404,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"
@@ -3435,6 +3657,11 @@ msgstr "Nachricht gelöscht."
msgid " tagged %s"
msgstr "Nachrichten, die mit %s getagt sind"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s blockierte Benutzerprofile, Seite %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3460,20 +3687,20 @@ msgstr "Feed der Nachrichten von %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF von %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
"gepostet."
-#: actions/showstream.php:196
+#: 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:198
+#: actions/showstream.php:207
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3483,7 +3710,7 @@ msgstr ""
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3492,7 +3719,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3503,226 +3730,150 @@ msgstr ""
"(http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der Freien "
"Software [StatusNet](http://status.net/). "
-#: actions/showstream.php:313
-#, fuzzy, php-format
+#: actions/showstream.php:305
+#, 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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "Der Seiten Name darf nicht leer sein."
-#: actions/siteadminpanel.php:154
-#, 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:172
-#, fuzzy, php-format
+#: actions/siteadminpanel.php:159
+#, php-format
msgid "Unknown language \"%s\"."
msgstr "Unbekannte Sprache „%s“"
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Minimale Textlänge ist 140 Zeichen."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
-msgstr ""
+msgstr "Allgemein"
-#: actions/siteadminpanel.php:256
-#, fuzzy
+#: actions/siteadminpanel.php:224
msgid "Site name"
-msgstr "Seitennachricht"
+msgstr "Seitenname"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakt-E-Mail-Adresse für Deine Site."
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale Ansichten"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
-msgstr ""
+msgstr "Standard Zeitzone"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Standard Zeitzone für die Seite (meistens UTC)."
-#: actions/siteadminpanel.php:295
-#, fuzzy
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Bevorzugte Sprache"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Wiederherstellung"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Schicke URLs."
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Schicke URLs (lesbarer und besser zu merken) verwenden?"
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Akzeptieren"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Privatsphäre"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "Einladen"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-#, fuzzy
-msgid "Closed"
-msgstr "Blockieren"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Limit"
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr "Textlimit"
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frequenz"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr "Maximale Anzahl von Zeichen pro Nachricht"
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
+msgstr "Wiederholungslimit"
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+"Wie lange muss ein Benutzer warten bis er eine identische Nachricht "
+"abschicken kann (in Sekunden)."
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Seitenbenachrichtigung"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Neue Nachricht"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Konnte Seitenbenachrichtigung nicht speichern"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Maximale Länge von Systembenachrichtigungen ist 255 Zeichen"
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Seitenbenachrichtigung"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Systembenachrichtigung (max. 255 Zeichen; HTML erlaubt)"
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Site-Einstellungen speichern"
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Seitennachricht"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
msgstr "SMS-Einstellungen"
@@ -3752,7 +3903,6 @@ msgid "Enter the code you received on your phone."
msgstr "Gib den Code ein, den du auf deinem Handy via SMS bekommen hast."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
msgstr "SMS-Telefonnummer"
@@ -3785,7 +3935,6 @@ msgid "That phone number already belongs to another user."
msgstr "Diese Telefonnummer wird bereits von einem anderen Benutzer verwendet."
#: 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."
@@ -3824,19 +3973,88 @@ 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 "URL melden"
+
+#: 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 "Diese Aktion nimmt nur POST-Requests"
-#: actions/subscribe.php:69
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr "Profil nicht gefunden."
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr "Du hast dieses OMB 0.1 Profil nicht abonniert."
+
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonniert"
@@ -3846,9 +4064,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."
@@ -3887,9 +4105,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."
@@ -3900,7 +4118,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 "
@@ -3910,33 +4128,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:86
-#, fuzzy, php-format
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Mit %1$s gekennzeichnete Nachrichten, Seite %2$d"
+
+#: 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
@@ -3952,7 +4175,8 @@ msgstr "Tag %s"
msgid "User profile"
msgstr "Benutzerprofil"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -3965,8 +4189,8 @@ msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
msgstr ""
-"Tags für diesen Benutzer (Buchstaben, Nummer, -, ., und _), durch Komma oder "
-"Leerzeichen getrennt"
+"Stichwörter für diesen Benutzer (Buchstaben, Nummer, -, ., und _), durch "
+"Komma oder Leerzeichen getrennt"
#: actions/tagother.php:193
msgid ""
@@ -3977,7 +4201,7 @@ msgstr ""
#: actions/tagother.php:200
msgid "Could not save tags."
-msgstr "Konnte Tags nicht speichern."
+msgstr "Konnte Stichwörter nicht speichern."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
@@ -3987,9 +4211,9 @@ msgstr ""
#: actions/tagrss.php:35
msgid "No such tag."
-msgstr "Tag nicht vorhanden."
+msgstr "Stichwort nicht vorhanden."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-Methode im Aufbau."
@@ -4003,9 +4227,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."
@@ -4015,7 +4238,7 @@ msgstr "Keine Profil-ID in der Anfrage."
msgid "Unsubscribed"
msgstr "Abbestellt"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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’."
@@ -4023,27 +4246,28 @@ 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
+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:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Das Zeichenlimit der Biografie muss numerisch sein!"
#: 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:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Ungültiges Abonnement: '%1$s' ist kein Benutzer"
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -4064,57 +4288,31 @@ msgstr "Neue Nutzer"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Neue Benutzer empfangen"
#: 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:241
-#, fuzzy
msgid "Default subscription"
-msgstr "Alle Abonnements"
+msgstr "Standard Abonnement"
#: actions/useradminpanel.php:242
-#, fuzzy
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:251
-#, fuzzy
msgid "Invitations"
-msgstr "Einladung(en) verschickt"
+msgstr "Einladungen"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Einladung(en) verschickt"
+msgstr "Einladungen aktivieren"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr ""
-
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Ist es Nutzern erlaubt neue Nutzer einzuladen."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
@@ -4130,53 +4328,50 @@ msgstr ""
"dieses Nutzers abonnieren möchtest. Wenn du das nicht wolltest, klicke auf "
"„Abbrechen“."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Lizenz"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Akzeptieren"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
-#, fuzzy
msgid "Subscribe to this user"
msgstr "Abonniere diesen Benutzer"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Ablehnen"
-#: actions/userauthorization.php:212
-#, fuzzy
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
-msgstr "%s Abonnements"
+msgstr "Abonnement ablehnen"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Keine Bestätigungsanfrage!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Abonnement autorisiert"
-#: actions/userauthorization.php:249
-#, fuzzy
+#: 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 ""
-"Das Abonnement wurde bestätigt, aber es wurde keine Callback-URL "
-"zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
-"bestätigt werden. Dein Abonnement-Token ist:"
+"Das Abonnement wurde bestätigt, aber es wurde keine Antwort-URL angegeben. "
+"Lies nochmal die Anweisungen auf der Seite wie Abonnements bestätigt werden. "
+"Dein Abonnement-Token ist:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abonnement abgelehnt"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4187,37 +4382,37 @@ msgstr ""
"zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
"vollständig abgelehnt werden. Dein Abonnement-Token ist:"
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Konnte Avatar-URL nicht öffnen „%s“"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Falscher Bildtyp für „%s“"
@@ -4231,29 +4426,43 @@ msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Stelle ein wie deine Profilseite aussehen soll. Hintergrundbild und "
+"Farbpalette sind frei wählbar."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Hab Spaß!"
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s Gruppen, Seite %2$d"
#: actions/usergroups.php:130
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 ""
+"Versuche [Gruppen zu finden](%%action.groupsearch%%) und diesen beizutreten."
+
+#: 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
+#, php-format
msgid "StatusNet %s"
-msgstr "Statistiken"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4261,15 +4470,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
-
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Status gelöscht."
+"Die Seite wird mit %1$s Version %2$s betrieben. Copyright 2008-2010 "
+"StatusNet, Inc. und Mitarbeiter"
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Mitarbeiter"
#: actions/version.php:168
msgid ""
@@ -4278,6 +4484,10 @@ msgid ""
"Software Foundation, either version 3 of the License, or (at your option) "
"any later version. "
msgstr ""
+"StatusNet ist freie Software: Sie dürfen es weiter verteilen und/oder "
+"verändern unter Berücksichtigung der Regeln zur GNU General Public License "
+"wie veröffentlicht durch die Free Software Foundation, entweder Version 3 "
+"der Lizenz, oder jede höhere Version."
#: actions/version.php:174
msgid ""
@@ -4296,17 +4506,15 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Erweiterungen"
-#: actions/version.php:196 lib/action.php:741
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "Eigene"
+msgstr "Version"
#: actions/version.php:197
-#, fuzzy
msgid "Author(s)"
-msgstr "Autor"
+msgstr "Autor(en)"
#: classes/File.php:144
#, php-format
@@ -4326,19 +4534,20 @@ 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 "Gruppenprofil"
+msgstr "Konnte Gruppe nicht beitreten"
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Konnte Gruppe nicht aktualisieren."
+msgstr "Nicht Mitglied der Gruppe"
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Gruppenprofil"
+msgstr "Konnte Gruppe nicht verlassen"
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Konnte Gruppe nicht aktualisieren."
#: classes/Login_token.php:76
#, fuzzy, php-format
@@ -4346,9 +4555,8 @@ msgid "Could not create login token for %s"
msgstr "Konnte keinen Favoriten erstellen."
#: classes/Message.php:45
-#, fuzzy
msgid "You are banned from sending direct messages."
-msgstr "Fehler beim Senden der Nachricht"
+msgstr "Direktes senden von Nachrichten wurde blockiert"
#: classes/Message.php:61
msgid "Could not insert message."
@@ -4358,27 +4566,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4387,38 +4595,78 @@ msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Datenbankfehler beim Einfügen der Antwort: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:1441
-#, fuzzy, php-format
+#: classes/Notice.php:1459
+#, 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 "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/User.php:382
+#: 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"
@@ -4436,9 +4684,8 @@ msgid "Change email handling"
msgstr "Ändere die E-Mail-Verarbeitung"
#: lib/accountsettingsaction.php:124
-#, fuzzy
msgid "Design your profile"
-msgstr "Benutzerprofil"
+msgstr "Passe dein Profil an"
#: lib/accountsettingsaction.php:128
msgid "Other"
@@ -4449,135 +4696,181 @@ msgid "Other options"
msgstr "Sonstige Optionen"
#: 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 "Seite ohne Titel"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Hauptnavigation"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Startseite"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persönliches Profil und Freundes-Zeitleiste"
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Eigene"
+
+#. TRANS: Tooltip for main menu option "Account"
#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Ändere deine E-Mail, dein Avatar, Passwort, Profil"
+msgstr "Ändere deine E-Mail, Avatar, Passwort und Profil"
-#: lib/action.php:438
-msgid "Connect"
-msgstr "Verbinden"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Einladen"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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 "Lade Freunde und Kollegen ein dir auf %s zu folgen"
-#: lib/action.php:452
-msgid "Logout"
-msgstr "Abmelden"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Einladen"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Von der Seite abmelden"
-#: lib/action.php:457
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Abmelden"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Neues Konto erstellen"
-#: lib/action.php:460
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrieren"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Auf der Seite anmelden"
-#: lib/action.php:463 lib/action.php:726
-msgid "Help"
-msgstr "Hilfe"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Anmelden"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hilf mir!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Suchen"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hilfe"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Suche nach Leuten oder Text"
-#: lib/action.php:487
+#: lib/action.php:491
+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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale Ansichten"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Neue Nachricht"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Unternavigation"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hilfe"
+
+#: lib/action.php:754
msgid "About"
msgstr "Ãœber"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "AGB"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privatsphäre"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Quellcode"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Stups"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4586,12 +4879,12 @@ msgstr ""
"**%%site.name%%** ist ein Microbloggingdienst von [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ist ein Microbloggingdienst."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4602,140 +4895,216 @@ 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:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
-#, fuzzy
+#: lib/action.php:847
msgid "All "
msgstr "Alle "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "Lizenz."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Seitenerstellung"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Später"
-#: lib/action.php:1141
+#: 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
-#, fuzzy
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
-msgstr "Bestätigung der E-Mail-Adresse"
+msgstr "Basis Seiteneinstellungen"
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr "Seite"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS-Konfiguration"
-#: lib/adminpanelaction.php:322 lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Design"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
+msgid "User configuration"
+msgstr "Benutzereinstellung"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS-Konfiguration"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Sitzungseinstellungen"
+
+#. 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/applicationeditform.php:206
+#: 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 "Programm bearbeiten"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "Programmsymbol"
+
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Quellcode"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL der Homepage oder Blogs der Gruppe oder des Themas"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL der Homepage oder Blogs der Gruppe oder des Themas"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Browser"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Schreibgeschützt"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lese/Schreibzugriff"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4762,14 +5131,13 @@ msgstr "Nachrichten in denen dieser Anhang erscheint"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr "Tags für diesen Anhang"
+msgstr "Stichworte für diesen Anhang"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
-#, fuzzy
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "Passwort geändert"
+msgstr "Passwort konnte nicht geändert werden"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Passwort geändert"
@@ -4811,6 +5179,9 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Abonnements: %1$s\n"
+"Abonnenten: %2$s\n"
+"Mitteilungen: %3$s"
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
msgid "Notice with that id does not exist"
@@ -4919,81 +5290,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
+#, 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 kein Mitglied dieser Gruppe."
-msgstr[1] "Du bist kein Mitglied dieser Gruppe."
+msgstr[0] "Du bist Mitglied dieser Gruppe:"
+msgstr[1] "Du bist Mitglied dieser Gruppen:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5007,6 +5387,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"
@@ -5034,19 +5415,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Keine Konfigurationsdatei gefunden."
-#: lib/common.php:132
+#: 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:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Auf der Seite anmelden"
@@ -5089,7 +5470,7 @@ msgstr ""
#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "Standard Design wieder hergestellt."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
#, fuzzy
@@ -5107,19 +5488,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"
@@ -5127,7 +5508,7 @@ msgstr "Daten exportieren"
#: lib/galleryaction.php:121
msgid "Filter tags"
-msgstr "Tags filtern"
+msgstr "Stichworte filtern"
#: lib/galleryaction.php:131
msgid "All"
@@ -5140,17 +5521,22 @@ msgstr "Wähle einen Netzanbieter"
#: lib/galleryaction.php:140
msgid "Tag"
-msgstr "Tag"
+msgstr "Stichwort"
#: lib/galleryaction.php:141
#, fuzzy
msgid "Choose a tag to narrow list"
-msgstr "Wähle einen Tag, um die Liste einzuschränken"
+msgstr "Wähle ein Stichwort, um die Liste einzuschränken"
#: lib/galleryaction.php:143
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"
@@ -5186,12 +5572,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"
@@ -5200,14 +5586,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"
@@ -5218,9 +5604,9 @@ 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"
+msgstr "Stichworte in den Nachrichten der Gruppe %s"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
@@ -5243,32 +5629,32 @@ 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:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Unbekannte Sprache „%s“"
@@ -5282,14 +5668,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"
@@ -5357,11 +5741,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
@@ -5527,8 +5909,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"
@@ -5549,39 +5930,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."
@@ -5607,7 +5994,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"
@@ -5616,14 +6002,17 @@ msgid "To"
msgstr "An"
#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
msgid "Available characters"
msgstr "Verfügbare Zeichen"
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr "Senden"
+
#: lib/noticeform.php:160
-#, fuzzy
msgid "Send a notice"
-msgstr "Nachricht versenden"
+msgstr "Nachricht senden"
#: lib/noticeform.php:173
#, php-format
@@ -5632,21 +6021,19 @@ msgstr "Was ist los, %s?"
#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Anhängen"
#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Datei anhängen"
#: 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 ""
@@ -5654,53 +6041,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 ""
+msgstr "in"
-#: lib/noticelist.php:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "im Zusammenhang"
-#: lib/noticelist.php:556
-#, fuzzy
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Erstellt"
+msgstr "Wiederholt von"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Auf diese Nachricht antworten"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Antworten"
-#: lib/noticelist.php:628
-#, fuzzy
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Nachricht gelöscht."
+msgstr "Nachricht wiederholt"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5731,12 +6115,7 @@ msgstr "Fehler beim Einfügen des entfernten Profils"
msgid "Duplicate notice"
msgstr "Notiz löschen"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Konnte neues Abonnement nicht eintragen."
@@ -5752,33 +6131,33 @@ msgstr "Antworten"
msgid "Favorites"
msgstr "Favoriten"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Posteingang"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Deine eingehenden Nachrichten"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Postausgang"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
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"
+msgstr "Stichworte in %ss Nachrichten"
#: lib/plugin.php:114
#, fuzzy
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"
@@ -5786,23 +6165,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"
@@ -5825,35 +6204,40 @@ msgstr "Benutzer-Gruppen"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
-msgstr "Aktuelle Tags"
+msgstr "Aktuelle Stichworte"
#: lib/publicgroupnav.php:88
msgid "Featured"
-msgstr "Featured"
+msgstr "Beliebte Benutzer"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr "Beliebt"
+msgstr "Beliebte Beiträge"
#: 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/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"
@@ -5863,6 +6247,10 @@ msgstr "Site durchsuchen"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Suchen"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5893,14 +6281,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
@@ -5917,35 +6303,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
@@ -5967,19 +6332,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"
@@ -5999,67 +6362,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/util.php:875
+#: 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:1015
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "vor einem Jahr"
@@ -6073,7 +6453,8 @@ msgstr "%s ist keine gültige Farbe!"
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."
-#: scripts/xmppdaemon.php:301
-#, fuzzy, php-format
+#: lib/xmppmanager.php:402
+#, 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 91ea54305..34c193e29 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -9,23 +9,85 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:20+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:20+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "ΠÏόσβαση"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Ρυθμίσεις OpenID"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "ΠεÏιγÏαφή"
+
+#. 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 ""
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr ""
+
+#. 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/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 "Δεν υπάÏχει τέτοιο σελίδα."
+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
@@ -34,83 +96,92 @@ msgstr "Δεν υπάÏχει τέτοιο σελίδα."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -120,22 +191,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +222,7 @@ msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -170,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 ""
@@ -182,7 +254,7 @@ msgstr "Απέτυχε η αποθήκευση του Ï€Ïοφίλ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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."
@@ -210,7 +282,7 @@ msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
#: actions/apiblockcreate.php:105
msgid "You cannot block yourself!"
-msgstr "Δεν μποÏείτε να εμποδίσετε τον εαυτό σας!"
+msgstr "Δεν μποÏείτε να κάνετε φÏαγή στον εαυτό σας!"
#: actions/apiblockcreate.php:126
msgid "Block user failed."
@@ -302,78 +374,78 @@ msgstr "Δεν μποÏείτε να εμποδίσετε τον εαυτό σα
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -382,17 +454,17 @@ msgstr ""
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
msgid "Group not found!"
-msgstr "Ομάδα δεν βÏέθηκε!"
+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 "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
@@ -401,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 "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -421,96 +493,110 @@ msgstr ""
msgid "groups on %s"
msgstr "ομάδες του χÏήστη %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr ""
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "ΛογαÏιασμός"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Ψευδώνυμο"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Κωδικός"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -539,23 +625,23 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
#: actions/apistatusesshow.php:138
msgid "Status deleted."
-msgstr "Η κατάσταση διαγÏάφεται."
+msgstr "Η κατάσταση διεγÏάφη."
#: actions/apistatusesshow.php:144
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr ""
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -569,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"
@@ -606,27 +680,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ""
@@ -642,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 ""
@@ -655,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 ""
@@ -672,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -703,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 ""
@@ -736,23 +804,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Îαί"
+msgstr "Îαι"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -760,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 ""
@@ -850,16 +923,61 @@ 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 "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Ο κωδικός επιβεβαίωσης δεν βÏέθηκε."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "Δεν υπάÏχει τέτοιο σελίδα."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 ""
@@ -888,7 +1006,7 @@ msgstr "Είσαι σίγουÏος ότι θες να διαγÏάψεις αυ
msgid "Do not delete this notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -905,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 ""
@@ -1022,12 +1140,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 ""
@@ -1043,34 +1162,26 @@ msgstr ""
msgid "Add to favorites"
msgstr ""
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
msgstr ""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Δεν υπάÏχει τέτοιο σελίδα."
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Δεν υπάÏχει τέτοιο σελίδα."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1079,47 +1190,52 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Το ονοματεπώνυμο είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστο 255 χαÏακτ.)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Το ψευδώνυμο είναι ήδη σε χÏήση. Δοκιμάστε κάποιο άλλο."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "ΠεÏιγÏαφή"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Η αÏχική σελίδα δεν είναι έγκυÏο URL."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Η τοποθεσία είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î· (μέγιστο 255 χαÏακτ.)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -1133,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 ""
@@ -1196,8 +1312,8 @@ msgstr ""
"φάκελο spam!) για μήνυμα με πεÏαιτέÏω οδηγίες. "
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "ΑκÏÏωση"
@@ -1278,7 +1394,7 @@ msgid "Cannot normalize that email address"
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεÏθυνσης"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1290,7 +1406,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Απέτυχε η εισαγωγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï ÎµÏ€Î¹Î²ÎµÎ²Î±Î¯Ï‰ÏƒÎ·Ï‚."
@@ -1352,7 +1468,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr ""
@@ -1470,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
@@ -1499,7 +1633,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1531,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "ΔιαχειÏιστής"
-#: actions/groupmembers.php:473
+#: 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 ""
@@ -1778,6 +1918,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr ""
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1854,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"
@@ -1898,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 ""
@@ -1907,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 ""
@@ -1928,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ΣÏνδεση"
@@ -1967,21 +2118,21 @@ msgstr ""
"ακόμα; Κάντε [εγγÏαφή](%%action.register%%) για ένα νέο λογαÏιασμό ή "
"δοκιμάστε το [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -1991,8 +2142,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Δεν υπάÏχει τέτοιο σελίδα."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2002,11 +2154,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -2132,29 +2284,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Δεν είστε μέλος καμίας ομάδας."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2176,8 +2328,8 @@ msgstr "ΣÏνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2246,6 +2398,11 @@ msgstr "Μήνυμα"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2318,7 +2475,8 @@ msgstr "ΑδÏνατη η αποθήκευση του νέου κωδικοÏ"
msgid "Password saved."
msgstr "Ο κωδικός αποθηκεÏτηκε."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2326,138 +2484,154 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Η αÏχική σελίδα δεν είναι έγκυÏο URL."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "ΑποχώÏηση"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Ρυθμίσεις OpenID"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Ρυθμίσεις OpenID"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Ρυθμίσεις OpenID"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Ρυθμίσεις OpenID"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "ΑποχώÏηση"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr ""
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "ΑποχώÏηση"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr ""
@@ -2482,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 ""
@@ -2509,13 +2683,13 @@ 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 "Ονοματεπώνυμο"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "ΑÏχική σελίδα"
@@ -2538,8 +2712,8 @@ msgid "Bio"
msgstr "ΒιογÏαφικό"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Τοποθεσία"
@@ -2563,7 +2737,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2592,7 +2766,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Το βιογÏαφικό είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστο 140 χαÏακτ.)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2605,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 ""
@@ -2636,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Δημόσια Ïοή %s"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2684,7 +2859,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2717,7 +2892,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2855,8 +3030,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -2895,7 +3069,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3000,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 ""
@@ -3039,7 +3213,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "ΔημιουÏγία"
@@ -3049,42 +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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr ""
+
+#: 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 "
@@ -3096,6 +3275,20 @@ 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"
+msgstr "Η κατάσταση διαγÏάφεται."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -3104,115 +3297,157 @@ msgstr ""
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 ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Ρυθμίσεις OpenID"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Ψευδώνυμο"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "ΠÏοσκλήσεις"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "ΠεÏιγÏαφή"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Είσαι σίγουÏος ότι θες να διαγÏάψεις αυτό το μήνυμα;"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s και οι φίλοι του/της"
+
#: actions/showfavorites.php:132
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 "
@@ -3220,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 ""
@@ -3229,68 +3464,73 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3300,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."
@@ -3309,7 +3549,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ΔιαχειÏιστές"
@@ -3341,6 +3581,11 @@ msgstr "Ρυθμίσεις OpenID"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s και οι φίλοι του/της"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3366,25 +3611,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3393,7 +3638,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3401,7 +3646,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr ""
@@ -3415,200 +3660,133 @@ 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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεÏθυνσης"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Η διεÏθυνση του εισεÏχόμενου email αφαιÏέθηκε."
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Τοπικός"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "ΑποχώÏηση"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "ΠÏόσβαση"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr ""
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr ""
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr ""
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "ΔιαγÏαφή μηνÏματος"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "ΔιαγÏαφή μηνÏματος"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
+msgid "Save site notice"
msgstr "Ρυθμίσεις OpenID"
#: actions/smssettings.php:58
@@ -3709,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 ""
@@ -3782,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 "
@@ -3792,30 +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:86
+#: 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: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 ""
@@ -3833,7 +4086,8 @@ msgstr ""
msgid "User profile"
msgstr "ΠÏοφίλ χÏήστη"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3865,7 +4119,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Η μέθοδος του ΑΡΙ είναι υπό κατασκευή."
@@ -3890,18 +4144,19 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3967,26 +4222,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Εξουσιοδοτημένη συνδÏομή"
@@ -3998,85 +4233,85 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Αποδοχή"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Γίνε συνδÏομητής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… χÏήστη"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr ""
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr ""
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -4095,20 +4330,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
+
#: actions/usergroups.php:130
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"
@@ -4121,11 +4367,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Η κατάσταση διαγÏάφεται."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4157,7 +4398,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "ΠÏοσωπικά"
@@ -4198,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"
@@ -4215,62 +4461,102 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Σφάλμα βάσης δεδομένων κατά την εισαγωγή απάντησης: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr ""
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 "Αλλάξτε τις Ïυθμίσεις του Ï€Ïοφίλ σας"
@@ -4308,125 +4594,182 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "ΑÏχή"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "ΣÏνδεση"
+msgstr "Αλλάξτε τον κωδικό σας"
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Αδυναμία ανακατεÏθηνσης στο διακομιστή: %s"
-#: lib/action.php:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ΔιαχειÏιστής"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "ΑποσÏνδεση"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Μήνυμα"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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 "ΔημιουÏγία έναν λογαÏιασμοÏ"
+msgstr "ΔημιουÏγία ενός λογαÏιασμοÏ"
+
+#: lib/action.php:473
+#, fuzzy
+msgctxt "MENU"
+msgid "Register"
+msgstr "ΠεÏιγÏαφή"
-#: lib/action.php:460
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:463 lib/action.php:726
-msgid "Help"
-msgstr "Βοήθεια"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ΣÏνδεση"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Βοηθήστε με!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr ""
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Βοήθεια"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Βοήθεια"
+
+#: lib/action.php:754
msgid "About"
msgstr "ΠεÏί"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Συχνές εÏωτήσεις"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Επικοινωνία"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, fuzzy, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4435,13 +4778,13 @@ msgstr ""
"To **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου) που "
"έφεÏε κοντά σας το [%%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, fuzzy, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
"Το **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου). "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4449,134 +4792,215 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Επιβεβαίωση διεÏθυνσης email"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Επιβεβαίωση διεÏθυνσης email"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα μέχÏι %d χαÏακτήÏες"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr ""
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4604,12 +5028,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Ο κωδικός αποθηκεÏτηκε."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Ο κωδικός αποθηκεÏτηκε."
@@ -4761,82 +5185,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"
@@ -4850,6 +5284,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"
@@ -4877,20 +5312,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Ο κωδικός επιβεβαίωσης δεν βÏέθηκε."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4989,6 +5424,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 ""
@@ -5000,7 +5440,7 @@ msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα"
#: lib/groupeditform.php:170
#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα μέχÏι %d χαÏακτήÏες"
+msgstr "ΠεÏιγÏάψτε την ομάδα ή το θέμα χÏησιμοποιώντας μέχÏι %d χαÏακτήÏες"
#: lib/groupeditform.php:179
msgid ""
@@ -5078,33 +5518,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5301,7 +5741,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 "από"
@@ -5391,6 +5831,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 ""
@@ -5424,48 +5869,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Επαναλαμβάνεται από"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Ρυθμίσεις OpenID"
@@ -5499,11 +5944,7 @@ msgstr ""
msgid "Duplicate notice"
msgstr "ΔιαγÏαφή μηνÏματος"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Απέτυχε η εισαγωγή νέας συνδÏομής."
@@ -5519,19 +5960,19 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5544,7 +5985,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 ""
@@ -5552,23 +5993,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 ""
@@ -5610,6 +6051,15 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
msgid "Repeat this notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5627,6 +6077,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5679,35 +6133,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
@@ -5761,81 +6194,97 @@ 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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
#: lib/webcolor.php:82
#, php-format
msgid "%s is not a valid color!"
-msgstr "%s δεν είναι ένα έγκυÏο χÏώμα!"
+msgstr "Το %s δεν είναι ένα έγκυÏο χÏώμα!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index 11257ae75..d5bb03f3e 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,23 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:23+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Access"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Site access settings"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registration"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Private"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Make registration invitation only."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Invite only"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Disable new registrations."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Closed"
+
+#. 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/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
@@ -35,58 +94,65 @@ msgstr "No such page"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 blocked profiles, page %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 "
@@ -95,16 +161,17 @@ msgstr ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
-#: actions/all.php:134
-#, fuzzy, php-format
+#. 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 ""
-"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) 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:202
+#: 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 "
@@ -113,12 +180,13 @@ 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"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Updates from %1$s and friends on %2$s!"
@@ -128,22 +196,22 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API method not found."
@@ -158,7 +226,7 @@ msgstr "API method not found."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "This method requires a POST."
@@ -179,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."
@@ -191,7 +260,7 @@ msgstr "Couldn't save profile."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -207,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."
@@ -273,18 +342,16 @@ msgid "No status found with that ID."
msgstr "No status found with that ID."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite."
-msgstr "This status is already a favourite!"
+msgstr "This status is already a favourite."
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "Could not create favourite."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite."
-msgstr "That status is not a favourite!"
+msgstr "That status is not a favourite."
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -304,84 +371,83 @@ msgid "Could not unfollow user: User not found."
msgstr "Could not unfollow user: User not found."
#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
msgid "You cannot unfollow yourself."
-msgstr "You cannot unfollow yourself!"
+msgstr "You cannot unfollow yourself."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Two user ids or screen_names must be supplied."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Could not determine source user."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -392,27 +458,27 @@ 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
-#, fuzzy, php-format
+#: 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 %s to group %s."
+msgstr "Could not join user %1$s to group %2$s."
#: actions/apigroupleave.php:114
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
-#, 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 "Could not remove user %s to group %s."
+msgstr "Could not remove user %1$s to group %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -429,101 +495,114 @@ msgstr "%s groups"
msgid "groups on %s"
msgstr "groups on %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "No oauth_token parameter provided."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "There was a problem with your session token. Try again, please."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "Invalid username or password."
+msgstr "Invalid nickname / password!"
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Error setting user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "Database error deleting OAuth application user."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "DB error inserting hashtag: %s"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Database error inserting OAuth application user."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"The request token %s has been authorised. Please exchange it for an access "
+"token."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "The request token %s has been denied and revoked."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Unexpected form submission."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "An application would like to connect to your account"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Allow or deny access"
+
+#: 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 ""
+"The application <strong>%1$s</strong> by <strong>%2$s</strong> would like "
+"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
+"give access to your %4$s account to third parties you trust."
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Nickname"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Password"
-#: actions/apioauthauthorize.php:338
-#, fuzzy
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr "Design"
+msgstr "Deny"
-#: actions/apioauthauthorize.php:344
-#, fuzzy
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr "All"
+msgstr "Allow"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Allow or deny access to your account information."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -554,17 +633,17 @@ msgstr "Status deleted."
msgid "No status with that ID found."
msgstr "No status with that ID found."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "That's too long. Max notice size is %d chars."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Not found"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Max notice size is %d chars, including attachment URL."
@@ -574,26 +653,14 @@ msgid "Unsupported format."
msgstr "Unsupported format."
#: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favourites from %s"
-
-#: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s updates favourited 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 "%s timeline"
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Favourites from %2$s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
+#: actions/apitimelinefavorites.php:117
#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Updates from %1$s on %2$s!"
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s updates favourited by %2$s / %2$s."
#: actions/apitimelinementions.php:117
#, php-format
@@ -615,27 +682,22 @@ msgstr "%s public timeline"
msgid "%s updates from everyone!"
msgstr "%s updates from everyone!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repeated by %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
msgid "Repeated to %s"
msgstr "Repeated to %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repeats of %s"
-#: 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"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates tagged with %1$s on %2$s!"
@@ -651,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."
@@ -664,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"
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -712,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."
@@ -746,22 +807,23 @@ msgstr ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Yes"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Block this user"
@@ -769,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
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:100
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s blocked profiles, page %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"
@@ -844,9 +910,8 @@ msgid "Couldn't delete email confirmation."
msgstr "Couldn't delete e-mail confirmation."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
-msgstr "Confirm Address"
+msgstr "Confirm address"
#: actions/confirmaddress.php:159
#, php-format
@@ -858,16 +923,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "You must be logged in to delete an application."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Application not found."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "There was a problem with your session token."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Delete application"
+
+#: 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 ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Do not delete this application"
+
+#: actions/deleteapplication.php:160
+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."
@@ -896,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Delete this notice"
@@ -912,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."
@@ -920,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"
@@ -951,18 +1058,16 @@ msgid "Site logo"
msgstr "Site logo"
#: actions/designadminpanel.php:387
-#, fuzzy
msgid "Change theme"
-msgstr "Change"
+msgstr "Change theme"
#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Site theme"
#: actions/designadminpanel.php:405
-#, fuzzy
msgid "Theme for the site."
-msgstr "Logout from the site"
+msgstr "Theme for the site."
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
@@ -974,11 +1079,13 @@ msgid "Background"
msgstr "Background"
#: actions/designadminpanel.php:427
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "You can upload a logo image for your group."
+msgstr ""
+"You can upload a background image for the site. The maximum file size is %1"
+"$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -1001,14 +1108,12 @@ msgid "Change colours"
msgstr "Change colours"
#: actions/designadminpanel.php:510 lib/designsettings.php:191
-#, fuzzy
msgid "Content"
-msgstr "Connect"
+msgstr "Content"
#: actions/designadminpanel.php:523 lib/designsettings.php:204
-#, fuzzy
msgid "Sidebar"
-msgstr "Search"
+msgstr "Sidebar"
#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
@@ -1032,12 +1137,13 @@ msgstr "Reset back to default"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1053,89 +1159,75 @@ msgstr "This notice is not a favourite!"
msgid "Add to favorites"
msgstr "Add to favourites"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "No such document."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "No such document \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Edit Application"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "You must be logged in to create a group."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "You are not a member of this group."
+msgstr "You must be logged in to edit an application."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "No such notice."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "There was a problem with your session token."
+msgstr "No such application."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Use this form to edit the group."
+msgstr "Use this form to edit your application."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Same as password above. Required."
+msgstr "Name is required."
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Full name is too long (max 255 chars)."
+msgstr "Name is too long (max 255 chars)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
-#, fuzzy
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Name already in use. Try another one."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Description"
+msgstr "Description is required."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "Source URL is too long."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "Homepage is not a valid URL."
+msgstr "Source URL is not valid."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Organisation is required."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Location is too long (max 255 chars)."
+msgstr "Organisation is too long (max 255 chars)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Organisation homepage is required."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Callback is too long."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Callback URL is not valid."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "Could not update group."
+msgstr "Could not update application."
#: actions/editgroup.php:56
#, php-format
@@ -1146,37 +1238,35 @@ 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
-#, 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 "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:390
+#: 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."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
-msgstr "E-mail Settings"
+msgstr "E-mail settings"
#: actions/emailsettings.php:71
#, php-format
@@ -1207,15 +1297,14 @@ msgstr ""
"a message with further instructions."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancel"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "E-mail addresses"
+msgstr "E-mail address"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1289,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Not a valid e-mail address."
@@ -1301,7 +1390,7 @@ msgstr "That is already your e-mail address."
msgid "That email address already belongs to another user."
msgstr "That e-mail address already belongs to another user."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Couldn't insert confirmation code."
@@ -1362,7 +1451,7 @@ msgstr "This notice is already a favourite!"
msgid "Disfavor favorite"
msgstr "Disfavor favourite"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Popular notices"
@@ -1420,29 +1509,25 @@ msgid "Featured users, page %d"
msgstr "Featured users, page %d"
#: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
msgid "A selection of some great users on %s"
-msgstr "A selection of some of the great users on %s"
+msgstr "A selection of some great users on %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "No notice."
+msgstr "No notice ID."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
msgstr "No notice."
#: actions/file.php:42
-#, fuzzy
msgid "No attachments."
-msgstr "No such document."
+msgstr "No attachments."
#: actions/file.php:51
-#, fuzzy
msgid "No uploaded attachments."
-msgstr "No such document."
+msgstr "No uploaded attachments."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1469,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
@@ -1501,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."
@@ -1517,21 +1617,20 @@ msgstr "User is already blocked from group."
msgid "User is not a member of group."
msgstr "User is not a member of group."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
-#, 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
-#, fuzzy, php-format
+#, php-format
msgid ""
"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
-"Are you sure you want to block user \"%s\" from the group \"%s\"? They will "
-"be removed from the group, unable to post, and unable to subscribe to the "
-"group in the future."
+"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."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1546,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."
@@ -1568,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Block"
-#: actions/groupmembers.php:441
-#, 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:473
-#, fuzzy
+#: actions/groupmembers.php:482
msgid "Make Admin"
-msgstr "Admin"
+msgstr "Make admin"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1667,18 +1764,23 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"%%%%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"
+"%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
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
@@ -1687,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
@@ -1718,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
@@ -1749,9 +1849,8 @@ msgstr ""
"message with further instructions. (Did you add %s to your buddy list?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
-msgstr "I.M. Address"
+msgstr "IM address"
#: actions/imsettings.php:126
#, php-format
@@ -1812,6 +1911,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "That is not your Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Inbox for %1$s - page %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1892,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"
@@ -1962,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."
@@ -1989,12 +2100,10 @@ msgid "Incorrect username or password."
msgstr "Incorrect username or password."
#: actions/login.php:132 actions/otp.php:120
-#, fuzzy
msgid "Error setting user. You are probably not authorized."
-msgstr "You are not authorised."
+msgstr "Error setting user. You are probably not authorised."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Login"
@@ -2031,51 +2140,48 @@ msgstr ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
-#, fuzzy, php-format
+#: actions/makeadmin.php:96
+#, 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:132
-#, fuzzy, php-format
+#: actions/makeadmin.php:133
+#, 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:145
-#, fuzzy, php-format
+#: actions/makeadmin.php:146
+#, 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
-msgid "New application"
-msgstr ""
+msgid "New Application"
+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:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Source URL is required."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "Could not create aliases"
+msgstr "Could not create application."
#: actions/newgroup.php:53
msgid "New group"
@@ -2113,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"
@@ -2143,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
@@ -2153,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
@@ -2160,6 +2268,8 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"Why not [register an account](%%%%action.register%%%%) and be the first to "
+"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
#: actions/noticesearchrss.php:96
#, php-format
@@ -2186,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"
@@ -2204,29 +2312,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
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:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "You have not authorised any applications to use your account."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2240,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:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2262,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."
@@ -2276,16 +2381,15 @@ msgstr ""
#: actions/othersettings.php:116
msgid "Shorten URLs with"
-msgstr ""
+msgstr "Shorten URLs with"
#: actions/othersettings.php:117
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."
@@ -2296,29 +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
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Outbox for %1$s - page %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2390,7 +2494,8 @@ msgstr "Can't save new password."
msgid "Password saved."
msgstr "Password saved."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2398,138 +2503,147 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Theme directory not readable: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
-#, fuzzy
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
-msgstr "Invite"
+msgstr "Site"
+
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Server"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Site path"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
-#, fuzzy
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatars"
-#: actions/pathsadminpanel.php:257
-#, fuzzy
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
-msgstr "Avatar settings"
+msgstr "Avatar server"
-#: actions/pathsadminpanel.php:261
-#, fuzzy
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
-msgstr "Avatar updated."
+msgstr "Avatar path"
-#: actions/pathsadminpanel.php:265
-#, fuzzy
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
-msgstr "Avatar updated."
+msgstr "Avatar directory"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Never"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Sometimes"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
-#, fuzzy
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
-msgstr "Server"
+msgstr "SSL server"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Save paths"
@@ -2552,18 +2666,18 @@ 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
-#, fuzzy, php-format
+#: actions/postnotice.php:101
+#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr "Notice licence ‘%s’ is not compatible with site licence ‘%s’."
+msgstr "Notice licence ‘1%$s’ is not compatible with site licence ‘%2$s’."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2584,13 +2698,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Homepage"
@@ -2612,8 +2726,8 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Location"
@@ -2638,7 +2752,7 @@ msgid ""
msgstr ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Language"
@@ -2665,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Timezone not selected."
@@ -2678,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."
@@ -2708,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:151
-#, 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:155
-#, 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:159
-#, fuzzy
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
-msgstr "Public Stream Feed"
+msgstr "Public Stream Feed (Atom)"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2762,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2798,7 +2909,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Tag cloud"
@@ -2835,6 +2946,8 @@ msgid ""
"If you have forgotten or lost your password, you can get a new one sent to "
"the email address you have stored in your account."
msgstr ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the e-mail address you have stored in your account."
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
@@ -2846,7 +2959,7 @@ msgstr ""
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Nickname or e-mail address"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -2929,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Register"
@@ -2977,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -2998,16 +3109,15 @@ 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
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3024,18 +3134,18 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may "
+"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
"\n"
-"* Go to [your profile](%s) and post your first message.\n"
+"* Go to [your profile](%2$s) and post your first message.\n"
"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
"notices through instant messages.\n"
"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
-"share your interests. \n"
+"share your interests.  \n"
"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
-"others more about you. \n"
+"others more about you.  \n"
"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
-"missed. \n"
+"missed.  \n"
"\n"
"Thanks for signing up and we hope you enjoy using this service."
@@ -3063,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"
@@ -3084,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"
@@ -3093,99 +3202,111 @@ 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:629
-#, 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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Replies to %1$s, page %2$d"
+
+#: 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/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 "StatusNet"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "You cannot sandbox users on this site."
@@ -3194,125 +3315,168 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Session settings for this StatusNet site."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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 "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:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "Notice has no profile"
+msgstr "Application profile"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "Nickname"
+msgstr "Name"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Pagination"
+msgstr "Organization"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistics"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr ""
+msgstr "Authorise URL"
-#: actions/showapplication.php:268
+#: 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 "Are you sure you want to reset your consumer key and secret?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+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."
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 "
"they would add to their favorites :)"
msgstr ""
+"%s hasn't added any notices to his favourites yet. Post something "
+"interesting they would add to their favourites :)"
-#: actions/showfavorites.php:211
+#: 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 ""
+"%s hasn't added any notices to his favourites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favourites :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr ""
@@ -3321,67 +3485,72 @@ msgstr ""
msgid "%s group"
msgstr "%s group"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s group, page %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Group profile"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3390,9 +3559,14 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-#: actions/showgroup.php:454
-#, fuzzy, php-format
+#: 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 "
@@ -3400,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."
@@ -3434,53 +3609,57 @@ msgstr "Notice deleted."
msgid " tagged %s"
msgstr " tagged %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, 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
msgid "FOAF for %s"
msgstr "FOAF for %s"
-#: actions/showstream.php:191
-#, fuzzy, php-format
+#: actions/showstream.php:200
+#, 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:196
+#: 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:198
-#, fuzzy, php-format
+#: 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 ""
-"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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3489,7 +3668,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3500,221 +3679,154 @@ msgstr ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
-#: actions/showstream.php:313
-#, fuzzy, php-format
+#: actions/showstream.php:305
+#, 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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
-#, 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Minimum text limit is 140 characters."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Site name"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
-#, fuzzy
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
-msgstr "New e-mail address for posting to %s"
+msgstr "Contact e-mail address for your site"
-#: actions/siteadminpanel.php:277
-#, fuzzy
+#: actions/siteadminpanel.php:245
msgid "Local"
-msgstr "Local views"
+msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Default site language"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URLs"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Server"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Access"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Private"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Invite only"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Closed"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "New message"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Unable to save your design settings!"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Save site settings"
+#: 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
@@ -3743,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."
@@ -3765,7 +3875,6 @@ msgid "No phone number."
msgstr "No phone number."
#: actions/smssettings.php:311
-#, fuzzy
msgid "No carrier selected."
msgstr "No carrier selected."
@@ -3778,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."
@@ -3795,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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscribed"
@@ -3839,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."
@@ -3876,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."
@@ -3889,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 "
@@ -3899,38 +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:86
-#, fuzzy, php-format
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Notices tagged with %1$s, page %2$d"
+
+#: 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
@@ -3941,7 +4120,8 @@ msgstr "Tag %s"
msgid "User profile"
msgstr "User profile"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Photo"
@@ -3975,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."
@@ -4002,18 +4179,21 @@ msgstr "No profile id in request."
msgid "Unsubscribed"
msgstr "Unsubscribed"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
-#, 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 ""
@@ -4060,154 +4240,126 @@ msgid "Default subscription"
msgstr "Default subscription"
#: actions/useradminpanel.php:242
-#, fuzzy
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:251
-#, fuzzy
msgid "Invitations"
-msgstr "Invitation(s) sent"
+msgstr "Invitations"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Invitation(s) sent"
+msgstr "Invitations enabled"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
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:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "License"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Accept"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Subscribe to this user"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Reject"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Reject this subscription"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "No authorisation request!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Subscription authorised"
-#: actions/userauthorization.php:249
-#, fuzzy
+#: 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 ""
-"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:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Subscription rejected"
-#: actions/userauthorization.php:261
-#, fuzzy
+#: 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 ""
"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:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
-#, fuzzy, php-format
+#: actions/userauthorization.php:350
+#, 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:348
-#, fuzzy, php-format
+#: actions/userauthorization.php:355
+#, 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 ""
@@ -4219,25 +4371,35 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$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
@@ -4246,11 +4408,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Status deleted."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4262,6 +4419,10 @@ msgid ""
"Software Foundation, either version 3 of the License, or (at your option) "
"any later version. "
msgstr ""
+"StatusNet is free software: you can redistribute it and/or modify it under "
+"the terms of the GNU Affero General Public Licence as published by the Free "
+"Software Foundation, either version 3 of the Licence, or (at your option) "
+"any later version. "
#: actions/version.php:174
msgid ""
@@ -4270,6 +4431,10 @@ msgid ""
"FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License "
"for more details. "
msgstr ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public Licence "
+"for more details. "
#: actions/version.php:180
#, php-format
@@ -4277,15 +4442,16 @@ msgid ""
"You should have received a copy of the GNU Affero General Public License "
"along with this program. If not, see %s."
msgstr ""
+"You should have received a copy of the GNU Affero General Public Licence "
+"along with this program. If not, see %s."
#: actions/version.php:189
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "Personal"
+msgstr "Version"
#: actions/version.php:197
msgid "Author(s)"
@@ -4309,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."
@@ -4341,65 +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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "DB error inserting hashtag: %s"
-#: classes/Notice.php:225
-#, fuzzy
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
-msgstr "Problem saving notice."
+msgstr "Problem saving notice. Too long."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem saving notice. Unknown user."
-#: classes/Notice.php:234
+#: 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:240
-#, 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:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem saving notice."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "DB error inserting reply: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problem saving group inbox."
-#: classes/Notice.php:1441
-#, fuzzy, php-format
+#: classes/Notice.php:1459
+#, 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/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/User.php:382
+#: 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:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Could not create group."
-#: classes/User_group.php:409
+#: 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"
@@ -4429,134 +4631,195 @@ 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:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primary site navigation"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Home"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Connect"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invite"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Logout"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invite"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Help"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Login"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Search"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Help"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Local views"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Page notice"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secondary site navigation"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Help"
+
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "F.A.Q."
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet software licence"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4565,12 +4828,12 @@ msgstr ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is a microblogging service."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4581,148 +4844,215 @@ msgstr ""
"s, available under the [GNU Affero General Public Licence](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Site content license"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "After"
-#: lib/action.php:1141
+#: 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"
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+#, fuzzy
+msgctxt "MENU"
+msgid "Site"
+msgstr "Site"
-#: lib/adminpanelaction.php:317
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Design configuration"
-#: lib/adminpanelaction.php:322 lib/adminpanelaction.php:327
+#. 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 "User configuration"
+
+#. 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 "Access configuration"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
-msgstr "SMS confirmation"
+msgstr "Paths configuration"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Sessions configuration"
-#: lib/applicationeditform.php:186
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/applicationeditform.php:204
+#, 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:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "Describe the group or topic"
+msgstr "Describe your application"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "Source"
+msgstr "Source URL"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
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:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organisation responsible for this application"
-#: lib/applicationeditform.php:232
-#, fuzzy
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr "URL of the homepage or blog of the group or topic"
+msgstr "URL for the homepage of the organisation"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
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"
@@ -4733,9 +5063,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"
@@ -4745,15 +5074,13 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
-#, fuzzy
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "Password change"
+msgstr "Password changing failed"
-#: lib/authenticationplugin.php:229
-#, 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"
@@ -4794,9 +5121,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
@@ -4874,14 +5200,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
@@ -4901,83 +5226,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"
@@ -4991,6 +5322,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"
@@ -5018,19 +5350,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "No configuration file found"
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Go to the installer."
@@ -5047,9 +5379,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"
@@ -5060,15 +5391,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."
@@ -5130,6 +5460,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"
@@ -5220,32 +5555,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5318,11 +5653,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
@@ -5460,8 +5793,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"
@@ -5482,9 +5814,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."
@@ -5525,9 +5857,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
@@ -5551,6 +5882,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"
@@ -5569,14 +5905,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 ""
@@ -5584,53 +5918,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:556
-#, fuzzy
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Created"
+msgstr "Repeated by"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Reply to this notice"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Reply"
-#: lib/noticelist.php:628
-#, fuzzy
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Notice deleted."
+msgstr "Notice repeated"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5660,11 +5991,7 @@ msgstr "Error inserting remote profile."
msgid "Duplicate notice"
msgstr "Duplicate notice"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "You have been banned from subscribing."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Couldn't insert new subscription."
@@ -5680,19 +6007,19 @@ msgstr "Replies"
msgid "Favorites"
msgstr "Favourites"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Inbox"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Your incoming messages"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Outbox"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Your sent messages"
@@ -5702,11 +6029,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"
@@ -5714,30 +6040,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."
@@ -5764,14 +6089,21 @@ 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:671
+msgid "No single user defined for single-user mode."
+msgstr ""
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5782,14 +6114,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"
@@ -5841,35 +6176,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
@@ -5921,67 +6235,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "about a year ago"
@@ -5995,7 +6325,7 @@ msgstr "%s is not a valid colour!"
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."
-#: scripts/xmppdaemon.php:301
-#, fuzzy, php-format
+#: lib/xmppmanager.php:402
+#, 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 3afbc4e98..04e49bc11 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,23 +13,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:27+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:26+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Acceder"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Configuración de acceso de la web"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registro"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privado"
+
+#. 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."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Invitar sólo"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Inhabilitar nuevos registros."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Cerrado"
+
+#. 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/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
@@ -37,83 +98,100 @@ msgstr "No existe tal página"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 y amigos, página %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."
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 "
"something yourself."
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 "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
+"Trata de suscribirte a más personas, [unirte a un grupo] (%%action.groups%%) "
+"o publicar algo."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 ""
+"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"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
@@ -123,26 +201,25 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
-#, fuzzy
msgid "API method not found."
-msgstr "¡No se encontró el método de la API!"
+msgstr "Método de API no encontrado."
#: actions/apiaccountupdatedeliverydevice.php:85
#: actions/apiaccountupdateprofile.php:89
@@ -154,7 +231,7 @@ msgstr "¡No se encontró el método de la API!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requiere un POST."
@@ -163,9 +240,10 @@ msgid ""
"You must specify a parameter named 'device' with a value of one of: sms, im, "
"none"
msgstr ""
+"Tienes que especificar un parámetro llamdao 'dispositivo' con un valor a "
+"elegir entre: sms, im, ninguno"
#: actions/apiaccountupdatedeliverydevice.php:132
-#, fuzzy
msgid "Could not update user."
msgstr "No se pudo actualizar el usuario."
@@ -173,19 +251,19 @@ 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."
#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
msgid "Could not save profile."
msgstr "No se pudo guardar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -201,18 +279,16 @@ 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
msgid "Unable to save your design settings."
-msgstr "¡No se pudo guardar tu configuración de Twitter!"
+msgstr "No se pudo grabar tu configuración de diseño."
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
msgid "Could not update your design."
-msgstr "No se pudo actualizar el usuario."
+msgstr "No se pudo actualizar tu diseño."
#: actions/apiblockcreate.php:105
msgid "You cannot block yourself!"
@@ -251,9 +327,9 @@ msgid "No message text!"
msgstr "¡Sin texto de mensaje!"
#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max message size is %d chars."
-msgstr "Demasiado largo. Máximo 140 caracteres. "
+msgstr "Demasiado largo. Tamaño máx. de los mensajes es %d caracteres."
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
@@ -305,110 +381,109 @@ msgstr "No puedes dejar de seguirte a ti mismo."
msgid "Two user ids or screen_names must be supplied."
msgstr "Deben proveerse dos identificaciones de usuario o nombres en pantalla."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "No se pudo determinar el usuario fuente."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
msgstr ""
-"El apodo debe tener solamente letras minúsculas y números y no puede tener "
+"El usuario debe tener solamente letras minúsculas y números y no puede tener "
"espacios."
-#: actions/apigroupcreate.php:173 actions/editgroup.php:186
+#: actions/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 apodo ya existe. Prueba otro."
+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 "Apodo no válido"
+msgstr "Usuario inválido"
-#: actions/apigroupcreate.php:196 actions/editapplication.php:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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
-#, fuzzy, php-format
+#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Tag no válido: '%s' "
+msgstr "Alias inválido: \"%s\""
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "El apodo ya existe. Prueba otro."
+msgstr "El alias \"%s\" ya está en uso. Intenta usar otro."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "El alias no puede ser el mismo que el usuario."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
-#, fuzzy
msgid "Group not found!"
-msgstr "¡No se encontró el método de la API!"
+msgstr "¡No se ha encontrado el grupo!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: 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 ""
+msgstr "Has sido bloqueado de ese grupo por el administrador."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
-#, fuzzy, php-format
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
+#, php-format
msgid "Could not join user %1$s to group %2$s."
-msgstr "No se puede unir usuario %s a grupo %s"
+msgstr "No se pudo unir el usuario %s al grupo %s"
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
msgstr "No eres miembro de este grupo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
-#, fuzzy, php-format
+#: 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 a usuario %s de grupo %s"
+msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -425,101 +500,117 @@ msgstr "Grupos %s"
msgid "groups on %s"
msgstr "Grupos en %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "No se ha provisto de un parámetro oauth_token."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
"Hubo un problema con tu clave de sesión. Por favor, intenta nuevamente."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "Usuario o contraseña inválidos."
+msgstr "¡Apodo o contraseña inválidos!"
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Error al configurar el usuario."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr ""
+"Error de la base de datos durante la eliminación del usuario de la "
+"aplicación OAuth."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "Error de la BD al insertar la etiqueta clave: %s"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Error de base de datos al insertar usuario de la aplicación OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"El token de solicitud %s ha sido autorizado. Por favor, cámbialo por un "
+"token de acceso."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "El token de solicitud %2 ha sido denegado y revocado."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Envío de formulario inesperado."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Una aplicación quisiera conectarse a tu cuenta"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Permitir o denegar el acceso"
+
+#: 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 ""
+"La aplicación <strong>%1$s</strong> por <strong>%2$s</strong> solicita "
+"permiso para <strong>%3$s</strong> la información de tu cuenta %4$s. Sólo "
+"debes dar acceso a tu cuenta %4$s a terceras partes en las que confíes."
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Cuenta"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Apodo"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Contraseña"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr ""
+msgstr "Denegar"
-#: actions/apioauthauthorize.php:344
-#, fuzzy
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr "Todo"
+msgstr "Permitir"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Permitir o denegar el acceso a la información de tu cuenta."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -535,14 +626,12 @@ msgid "No such notice."
msgstr "No existe ese aviso."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "No se puede activar notificación."
+msgstr "No puedes repetir tus propias notificaciones."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Borrar este aviso"
+msgstr "Esta notificación ya se ha repetido."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -552,51 +641,41 @@ msgstr "Status borrado."
msgid "No status with that ID found."
msgstr "No hay estado para ese ID"
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max notice size is %d chars."
-msgstr "Demasiado largo. La longitud máxima es de 140 caracteres. "
+msgstr "La entrada es muy larga. El tamaño máximo es de %d caracteres."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "No encontrado"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
+"El tamaño máximo de la notificación es %d caracteres, incluyendo el URL "
+"adjunto."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
msgid "Unsupported format."
msgstr "Formato no soportado."
#: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favoritos desde %s"
-
-#: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s actualizaciones favoritas por %s / %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"
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Favoritos de %2$s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
+#: actions/apitimelinefavorites.php:117
#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
#: actions/apitimelinementions.php:117
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Actualizaciones en respuesta a %2$s"
+msgstr "%1$s / Actualizaciones que mencionan %2$s"
#: actions/apitimelinementions.php:127
#, php-format
@@ -613,46 +692,38 @@ msgstr "línea temporal pública de %s"
msgid "%s updates from everyone!"
msgstr "¡Actualizaciones de todos en %s!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Respuestas a %s"
+msgstr "Repetido a %s"
-#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#: actions/apitimelineretweetsofme.php:114
+#, php-format
msgid "Repeats of %s"
-msgstr "Respuestas a %s"
+msgstr "Repeticiones de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:66
+#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Avisos marcados con %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
-#, fuzzy, php-format
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#, php-format
msgid "Updates tagged with %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "Actualizaciones etiquetadas con %1$s en %2$s!"
#: actions/apiusershow.php:96
-#, fuzzy
msgid "Not found."
-msgstr "No se encontró."
+msgstr "No encontrado."
#: actions/attachment.php:73
-#, fuzzy
msgid "No such attachment."
-msgstr "No existe ese documento."
+msgstr "No existe tal archivo adjunto."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: 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."
@@ -664,15 +735,15 @@ 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"
#: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Puedes cargar tu avatar personal."
+msgstr "Puedes subir tu imagen personal. El tamaño máximo de archivo es %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -712,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."
@@ -725,14 +796,12 @@ msgid "Failed updating avatar."
msgstr "Error al actualizar avatar."
#: actions/avatarsettings.php:393
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Avatar actualizado"
+msgstr "Avatar borrado."
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
-msgstr "Ya has bloqueado este usuario."
+msgstr "Ya has bloqueado a este usuario."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
@@ -744,24 +813,27 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"¿Realmente deseas bloquear a este usuario? Una vez que lo hagas, se "
+"desuscribirá de tu cuenta, no podrá suscribirse a ella en el futuro y no se "
+"te notificará de ninguna de sus respuestas @."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
+#: actions/groupblock.php:178
msgid "No"
msgstr "No"
-#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
-msgstr "Desbloquear este usuario"
+msgstr "No bloquear a este usuario"
-#: actions/block.php:144 actions/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Sí"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este usuario."
@@ -769,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
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:97
+#, php-format
msgid "%s blocked profiles"
-msgstr "Perfil de usuario"
+msgstr "%s perfiles bloqueados"
-#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:100
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s y amigos, página %d"
+msgstr "%1$s perfiles bloqueados, página %2$d"
-#: actions/blockedfromgroup.php:108
-#, fuzzy
+#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
-msgstr "Lista de los usuarios en este grupo."
+msgstr ""
+"Una lista de los usuarios que han sido bloqueados para unirse a este grupo."
-#: actions/blockedfromgroup.php:281
+#: 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"
@@ -845,7 +921,6 @@ msgid "Couldn't delete email confirmation."
msgstr "No se pudo eliminar la confirmación de correo electrónico."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Confirmar la dirección"
@@ -859,16 +934,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Debes estar registrado para borrar una aplicación."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Aplicación no encontrada."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Hubo problemas con tu clave de sesión."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Eliminar la aplicación"
+
+#: 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 ""
+"¿Estás seguro de que quieres eliminar esta aplicación? Esto borrará todos "
+"los datos acerca de la aplicación de la base de datos, incluyendo todas las "
+"conexiones de usuario existente."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "No eliminar esta aplicación"
+
+#: actions/deleteapplication.php:160
+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."
@@ -878,13 +995,12 @@ msgid "Can't delete this notice."
msgstr "No se puede eliminar este aviso."
#: actions/deletenotice.php:103
-#, fuzzy
msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
msgstr ""
-"Estás a punto de eliminar permanentemente un aviso. Si lo hace, no se podrá "
-"deshacer"
+"Estás a punto de eliminar un mensaje permanentemente. Una vez hecho esto, no "
+"lo puedes deshacer."
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
@@ -895,11 +1011,10 @@ msgid "Are you sure you want to delete this notice?"
msgstr "¿Estás seguro de que quieres eliminar este aviso?"
#: actions/deletenotice.php:145
-#, fuzzy
msgid "Do not delete this notice"
-msgstr "No se puede eliminar este aviso."
+msgstr "No eliminar este mensaje"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Borrar este aviso"
@@ -908,37 +1023,37 @@ msgid "You cannot delete users."
msgstr "No puedes borrar usuarios."
#: actions/deleteuser.php:74
-#, fuzzy
msgid "You can only delete local users."
-msgstr "No puedes borrar el estado de otro usuario."
+msgstr "Sólo puedes eliminar usuarios locales."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
msgid "Delete user"
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."
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 ""
+msgstr "Diseño"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "Configuración de diseño de este sitio StatusNet."
#: actions/designadminpanel.php:275
-#, fuzzy
msgid "Invalid logo URL."
-msgstr "Tamaño inválido."
+msgstr "URL de logotipo inválido."
#: actions/designadminpanel.php:279
#, php-format
@@ -950,56 +1065,54 @@ msgid "Change logo"
msgstr "Cambiar logo"
#: actions/designadminpanel.php:380
-#, fuzzy
msgid "Site logo"
-msgstr "Invitar"
+msgstr "Logo del sitio"
#: actions/designadminpanel.php:387
-#, fuzzy
msgid "Change theme"
-msgstr "Cambiar"
+msgstr "Cambiar el tema"
#: actions/designadminpanel.php:404
-#, fuzzy
msgid "Site theme"
-msgstr "Aviso de sitio"
+msgstr "Tema del sitio"
#: actions/designadminpanel.php:405
-#, fuzzy
msgid "Theme for the site."
-msgstr "Salir de sitio"
+msgstr "Tema para el sitio."
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
-msgstr ""
+msgstr "Cambiar la imagen de fondo"
#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Fondo"
#: actions/designadminpanel.php:427
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "Puedes cargar una imagen de logo para tu grupo."
+msgstr ""
+"Puedes subir una imagen de fondo para el sitio. El tamaño máximo de archivo "
+"es %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "Activado"
#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Desactivado"
#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Activar o desactivar la imagen de fondo."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Imagen de fondo en mosaico"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -1010,9 +1123,8 @@ msgid "Content"
msgstr "Contenido"
#: actions/designadminpanel.php:523 lib/designsettings.php:204
-#, fuzzy
msgid "Sidebar"
-msgstr "Buscar"
+msgstr "Barra lateral"
#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
@@ -1024,30 +1136,31 @@ msgstr "Vínculos"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Utilizar los valores predeterminados"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
-msgstr ""
+msgstr "Restaurar los diseños predeterminados"
#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
-msgstr ""
+msgstr "Volver a los valores predeterminados"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 ""
+msgstr "Guardar el diseño"
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
@@ -1057,89 +1170,75 @@ msgstr "¡Este aviso no es un favorito!"
msgid "Add to favorites"
msgstr "Agregar a favoritos"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "No existe ese documento."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "No existe tal documento \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Editar aplicación"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Debes estar conectado para editar un grupo."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "No eres miembro de este grupo."
+msgstr "Debes haber iniciado sesión para editar una aplicación."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "No existe ese aviso."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Hubo problemas con tu clave de sesión."
+msgstr "No existe tal aplicación."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Usa este formulario para editar el grupo."
+msgstr "Utiliza este formulario para editar tu aplicación."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Igual a la contraseña de arriba. Requerida"
+msgstr "Se requiere un nombre"
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Tu nombre es demasiado largo (max. 255 carac.)"
+msgstr "El nombre es muy largo (máx. 255 carac.)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
-#, fuzzy
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Ese nombre ya está en uso. Prueba con otro."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Descripción"
+msgstr "Se requiere una descripción"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "El URL fuente es muy largo."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "La página de inicio no es un URL válido."
+msgstr "La URL fuente es inválida."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Se requiere una organización."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "La ubicación es demasiado larga (máx. 255 caracteres)."
+msgstr "El texto de organización es muy largo (máx. 255 caracteres)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Se requiere una página principal de organización"
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "La devolución de llamada es muy larga."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "El URL de devolución de llamada es inválido."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "No se pudo actualizar el grupo."
+msgstr "No fue posible actualizar la aplicación."
#: actions/editgroup.php:56
#, php-format
@@ -1150,38 +1249,35 @@ 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
-#, 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 "Debes ser un admin para editar el grupo"
+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
-#, fuzzy, php-format
+#: actions/editgroup.php:205 actions/newgroup.php:145
+#, php-format
msgid "description is too long (max %d chars)."
-msgstr "Descripción es demasiado larga (máx. 140 caracteres)."
+msgstr "La descripción es muy larga (máx. %d caracteres)."
-#: actions/editgroup.php:253
+#: actions/editgroup.php:258
msgid "Could not update group."
msgstr "No se pudo actualizar el grupo."
-#: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
-msgstr "No se pudo crear favorito."
+msgstr "No fue posible crear alias."
-#: actions/editgroup.php:269
+#: actions/editgroup.php:280
msgid "Options saved."
msgstr "Se guardó Opciones."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
-msgstr "Opciones de Email"
+msgstr "Configuración del correo electrónico"
#: actions/emailsettings.php:71
#, php-format
@@ -1212,15 +1308,14 @@ msgstr ""
"la de spam!) por un mensaje con las instrucciones."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancelar"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "Direcciones de correo electrónico"
+msgstr "Dirección de correo electrónico"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1267,10 +1362,9 @@ msgstr ""
"Enviarme un correo electrónico cuando alguien me envía un mensaje privado."
#: actions/emailsettings.php:174
-#, fuzzy
msgid "Send me email when someone sends me an \"@-reply\"."
msgstr ""
-"Enviarme un correo electrónico cuando alguien me envía un mensaje privado."
+"Enviarme un correo electrónico cuando alguien me envíe una \"@-respuesta\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
@@ -1298,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correo electrónico no válido"
@@ -1310,7 +1404,7 @@ msgstr "Esa ya es tu dirección de correo electrónico"
msgid "That email address already belongs to another user."
msgstr "Esa dirección de correo pertenece a otro usuario."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "No se pudo insertar el código de confirmación."
@@ -1372,31 +1466,33 @@ msgstr "¡Este aviso ya está en favoritos!"
msgid "Disfavor favorite"
msgstr "Sacar favorito"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
-#, fuzzy
msgid "Popular notices"
-msgstr "Avisos populares"
+msgstr "Mensajes populares"
#: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
msgid "Popular notices, page %d"
-msgstr "Avisos populares, página %d"
+msgstr "Mensajes populares, página %d"
#: actions/favorited.php:79
-#, fuzzy
msgid "The most popular notices on the site right now."
-msgstr "Ahora se muestran los avisos más populares en el sitio."
+msgstr "Los mensajes más populares del sitio en este momento."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
msgstr ""
+"Los mensajes favoritos aparecen en esta página, pero todavía nadie ha "
+"marcado algún mensaje como favorito."
#: actions/favorited.php:153
msgid ""
"Be the first to add a notice to your favorites by clicking the fave button "
"next to any notice you like."
msgstr ""
+"Se la primera persona en añadir un mensaje a tus favoritos con el botón de "
+"favoritos que se encuentra al lado de cualquier mensaje que te guste."
#: actions/favorited.php:156
#, php-format
@@ -1404,6 +1500,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to add a "
"notice to your favorites!"
msgstr ""
+"¿Por qué no [registrar una cuenta](%%action.register%%) y ser la primera "
+"persona en añadir un mensaje a tus favoritos?"
#: actions/favoritesrss.php:111 actions/showfavorites.php:77
#: lib/personalgroupnav.php:115
@@ -1412,9 +1510,9 @@ msgid "%s's favorite notices"
msgstr "Avisos favoritos de %s"
#: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Updates favored by %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "¡Actualizaciones favorecidas por %1$ s en %2$s!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@@ -1427,14 +1525,13 @@ msgid "Featured users, page %d"
msgstr "Usuarios que figuran, página %d"
#: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
msgid "A selection of some great users on %s"
-msgstr "Una selección de algunos de los grandes usuarios en %s"
+msgstr "Una selección de fantásticos usuarios en %s"
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Nuevo aviso"
+msgstr "No hay ID de mensaje."
#: actions/file.php:38
msgid "No notice."
@@ -1469,14 +1566,12 @@ msgid "You are not authorized."
msgstr "No estás autorizado."
#: actions/finishremotesubscribe.php:113
-#, fuzzy
msgid "Could not convert request token to access token."
-msgstr "No se pudieron convertir las clavesde petición a claves de acceso."
+msgstr "No se pudo convertir el token de solicitud en token de acceso."
#: actions/finishremotesubscribe.php:118
-#, fuzzy
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Versión desconocida del protocolo OMB."
+msgstr "El servicio remoto utiliza una versión desconocida del protocolo OMB."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
@@ -1490,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
@@ -1509,7 +1623,7 @@ msgstr "Grupo no especificado."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Sólo un administrador puede bloquear miembros de un grupo."
#: actions/groupblock.php:95
msgid "User is already blocked from group."
@@ -1519,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear usuario de grupo"
@@ -1530,6 +1644,9 @@ msgid ""
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
+"¿Realmente deseas bloquear al usuario \"%1$s\" del grupo \"%2$s\"? Se "
+"eliminará del grupo y no podrá publicar ni suscribirse al grupo en lo "
+"sucesivo."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1542,6 +1659,8 @@ msgstr "Bloquear este usuario de este grupo"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
msgstr ""
+"Se ha producido un error en la base de datos al bloquear el usuario del "
+"grupo."
#: actions/groupbyid.php:74 actions/userbyid.php:70
msgid "No ID."
@@ -1551,100 +1670,101 @@ 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
-#, fuzzy
+#: actions/groupdesignsettings.php:144
msgid "Group design"
-msgstr "Grupos"
+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."
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
-#, fuzzy
msgid "Couldn't update your design."
-msgstr "No se pudo actualizar el usuario."
+msgstr "No fue posible actualizar tu diseño."
-#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
-#, fuzzy
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr "Preferencias de sincronización guardadas."
+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
-#, 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 "Puedes cargar una imagen de logo para tu grupo."
+msgstr ""
+"Puedes subir una imagen de logo para tu grupo. El tamaño máximo del archivo "
+"debe ser %s."
-#: actions/grouplogo.php:178
-#, fuzzy
+#: actions/grouplogo.php:181
msgid "User without matching profile."
-msgstr "Usuario sin perfil equivalente"
+msgstr "Usuario sin perfil coincidente."
-#: actions/grouplogo.php:362
-#, fuzzy
+#: 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 avatar"
+msgstr "Elige un área cuadrada de la imagen para que sea tu logo."
-#: actions/grouplogo.php:396
-#, fuzzy
+#: actions/grouplogo.php:399
msgid "Logo updated."
-msgstr "SE actualizó logo."
+msgstr "Logo actualizado."
-#: actions/grouplogo.php:398
-#, fuzzy
+#: actions/grouplogo.php:401
msgid "Failed updating logo."
-msgstr "Error al actualizar 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
-#, fuzzy, php-format
+#: actions/groupmembers.php:103
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "Miembros del grupo %s, página %d"
+msgstr "%1$s miembros de grupo, página %2$d"
-#: actions/groupmembers.php:111
+#: 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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
-#, fuzzy
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr "Debes ser un admin para editar el grupo"
+msgstr "Convertir al usuario en administrador del grupo"
-#: actions/groupmembers.php:473
-#, fuzzy
+#: actions/groupmembers.php:482
msgid "Make Admin"
-msgstr "Admin"
+msgstr "Convertir en administrador"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
-msgstr ""
+msgstr "Convertir a este usuario en administrador"
-#: 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 "línea temporal de %s"
+
+#: actions/grouprss.php:140
+#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "¡Actualizaciones de miembros de %1$s en %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: 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"
@@ -1663,30 +1783,33 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"Grupos %%%%site.name%%%% te permiten encontrar gente de intereses afines a "
+"los tuyo y hablar con ellos. Después de unirte al grupo, podrás enviarle "
+"mensajes a todos sus miembros mediante la sintaxis \"!groupname\". ¿No "
+"encuentras un grupo que te guste? ¡Intenta [buscar otro](%%%%action."
+"groupsearch%%%%) o [crea tú uno!](%%%%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
msgstr "Crear un nuevo grupo"
#: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Buscar personas en %%site.name%% por nombre, ubicación o intereses. Separa "
-"los términos con espacios; deben tener una longitud mínima de 3 caracteres."
+"Busca grupos en %%site.name%% por su nombre, ubicación o descripción. Separa "
+"los términos con espacios. Los términos tienen que ser de 3 o más caracteres."
#: actions/groupsearch.php:58
-#, fuzzy
msgid "Group search"
-msgstr "Buscador de grupos"
+msgstr "Búsqueda en grupos"
#: actions/groupsearch.php:79 actions/noticesearch.php:117
#: actions/peoplesearch.php:83
-#, fuzzy
msgid "No results."
-msgstr "Ningún resultado"
+msgstr "No se obtuvo resultados."
#: actions/groupsearch.php:82
#, php-format
@@ -1694,6 +1817,8 @@ msgid ""
"If you can't find the group you're looking for, you can [create it](%%action."
"newgroup%%) yourself."
msgstr ""
+"Si no puedes encontrar el grupo que estás buscando, puedes [crearlo] (%%"
+"action.newgroup%%) tú mismo."
#: actions/groupsearch.php:85
#, php-format
@@ -1701,23 +1826,22 @@ msgid ""
"Why not [register an account](%%action.register%%) and [create the group](%%"
"action.newgroup%%) yourself!"
msgstr ""
+"¿Por qué no [registras una cuenta](%%action.register%%) y [creas el grupo](%%"
+"action.newgroup%%) tú mismo?"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
-msgstr ""
+msgstr "Sólo un administrador puede desbloquear miembros de grupos."
#: actions/groupunblock.php:95
-#, fuzzy
msgid "User is not blocked from group."
-msgstr "El usuario te ha bloqueado."
+msgstr "El usuario no está bloqueado del grupo."
#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
msgid "Error removing the block."
-msgstr "Error al sacar bloqueo."
+msgstr "Se ha producido un error al eliminar el bloque."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
msgstr "Configuración de mensajería instantánea"
@@ -1731,9 +1855,8 @@ msgstr ""
"Jabber/GTalk. Configura tu dirección y opciones abajo."
#: actions/imsettings.php:89
-#, fuzzy
msgid "IM is not available."
-msgstr "Esta página no está disponible en un "
+msgstr "La mensajería instantánea no está disponible."
#: actions/imsettings.php:106
msgid "Current confirmed Jabber/GTalk address."
@@ -1750,7 +1873,6 @@ msgstr ""
"de amigos?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
msgstr "Dirección de mensajería instantánea"
@@ -1815,6 +1937,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Ese no es tu Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Bandeja de entrada de %1$s - página %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1827,7 +1954,7 @@ msgstr ""
#: actions/invite.php:39
msgid "Invites have been disabled."
-msgstr ""
+msgstr "Se han inhabilitado las invitaciones."
#: actions/invite.php:41
#, php-format
@@ -1896,17 +2023,20 @@ 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
-#, fuzzy, php-format
+#: actions/invite.php:229
+#, php-format
msgid ""
"%1$s has invited you to join them on %2$s (%3$s).\n"
"\n"
@@ -1935,55 +2065,59 @@ msgid ""
"\n"
"Sincerely, %2$s\n"
msgstr ""
-"%1$s te ha invitado a unirte a ellos en %2$s (%3$s).\n"
+"%1$s te ha invitado a unirte a %2$s (%3$s).\n"
"\n"
-"%2$s es un servicio de microblogueo que te permite estar al tanto de la "
-"gente que conoces y que te interesa.\n"
+"%2$s es un servicio de microblogueo que te permite mantenerte al corriente "
+"de las personas que sigues y que te interesan.\n"
"\n"
-"Puedes compartir noticias sobre tí mismo, tus pensamientos, o tu vida en "
-"línea con gente que te conoce. También es bueno para conocer gente que "
-"comparta tus intereses.\n"
+"También puedes compartir noticias acerca de tí, tus pensamientos o tu vida "
+"en línea con la gente que sabe de tí. También es una excelente herramienta "
+"para conocer gente nueva que comparta tus intereses.\n"
"\n"
-"%1$s dijo:\n"
+"%1$s ha dicho:\n"
"\n"
"%4$s\n"
"\n"
-"Puedes ver el perfil de %1$s en %2$s aquí:\n"
+"Puedes ver el perfil de %1$s aquí en %2$s:\n"
"\n"
"%5$s\n"
"\n"
-"Si quieres inscribirte y probar el servicio, haz click en enlace debajo para "
+"Si quieres probar el sevicio, haz clic en el vínculo a continuación para "
"aceptar la invitación.\n"
"\n"
"%6$s\n"
"\n"
-"Si no deseas inscribirte puedes ignorar este mensaje. Gracias por tu "
-"paciencia y tiempo.\n"
+"Si por el contrario, no quieres, ignora este mensaje. Muchas gracias por tu "
+"paciencia y por tu tiempo.\n"
"\n"
-"Sinceramente, %2$s\n"
+"Saludos cordiales, %2$s\n"
#: actions/joingroup.php:60
msgid "You must be logged in to join a group."
msgstr "Debes estar conectado para unirte a un grupo."
-#: actions/joingroup.php:131
-#, fuzzy, php-format
+#: 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 "%s se unió a grupo %s"
+msgstr "%1$s se ha unido al grupo %2$"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
msgstr "Debes estar conectado para dejar un grupo."
-#: actions/leavegroup.php:90 lib/command.php:265
-#, fuzzy
+#: actions/leavegroup.php:100 lib/command.php:265
msgid "You are not a member of that group."
-msgstr "No eres miembro de ese grupo"
+msgstr "No eres miembro de este grupo."
-#: actions/leavegroup.php:127
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s dejó grupo %s"
+msgstr "%1$s ha dejado el grupo %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1994,12 +2128,10 @@ msgid "Incorrect username or password."
msgstr "Nombre de usuario o contraseña incorrectos."
#: actions/login.php:132 actions/otp.php:120
-#, fuzzy
msgid "Error setting user. You are probably not authorized."
-msgstr "No autorizado."
+msgstr "Error al configurar el usuario. Posiblemente no tengas autorización."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inicio de sesión"
@@ -2030,60 +2162,57 @@ msgstr ""
"contraseña antes de cambiar tu configuración."
#: actions/login.php:270
-#, fuzzy, php-format
+#, php-format
msgid ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
msgstr ""
-"Inicia una sesión con tu usuario y contraseña. ¿Aún no tienes usuario? [Crea]"
-"(%%action.register%%) una cuenta nueva o prueba [OpenID] (%%action."
-"openidlogin%%). "
+"Inicia sesión con tu usuario y contraseña. ¿Aún no tienes usuario? [Crea](%%"
+"action.register%%) una cuenta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
+"Sólo los administradores pueden convertir a un usuario en administrador."
-#: actions/makeadmin.php:95
-#, fuzzy, php-format
+#: actions/makeadmin.php:96
+#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Usuario ya está bloqueado del grupo."
+msgstr "%1$s ya es un administrador del grupo \"%2$s\"."
-#: actions/makeadmin.php:132
-#, fuzzy, php-format
+#: actions/makeadmin.php:133
+#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "No se pudo eliminar a usuario %s de grupo %s"
+msgstr "No se puede obtener el registro de membresía de %1$s en el grupo %2$s."
-#: actions/makeadmin.php:145
-#, fuzzy, php-format
+#: actions/makeadmin.php:146
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Debes ser un admin para editar el grupo"
+msgstr "No es posible convertir a %1$s en administrador del grupo %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "No existe estado actual"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "Nueva aplicación"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Debes estar conectado para crear un grupo"
+msgstr "Debes conectarte para registrar una aplicación."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Usa este formulario para crear un grupo nuevo."
+msgstr "Utiliza este formulario para registrar una nueva aplicación."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Se requiere la URL fuente."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "No se pudo crear favorito."
+msgstr "No se pudo crear la aplicación."
#: actions/newgroup.php:53
msgid "New group"
@@ -2116,14 +2245,13 @@ msgid ""
msgstr "No te auto envíes un mensaje; dícetelo a ti mismo."
#: actions/newmessage.php:181
-#, fuzzy
msgid "Message sent"
-msgstr "Mensaje"
+msgstr "Mensaje enviado"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Se envió mensaje directo a %s"
+msgstr "Se ha enviado un mensaje directo a %s."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2134,9 +2262,8 @@ msgid "New notice"
msgstr "Nuevo aviso"
#: actions/newnotice.php:211
-#, fuzzy
msgid "Notice posted"
-msgstr "Aviso publicado"
+msgstr "Mensaje publicado"
#: actions/noticesearch.php:68
#, php-format
@@ -2152,9 +2279,9 @@ msgid "Text search"
msgstr "Búsqueda de texto"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Busca \"%s\" en la Corriente"
+msgstr "Resultados de la búsqueda de \"%1$s\" en %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2162,6 +2289,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Sé la primera persona en [publicar algo en este tema](%%%%action.newnotice%%%"
+"%?status_textarea=%s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2169,16 +2298,20 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"¿Por qué no [registras una cuenta](%%%%action.register%%%%) y te conviertes "
+"en la primera persona en [publicar algo en este tema](%%%%action.newnotice%%%"
+"%?status_textarea=%s)?"
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "¡Actualizaciones de %1$s en %2$s!"
+msgstr "Actualizaciones con \"%s\""
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Todas las actualizaciones que corresponden a la frase a buscar \"%s\""
+msgstr ""
+"¡Actualizaciones que contienen el término de búsqueda \"%1$s\" en %2$s!"
#: actions/nudge.php:85
msgid ""
@@ -2192,54 +2325,52 @@ msgid "Nudge sent"
msgstr "Se envió zumbido"
#: actions/nudge.php:97
-#, fuzzy
msgid "Nudge sent!"
-msgstr "¡Zumbido enviado!"
+msgstr "¡Codazo enviado!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Debes estar conectado para editar un grupo."
+msgstr "Debes estar conectado para listar tus aplicaciones."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Otras opciones"
+msgstr "Aplicaciones OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Aplicaciones que has registrado"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Aún no has registrado aplicación alguna."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Aplicaciones conectadas"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Has permitido a las siguientes aplicaciones acceder a tu cuenta."
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "No eres miembro de ese grupo"
+msgstr "No eres un usuario de esa aplicación."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "No se puede revocar el acceso para la aplicación: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "No has autorizado a ninguna aplicación utilizar tu cuenta."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Los desarrolladores pueden editar la configuración de registro de sus "
+"aplicaciones "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2251,16 +2382,15 @@ msgid "%1$s's status on %2$s"
msgstr "estado de %1$s en %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Conectarse"
+msgstr "tipo de contenido "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Sólo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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"
@@ -2273,9 +2403,8 @@ msgid "Notice Search"
msgstr "Búsqueda de avisos"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
-msgstr "Otras configuraciones"
+msgstr "Otros ajustes"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2283,54 +2412,52 @@ msgstr "Manejo de varias opciones adicionales."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr "  (servicio gratuito)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
-msgstr ""
+msgstr "Acortar las URL con"
#: actions/othersettings.php:117
msgid "Automatic shortening service to use."
msgstr "Servicio de acorte automático a usar."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Configuración del perfil"
+msgstr "Ver diseños de perfil"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Ocultar o mostrar diseños de perfil."
#: actions/othersettings.php:153
-#, fuzzy
msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Servicio de acorte de URL demasiado largo (máx. 50 caracteres)."
+msgstr "El servicio de acortamiento de URL es muy largo (máx. 50 caracteres)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "Grupo no especificado."
+msgstr "No se ha especificado ID de usuario."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "No se especificó perfil."
+msgstr "No se ha especificado un token de acceso."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
-msgstr "Ningún perfil de Id en solicitud."
+msgstr "Token de acceso solicitado."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "El contenido del aviso es inválido"
+msgstr "Token de acceso inválido especificado."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "Ingresar a sitio"
+msgstr "Token de acceso caducado."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Bandeja de salida de %1$s - página %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2347,14 +2474,12 @@ msgid "Change password"
msgstr "Cambiar contraseña"
#: actions/passwordsettings.php:69
-#, fuzzy
msgid "Change your password."
-msgstr "Cambia tu contraseña."
+msgstr "Cambia tu contraseña"
#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
msgid "Password change"
-msgstr "Cambio de contraseña "
+msgstr "Cambio de contraseña"
#: actions/passwordsettings.php:104
msgid "Old password"
@@ -2405,150 +2530,158 @@ msgstr "No se puede guardar la nueva contraseña."
msgid "Password saved."
msgstr "Se guardó Contraseña."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. 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."
msgstr ""
-#: actions/pathsadminpanel.php:140
-#, fuzzy, php-format
+#: actions/pathsadminpanel.php:157
+#, php-format
msgid "Theme directory not readable: %s"
-msgstr "Esta página no está disponible en un "
+msgstr "Directorio de temas ilegible: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
-msgstr ""
+msgstr "Directorio de fondo ilegible: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Servidor SSL no válido. La longitud máxima es de 255 caracteres."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
-#, fuzzy
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
-msgstr "Invitar"
+msgstr "Sitio"
-#: actions/pathsadminpanel.php:221
-msgid "Path"
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servidor"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
+msgid "Path"
+msgstr "Ruta"
+
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Aviso de sitio"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
-msgid "Theme"
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
msgstr ""
-#: actions/pathsadminpanel.php:237
-msgid "Theme server"
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:259
+msgid "Theme"
+msgstr "Tema"
+
+#: actions/pathsadminpanel.php:264
+msgid "Theme server"
+msgstr "Servidor de los temas"
+
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
-msgstr ""
+msgstr "Directorio de temas"
-#: actions/pathsadminpanel.php:252
-#, fuzzy
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatares"
-#: actions/pathsadminpanel.php:257
-#, fuzzy
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
-msgstr "Configuración de Avatar"
+msgstr "Servidor del avatar"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Avatar actualizado"
-#: actions/pathsadminpanel.php:265
-#, fuzzy
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
-msgstr "Avatar actualizado"
+msgstr "Directorio del avatar"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
-msgstr ""
+msgstr "Fondos"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
-msgstr ""
+msgstr "Servidor de fondo"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
-msgstr ""
+msgstr "Directorio del fondo"
-#: actions/pathsadminpanel.php:293
-#, fuzzy
+#: actions/pathsadminpanel.php:320
msgid "SSL"
-msgstr "SMS"
+msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
-#, fuzzy
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
-msgstr "Recuperar"
+msgstr "Nunca"
-#: actions/pathsadminpanel.php:297
-#, fuzzy
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
-msgstr "Avisos"
+msgstr "A veces"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
-msgstr ""
+msgstr "Siempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
-msgstr ""
+msgstr "Usar SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
-msgstr ""
+msgstr "Cuándo utilizar SSL"
-#: actions/pathsadminpanel.php:308
-#, fuzzy
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
-msgstr "Recuperar"
+msgstr "Servidor SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
-msgstr ""
+msgstr "Servidor hacia el cual dirigir las solicitudes SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Aviso de sitio"
@@ -2567,20 +2700,20 @@ msgid "People search"
msgstr "Buscador de gente"
#: actions/peopletag.php:70
-#, fuzzy, php-format
+#, php-format
msgid "Not a valid people tag: %s"
-msgstr "No es un tag de personas válido: %s"
+msgstr "No es una etiqueta válida para personas: %s"
#: actions/peopletag.php:144
#, fuzzy, php-format
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 ""
@@ -2597,9 +2730,8 @@ msgstr ""
"sepa más sobre ti."
#: actions/profilesettings.php:99
-#, fuzzy
msgid "Profile information"
-msgstr "Información de perfil "
+msgstr "Información del perfil"
#: actions/profilesettings.php:108 lib/groupeditform.php:154
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -2607,13 +2739,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Página de inicio"
@@ -2622,22 +2754,21 @@ msgid "URL of your homepage, blog, or profile on another site"
msgstr "El URL de tu página de inicio, blog o perfil en otro sitio"
#: actions/profilesettings.php:122 actions/register.php:461
-#, fuzzy, php-format
+#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr "Cuéntanos algo sobre ti y tus intereses en 140 caracteres"
+msgstr "Descríbete y cuéntanos tus intereses en %d caracteres"
#: actions/profilesettings.php:125 actions/register.php:464
-#, fuzzy
msgid "Describe yourself and your interests"
-msgstr "Descríbete y cuenta de tus "
+msgstr "Descríbete y cuéntanos acerca de tus intereses"
#: actions/profilesettings.php:127 actions/register.php:466
msgid "Bio"
msgstr "Biografía"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Ubicación"
@@ -2648,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
@@ -2661,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2685,11 +2816,11 @@ msgstr ""
"para no-humanos)"
#: actions/profilesettings.php:228 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
msgid "Bio is too long (max %d chars)."
-msgstr "La biografía es demasiado larga (máx. 140 caracteres)."
+msgstr "La biografía es muy larga (máx. %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Zona horaria no seleccionada"
@@ -2698,83 +2829,84 @@ msgid "Language is too long (max 50 chars)."
msgstr "Idioma es muy largo ( max 50 car.)"
#: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Tag no válido: '%s' "
+msgstr "Etiqueta inválida: \"% s\""
-#: actions/profilesettings.php:302
+#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
msgstr "No se pudo actualizar el usuario para autosuscribirse."
-#: actions/profilesettings.php:359
-#, fuzzy
+#: actions/profilesettings.php:363
msgid "Couldn't save location prefs."
-msgstr "No se pudo guardar tags."
+msgstr "No se han podido guardar las preferencias de ubicación."
-#: actions/profilesettings.php:371
+#: actions/profilesettings.php:375
msgid "Couldn't save profile."
msgstr "No se pudo guardar el perfil."
-#: actions/profilesettings.php:379
-#, fuzzy
+#: actions/profilesettings.php:383
msgid "Couldn't save tags."
-msgstr "No se pudo guardar tags."
+msgstr "No se pudo guardar las etiquetas."
-#: actions/profilesettings.php:387 lib/adminpanelaction.php:137
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
msgid "Settings saved."
msgstr "Se guardó configuración."
#: actions/public.php:83
#, php-format
msgid "Beyond the page limit (%s)"
-msgstr ""
+msgstr "Más allá del límite de páginas (%s)"
#: actions/public.php:92
msgid "Could not retrieve public stream."
msgstr "No se pudo acceder a corriente pública."
-#: actions/public.php:129
-#, fuzzy, php-format
+#: actions/public.php:130
+#, php-format
msgid "Public timeline, page %d"
-msgstr "Línea de tiempo pública, página %d"
+msgstr "Línea temporal pública, página %d"
-#: actions/public.php:131 lib/publicgroupnav.php:79
+#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Línea temporal pública"
-#: actions/public.php:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed del flujo público"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed del flujo público"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Feed del flujo público"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
+"Esta es la línea temporal pública de %%site.name%%, pero aún no se ha "
+"publicado nada."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
-msgstr ""
+msgstr "¡Sé la primera persona en publicar algo!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2783,7 +2915,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2794,9 +2926,8 @@ msgstr ""
"wiki/Micro-blogging) "
#: actions/publictagcloud.php:57
-#, fuzzy
msgid "Public tag cloud"
-msgstr "Nube de tags pública"
+msgstr "Nube de etiquetas pública"
#: actions/publictagcloud.php:63
#, php-format
@@ -2810,7 +2941,7 @@ msgstr ""
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "¡Sé la primera persona en publicar!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2818,8 +2949,10 @@ 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:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Nube de tags"
@@ -2862,14 +2995,16 @@ msgstr ""
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
msgstr ""
+"Se te ha identificado. Por favor, escribe una nueva contraseña a "
+"continuación. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
-msgstr ""
+msgstr "Recuperación de contraseña"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Nombre de usuario o dirección de correo electrónico"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
@@ -2954,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrarse"
@@ -3004,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo electrónico"
@@ -3026,16 +3159,15 @@ msgid "Creative Commons Attribution 3.0"
msgstr ""
#: actions/register.php:497
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-"excepto los siguientes datos privados: contraseña, dirección de correo "
-"electrónico, dirección de mensajería instantánea, número de teléfono."
+"con excepción de esta información privada: contraseña, dirección de correo "
+"electrónico, dirección de mensajería instantánea y número de teléfono."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3052,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 ""
@@ -3092,17 +3224,16 @@ msgid "Remote subscribe"
msgstr "Subscripción remota"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
-msgstr "Suscribirse a este usuario"
+msgstr "Suscribirse a un usuario remoto"
#: actions/remotesubscribe.php:129
msgid "User nickname"
-msgstr "Apodo del usuario"
+msgstr "Usuario"
#: actions/remotesubscribe.php:130
msgid "Nickname of the user you want to follow"
-msgstr "Apodo del usuario que quieres seguir"
+msgstr "Usuario a quien quieres seguir"
#: actions/remotesubscribe.php:133
msgid "Profile URL"
@@ -3113,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"
@@ -3122,86 +3253,84 @@ msgid "Invalid profile URL (bad format)"
msgstr "El URL del perfil es inválido (formato incorrecto)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "URL de perfil no válido (ningún documento YADIS)."
+msgstr ""
+"No es un perfil válido URL (no se ha definido un documento YADIS o un XRDS "
+"inválido)."
#: actions/remotesubscribe.php:176
-#, fuzzy
msgid "That’s a local profile! Login to subscribe."
-msgstr "¡Es un perfil local! Ingresa para suscribirte"
+msgstr "¡Este es un perfil local! Ingresa para suscribirte"
#: actions/remotesubscribe.php:183
-#, fuzzy
msgid "Couldn’t get a request token."
-msgstr "No se pudo obtener la señal de petición."
+msgstr "No se pudo obtener un token de solicitud"
#: actions/repeat.php:57
-#, fuzzy
msgid "Only logged-in users can repeat notices."
-msgstr "Sólo el usuario puede leer sus bandejas de correo."
+msgstr "Sólo los usuarios que hayan accedido pueden repetir mensajes."
#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
msgid "No notice specified."
-msgstr "No se especificó perfil."
+msgstr "No se ha especificado un mensaje."
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "No puedes registrarte si no estás de acuerdo con la licencia."
+msgstr "No puedes repetir tus propios mensajes."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Ya has bloqueado este usuario."
+msgstr "Ya has repetido este mensaje."
-#: actions/repeat.php:114 lib/noticelist.php:629
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "Crear"
+msgstr "Repetido"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Crear"
+msgstr "¡Repetido!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: 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:144
+#: 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: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 "
@@ -3213,6 +3342,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3223,117 +3366,155 @@ 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:390
+msgid "Sessions"
+msgstr "Sesiones"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Configuración de sesión para este sitio StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gestionar sesiones"
+
+#: 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 "Guardar la configuración del sitio"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Debes estar conectado para dejar un grupo."
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "Aviso sin perfil"
+msgstr "Perfil de la aplicación"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icono"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "Apodo"
+msgstr "Nombre"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Paginación"
+msgstr "Organización"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Descripción"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadísticas"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Acciones de la aplicación"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Información de la aplicación"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL del token de solicitud"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL del token de acceso"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr ""
+msgstr "Autorizar URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "¿Estás seguro de que quieres eliminar este aviso?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Avisos favoritos de %s"
+
#: actions/showfavorites.php:132
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 "
@@ -3341,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 ""
@@ -3350,71 +3531,73 @@ msgstr ""
msgid "%s group"
msgstr "Grupo %s"
-#: actions/showgroup.php:218
-#, fuzzy
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Miembros del grupo %s, página %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
-msgstr "Perfil de grupo"
+msgstr "Perfil del grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
-#, fuzzy
+#: 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 ""
+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
-#, fuzzy
+#: actions/showgroup.php:441
msgid "Created"
-msgstr "Crear"
+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."
@@ -3424,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."
@@ -3435,10 +3618,9 @@ 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
-#, fuzzy
+#: actions/showgroup.php:491
msgid "Admins"
-msgstr "Admin"
+msgstr "Administradores"
#: actions/showmessage.php:81
msgid "No such message."
@@ -3463,9 +3645,14 @@ msgid "Notice deleted."
msgstr "Aviso borrado"
#: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
msgid " tagged %s"
-msgstr "Avisos marcados con %s"
+msgstr "%s etiquetados"
+
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, página %2$d"
#: actions/showstream.php:122
#, fuzzy, php-format
@@ -3492,25 +3679,25 @@ msgstr "Feed de avisos de %s"
msgid "FOAF for %s"
msgstr "Bandeja de salida para %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3519,20 +3706,21 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
-#, fuzzy, php-format
+#: 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 ""
-"**%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:313
-#, fuzzy, php-format
+#: actions/showstream.php:305
+#, php-format
msgid "Repeat of %s"
-msgstr "Respuestas a %s"
+msgstr "Repetición de %s"
#: actions/silence.php:65 actions/unsilence.php:65
#, fuzzy
@@ -3545,214 +3733,143 @@ msgid "User is already silenced."
msgstr "El usuario te ha bloqueado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Configuración básica de este sitio StatusNet."
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
-msgstr ""
-
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
+msgstr "Idioma desconocido \"%s\"."
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
-msgstr ""
+msgstr "General"
-#: actions/siteadminpanel.php:256
-#, fuzzy
+#: actions/siteadminpanel.php:224
msgid "Site name"
-msgstr "Aviso de sitio"
+msgstr "Nombre del sitio"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: 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:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Vistas locales"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
-msgstr ""
+msgstr "Zona horaria predeterminada"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Zona horaria predeterminada del sitio; generalmente UTC."
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
-msgstr "Lenguaje de preferencia"
+msgid "Default language"
+msgstr "Idioma predeterminado del sitio"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Recuperar"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Límites"
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr "Límite de texto"
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr "Cantidad máxima de caracteres para los mensajes."
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Aceptar"
+#: 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/siteadminpanel.php:321
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Private"
-msgstr "Privacidad"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
+msgid "Site Notice"
+msgstr "Aviso de sitio"
-#: actions/siteadminpanel.php:327
+#: actions/sitenoticeadminpanel.php:67
#, fuzzy
-msgid "Invite only"
-msgstr "Invitar"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
+msgid "Edit site-wide message"
+msgstr "Nuevo Mensaje "
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:103
#, fuzzy
-msgid "Closed"
-msgstr "Bloqueado"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgid "Unable to save site notice."
+msgstr "No se pudo grabar tu configuración de diseño."
-#: actions/siteadminpanel.php:367
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
-
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso de sitio"
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
-
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Configuración de Avatar"
+msgid "Save site notice"
+msgstr "Aviso de sitio"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
-msgstr "Preferencias SMS"
+msgstr "Configuración de SMS"
#: actions/smssettings.php:69
#, php-format
@@ -3781,9 +3898,8 @@ msgid "Enter the code you received on your phone."
msgstr "Ingrese el código recibido en su teléfono"
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
-msgstr "Número telefónico para sms"
+msgstr "Número de teléfono de SMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3832,9 +3948,8 @@ msgid "That is not your phone number."
msgstr "Ese no es tu número telefónico"
#: actions/smssettings.php:465
-#, fuzzy
msgid "Mobile carrier"
-msgstr "Operador móvil"
+msgstr "Operador de telefonía móvil"
#: actions/smssettings.php:469
msgid "Select a carrier"
@@ -3854,30 +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/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/subedit.php:83
+#: 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:69
+#: 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: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
@@ -3930,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 "
@@ -3940,31 +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:86
+#: 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: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"
@@ -3980,11 +4166,11 @@ msgid "Tag %s"
msgstr "%s tag"
#: actions/tagother.php:77 lib/userprofile.php:75
-#, fuzzy
msgid "User profile"
msgstr "Perfil de usuario"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -4007,9 +4193,8 @@ msgstr ""
"suscritas a ti."
#: actions/tagother.php:200
-#, fuzzy
msgid "Could not save tags."
-msgstr "No se pudo guardar tags."
+msgstr "No se han podido guardar las etiquetas."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
@@ -4020,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."
@@ -4039,41 +4224,42 @@ 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:330
+#: 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:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Límite para la bio inválido: Debe ser numérico."
#: 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: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:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -4082,11 +4268,11 @@ msgstr "Perfil"
#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Límite de la bio"
#: 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:231
msgid "New users"
@@ -4094,57 +4280,32 @@ msgstr "Nuevos usuarios"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Bienvenida a nuevos usuarios"
#: 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:241
-#, fuzzy
msgid "Default subscription"
-msgstr "Todas las suscripciones"
+msgstr "Suscripción predeterminada"
#: actions/useradminpanel.php:242
-#, fuzzy
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:251
msgid "Invitations"
msgstr "Invitaciones"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Invitacion(es) enviada(s)"
+msgstr "Invitaciones habilitadas"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sesiones"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autorizar la suscripción"
@@ -4159,37 +4320,36 @@ msgstr ""
"avisos de este usuario. Si no pediste suscribirte a los avisos de alguien, "
"haz clic en \"Cancelar\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licencia"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Aceptar"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
-#, fuzzy
msgid "Subscribe to this user"
msgstr "Suscribirse a este usuario"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Rechazar"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Rechazar esta suscripción"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "¡Ninguna petición de autorización!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Suscripción autorizada"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4200,11 +4360,11 @@ msgstr ""
"Lee de nuevo las instrucciones para saber cómo autorizar la suscripción. Tu "
"identificador de suscripción es:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Suscripción rechazada"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4215,45 +4375,44 @@ msgstr ""
"de nuevo las instrucciones para saber cómo rechazar la suscripción "
"completamente."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "No se puede leer el URL del avatar '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imagen incorrecto para '%s'"
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
msgid "Profile design"
-msgstr "Configuración del perfil"
+msgstr "Diseño del perfil"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
@@ -4265,21 +4424,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Miembros del grupo %s, página %d"
+
#: actions/usergroups.php:130
-#, fuzzy
msgid "Search for more groups"
-msgstr "Buscar personas o texto"
+msgstr "Buscar más grupos"
-#: actions/usergroups.php:153
+#: 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"
@@ -4291,15 +4460,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
-
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Status borrado."
+"Este sitio ha sido desarrollado con %1$s, versión %2$s, Derechos Reservados "
+"2008-2010 StatusNet, Inc. y sus colaboradores."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Colaboradores"
#: actions/version.php:168
msgid ""
@@ -4326,16 +4492,16 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Complementos"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sesiones"
#: actions/version.php:197
msgid "Author(s)"
-msgstr ""
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4360,24 +4526,27 @@ msgid "Group join failed."
msgstr "Perfil de grupo"
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "No se pudo actualizar el grupo."
+msgstr "No es parte del grupo."
#: classes/Group_member.php:60
#, fuzzy
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."
@@ -4387,29 +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:171
+#: 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:225
-#, fuzzy
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
-msgstr "Hubo un problema al guardar el aviso."
+msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
-#: classes/Notice.php:229
-#, fuzzy
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
-msgstr "Hubo problemas al guardar el aviso. Usuario desconocido."
+msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4418,38 +4585,79 @@ msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Error de BD al insertar respuesta: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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:380
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "No se pudo crear grupo."
-#: classes/User_group.php:409
+#: 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"
@@ -4479,133 +4687,195 @@ msgid "Other options"
msgstr "Otras opciones"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
msgstr "Página sin título"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegación de sitio primario"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Inicio"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Conectarse"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Conectarse"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Navegación de sitio primario"
+msgstr "Cambiar la configuración del sitio"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Salir"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ayuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inicio de sesión"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ayúdame!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Buscar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ayuda"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locales"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso de página"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegación de sitio secundario"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ayuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Acerca de"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas Frecuentes"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidad"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Fuente"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Ponerse en contacto"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Insignia"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencia de software de StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4614,12 +4884,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblogueo de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblogueo."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4630,149 +4900,225 @@ msgstr ""
"disponible bajo la [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licencia de contenido del sitio"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Todo"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "Licencia."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginación"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Después"
-#: lib/action.php:1141
+#: lib/action.php:1169
msgid "Before"
msgstr "Antes"
-#: 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 "No puedes enviar mensaje a este usuario."
+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"
+
+#. 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 "Configuración de usuario"
+
+#. 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:322 lib/adminpanelaction.php:327
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS confirmación"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Configuración de sesiones"
+
+#. 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: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 "Editar aplicación"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Describir al grupo o tema en %d caracteres"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Describir al grupo o tema"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "Fuente"
+msgstr "La URL de origen"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "El URL de página de inicio o blog del grupo or tema"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organización responsable de esta aplicación"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "El URL de página de inicio o blog del grupo or tema"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Navegador"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Escritorio"
-#: lib/applicationeditform.php:277
+#: 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:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
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"
@@ -4780,7 +5126,7 @@ msgstr ""
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Autor"
#: lib/attachmentlist.php:278
msgid "Provider"
@@ -4788,18 +5134,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:214 lib/authenticationplugin.php:219
-#, 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:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Cambio de contraseña "
@@ -4821,10 +5166,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!"
@@ -4844,9 +5188,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
@@ -4955,80 +5298,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] "No eres miembro de este grupo."
-msgstr[1] "No eres miembro de este grupo."
+msgstr[0] "Eres miembro de este grupo:"
+msgstr[1] "Eres miembro de estos grupos:"
-#: lib/command.php:728
+#: lib/command.php:769
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5042,6 +5394,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"
@@ -5069,19 +5422,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ningún archivo de configuración encontrado. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir al instalador."
@@ -5139,11 +5492,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"
@@ -5181,6 +5534,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"
@@ -5273,32 +5631,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5509,7 +5867,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"
@@ -5600,6 +5958,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"
@@ -5634,49 +5998,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "en contexto"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder este aviso."
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Aviso borrado"
@@ -5709,11 +6073,7 @@ msgstr "Error al insertar perfil remoto"
msgid "Duplicate notice"
msgstr "Duplicar aviso"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Se te ha prohibido la suscripción."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "No se pudo insertar una nueva suscripción."
@@ -5729,19 +6089,19 @@ msgstr "Respuestas"
msgid "Favorites"
msgstr "Favoritos"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Bandeja de Entrada"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Mensajes entrantes"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Bandeja de Salida"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Mensajes enviados"
@@ -5755,7 +6115,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"
@@ -5763,24 +6123,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"
@@ -5823,6 +6183,15 @@ msgstr "Responder este aviso."
msgid "Repeat this notice"
msgstr "Responder este aviso."
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5842,6 +6211,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"
@@ -5895,35 +6268,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
@@ -5977,67 +6329,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "hace un año"
@@ -6051,7 +6420,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
index 2c826643a..8e2a72d04 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-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:33+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:32+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -20,15 +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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "دسترسی"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "تنظیمات دیگر"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "ثبت نام"
+
+#. 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 "خصوصی"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "تنها آماده کردن دعوت نامه های ثبت نام."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Ùقط دعوت کردن"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "غیر Ùعال کردن نام نوبسی جدید"
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "مسدود"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "تنظیمات چهره"
+
+#: 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
@@ -37,57 +100,64 @@ msgstr "چنین صÙحه‌ای وجود ندارد"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 "
@@ -96,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 "
@@ -105,7 +176,7 @@ msgstr ""
"اولین کسی باشید که در [این موضوع](%%%%action.newnotice%%%%?status_textarea=%"
"s) پیام می‌Ùرستد."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -114,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$"
@@ -129,22 +201,22 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "رابط مورد نظر پیدا نشد."
@@ -159,7 +231,7 @@ msgstr "رابط مورد نظر پیدا نشد."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "برای استÙاده از این روش باید اطلاعات را به صورت پست بÙرستید"
@@ -177,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 "کاربر هیچ شناس‌نامه‌ای ندارد."
@@ -188,7 +261,7 @@ msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -203,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."
@@ -308,76 +381,76 @@ msgstr "نمی‌توانید خودتان را دنبال نکنید!"
msgid "Two user ids or screen_names must be supplied."
msgstr "باید ۲ شناسه‌ی کاربر یا نام ظاهری وارد کنید."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "نمی‌توان کاربر منبع را تعیین کرد."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "نام و نام مستعار شما نمی تواند یکی باشد ."
@@ -388,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 نا موÙÙ‚ بود."
@@ -405,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 نا موÙÙ‚ بود"
@@ -425,97 +498,111 @@ msgstr "%s گروه"
msgid "groups on %s"
msgstr "گروه‌ها در %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "مشکلی در دریاÙت جلسه‌ی شما وجود دارد. لطÙا بعدا سعی کنید."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "نام کاربری یا کلمه ی عبور نا معتبر."
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr ""
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr ""
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "ارسال غیر قابل انتظار Ùرم."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "حساب کاربری"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "نام کاربری"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "گذرواژه"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
#, fuzzy
msgid "Deny"
msgstr "طرح"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "همه"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -548,17 +635,17 @@ msgstr "وضعیت حذ٠شد."
msgid "No status with that ID found."
msgstr "هیچ وضعیتی با آن شناسه یاÙت نشد."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "خیلی طولانی است. حداکثر طول مجاز پیام %d حر٠است."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "یاÙت نشد"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "حداکثر طول پیام %d حر٠است که شامل ضمیمه نیز می‌باشد"
@@ -572,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"
@@ -609,27 +684,22 @@ msgstr "%s خط‌زمانی عمومی"
msgid "%s updates from everyone!"
msgstr "%s به روز رسانی های عموم"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "%s تکرار کرد"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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"
@@ -645,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 "بدون لقب."
@@ -658,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 "چهره"
@@ -676,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "برش"
@@ -707,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 "Ùایل اطلاعات خود را Ú¯Ù… کرده ایم."
@@ -742,22 +811,23 @@ msgstr ""
"دنبال کند. همچنین دیگر شما از پیام‌هایی که در آن از شما یاد می‌کند با خبر "
"نخواهید شد"
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "بله"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "کاربر را مسدود کن"
@@ -765,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 "آزاد سازی کاربر"
@@ -854,16 +928,64 @@ 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 "برای ویرایش گروه باید وارد شوید."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "ابن خبر ذخیره ای ندارد ."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "شما یک عضو این گروه نیستید."
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "چنین پیامی وجود ندارد."
+
+#: actions/deleteapplication.php:149
+#, fuzzy
+msgid ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+msgstr ""
+"آیا مطمئن هستید که می‌خواهید این کاربر را پاک کنید؟ با این کار تمام اطلاعات "
+"پاک و بدون برگشت خواهند بود."
+
+#: actions/deleteapplication.php:156
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "این پیام را پاک نکن"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "شما به سیستم وارد نشده اید."
@@ -892,7 +1014,7 @@ msgstr "آیا اطمینان دارید Ú©Ù‡ می‌خواهید این پیاÙ
msgid "Do not delete this notice"
msgstr "این پیام را پاک نکن"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "این پیام را پاک کن"
@@ -908,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."
@@ -916,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 "طرح"
@@ -1026,12 +1148,13 @@ msgstr "برگشت به حالت پیش گزیده"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "ذخیره‌کردن"
@@ -1047,35 +1170,27 @@ msgstr "این آگهی یک آگهی برگزیده نیست!"
msgid "Add to favorites"
msgstr "اÙزودن به علاقه‌مندی‌ها"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "چنین سندی وجود ندارد."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "انتخابات دیگر"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "برای ویرایش گروه باید وارد شوید."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "شما یک عضو این گروه نیستید."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "چنین پیامی وجود ندارد."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1085,46 +1200,51 @@ msgstr "از این روش برای ویرایش گروه استÙاده Ú©Ù†ÛŒØ
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "نام کامل طولانی است (۲۵۵ حر٠در حالت بیشینه(."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "این لقب در حال حاضر ثبت شده است. لطÙا یکی دیگر انتخاب کنید."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr ""
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "برگهٔ آغازین یک نشانی معتبر نیست."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "مکان طولانی است (حداکثر Û²ÛµÛµ حرÙ)"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
@@ -1138,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 "گزینه‌ها ذخیره شدند."
@@ -1197,8 +1317,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "انصراÙ"
@@ -1280,7 +1400,7 @@ msgid "Cannot normalize that email address"
msgstr "نمی‌توان نشانی را قانونی کرد"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "یک آدرس ایمیل معتبر نیست."
@@ -1292,7 +1412,7 @@ msgstr "هم اکنون نشانی شما همین است."
msgid "That email address already belongs to another user."
msgstr "این نشانی در حال حاضر متعلق به Ùرد دیگری است."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "نمی‌توان کد تایید را اضاÙÙ‡ کرد."
@@ -1353,7 +1473,7 @@ msgstr "این پیام هم اکنون دوست داشتنی شده است."
msgid "Disfavor favorite"
msgstr "دوست ندارم"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "آگهی‌های محبوب"
@@ -1470,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
@@ -1499,7 +1638,7 @@ msgstr "هم اکنون دسترسی کاربر به گروه مسدود شده
msgid "User is not a member of group."
msgstr "کاربر عضو گروه نیست."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "دسترسی کاربر به گروه را مسدود کن"
@@ -1531,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "مدیر"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "بازداشتن"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "کاربر یک مدیر گروه شود"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "مدیر شود"
-#: actions/groupmembers.php:473
+#: 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 "گروه‌ها"
@@ -1786,6 +1931,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "این شناسه‌ی Jabber شما نیست."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "صندوق ورودی %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1865,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"
@@ -1909,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 "ملحق شدن به گروه"
@@ -1918,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 را ترک کرد."
@@ -1939,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ورود"
@@ -1977,21 +2134,21 @@ msgstr ""
"با نام‌کاربری و گذزواژه‌ی خود وارد شوید. نام‌کاربری ندارید؟ یک نام‌کاربری [ثبت ]"
"(%%action.register%%) کنید."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Ùقط یک مدیر می‌تواند کاربر دیگری را مدیر کند."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s از قبل مدیر گروه %s بود."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "نمی‌توان اطلاعات عضویت %s را در گروه %s به دست آورد."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "نمی‌توان %s را مدیر گروه %s کرد."
@@ -2001,8 +2158,9 @@ msgid "No current status"
msgstr "بدون وضعیت Ùعلی"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "چنین پیامی وجود ندارد."
#: actions/newapplication.php:64
#, fuzzy
@@ -2014,11 +2172,11 @@ msgstr "برای ساخت یک گروه، باید وارد شده باشید."
msgid "Use this form to register a new application."
msgstr "از این Ùرم برای ساختن یک گروه جدید استÙاده کنید"
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "نمی‌توان نام‌های مستعار را ساخت."
@@ -2154,29 +2312,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "شما یک کاربر این گروه نیستید."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2197,8 +2355,8 @@ msgstr "نوع محتوا "
msgid "Only "
msgstr " Ùقط"
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "یک قالب دادهٔ پشتیبانی‌شده نیست."
@@ -2267,6 +2425,11 @@ msgstr "علامت بی اعتبار یا منقضی."
msgid "Login token expired."
msgstr "ورود به وب‌گاه"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Ùرستاده‌های %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2339,7 +2502,8 @@ msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد."
msgid "Password saved."
msgstr "گذرواژه ذخیره شد."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "مسیر ها"
@@ -2347,133 +2511,148 @@ msgstr "مسیر ها"
msgid "Path and server settings for this StatusNet site."
msgstr "تنظیمات و نشانی محلی این سایت استاتوس‌نتی"
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "شاخه‌ی پوسته‌ها خواندنی نیست: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "شاخه‌ی چهره‌ها نوشتنی نیست: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "شاخه‌ی پس زمینه‌ها نوشتنی نیست: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "پوشه‌ی تنظیمات محلی خواندنی نیست: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "سایت"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "کارگزار"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "مسیر"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "مسیر وب‌گاه"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "نشانی تنظیمات محلی"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "پوسته"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "کارگزار پوسته"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "مسیر پوسته"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "شاخهٔ پوسته"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "چهره‌ها"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "کارگزار نیم‌رخ"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "مسیر نیم‌رخ"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "شاخهٔ نیم‌رخ"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "پس زمینه‌ها"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "کارگذار تصاویر پیش‌زمینه"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "مسیر تصاویر پیش‌زمینه"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "شاخهٔ تصاویر پیش‌زمینه"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "هیچ وقت"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "گاهی اوقات"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "برای همیشه"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "استÙاده از SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "کارگزار"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "نشانی ذخیره سازی"
@@ -2500,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 ""
@@ -2529,13 +2708,13 @@ 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 "نام‌کامل"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "صÙحهٔ خانگی"
@@ -2557,8 +2736,8 @@ msgid "Bio"
msgstr "شرح‌حال"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "موقعیت"
@@ -2582,7 +2761,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "زبان"
@@ -2608,7 +2787,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "منطقه‌ی زمانی انتخاب نشده است."
@@ -2621,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 "تنظیمات ذخیره شد."
@@ -2650,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "اولین کسی باشید Ú©Ù‡ پیام می‌Ùرستد!"
-#: actions/public.php:186
+#: 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:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2697,7 +2877,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2730,7 +2910,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2870,8 +3050,7 @@ msgstr "با عرض تاسÙØŒ کد دعوت نا معتبر است."
msgid "Registration successful"
msgstr "ثبت نام با موÙقیت انجام شد."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "ثبت نام"
@@ -2910,7 +3089,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "پست الکترونیکی"
@@ -2998,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 ""
@@ -3034,7 +3213,7 @@ msgstr "شما نمی توانید Ø¢Ú¯Ù‡ÛŒ خودتان را تکرار Ú©Ù†ÛŒØ
msgid "You already repeated that notice."
msgstr "شما قبلا آن آگهی را تکرار کردید."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr ""
@@ -3042,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "پاسخ‌های به %s"
+
+#: 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 "
@@ -3091,6 +3275,21 @@ 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"
+msgstr "وضعیت حذ٠شد."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -3099,118 +3298,160 @@ msgstr ""
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 ""
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "تنظیمات ظاهری برای این سایت."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "ابن خبر ذخیره ای ندارد ."
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "نام کاربری"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "صÙحه بندى"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr ""
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "آمار"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "مؤلÙ"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "آیا اطمینان دارید که می‌خواهید این پیام را پاک کنید؟"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "دوست داشتنی های %s"
+
#: actions/showfavorites.php:132
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 "
@@ -3218,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 "این یک راه است برای به اشتراک گذاشتن آنچه که دوست دارید."
@@ -3227,67 +3468,72 @@ msgstr "این یک راه است برای به اشتراک گذاشتن آنچ
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3297,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."
@@ -3306,7 +3552,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3337,6 +3583,11 @@ msgstr ""
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s کاربران مسدود شده، صÙحه‌ی %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3362,12 +3613,12 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "این خط‌زمانی %s و دوستانش است، اما هیچ‌یک تاکنون چیزی پست نکرده‌اند."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3375,7 +3626,7 @@ msgstr ""
"اخیرا چیز جالب توجه ای دیده اید؟ شما تا کنون آگهی ارسال نکرده اید، الان می "
"تواند زمان خوبی برای شروع باشد :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3384,7 +3635,7 @@ msgstr ""
"اولین کسی باشید که در [این موضوع](%%%%action.newnotice%%%%?status_textarea=%"
"s) پیام می‌Ùرستد."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3393,7 +3644,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3401,7 +3652,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr ""
@@ -3415,201 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "نام سایت باید طولی غیر صÙر داشته باشد."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "شما باید یک آدرس ایمیل قابل قبول برای ارتباط داشته باشید"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "نام وب‌گاه"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "نام وب‌گاه شما، مانند «میکروبلاگ شرکت شما»"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "أورده شده به وسیله ی"
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلی"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "منطقه ÛŒ زمانی پیش Ùرض"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "منظقه ÛŒ زمانی پیش Ùرض برای سایت؛ معمولا UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "زبان پیش Ùرض سایت"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "کارگزار"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "دسترسی"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "خصوصی"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Ùقط دعوت کردن"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "تنها آماده کردن دعوت نامه های ثبت نام."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "مسدود"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "غیر Ùعال کردن نام نوبسی جدید"
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "محدودیت ها"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "محدودیت متن"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "بیشینهٔ تعداد حرو٠برای آگهی‌ها"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"چه مدت کاربران باید منتظر بمانند ( به ثانیه ) تا همان چیز را مجددا ارسال "
"کنند."
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
+#: 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"
@@ -3706,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 ""
@@ -3778,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 "
@@ -3788,30 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "کاربران خود برچسب‌گذاری شده با %s - صÙحهٔ %d"
+
+#: 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 ""
@@ -3829,7 +4095,8 @@ msgstr ""
msgid "User profile"
msgstr "پروÙایل کاربر"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3860,7 +4127,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "روش API در دست ساخت."
@@ -3884,18 +4151,20 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3957,26 +4226,6 @@ msgstr "دعوت نامه ها Ùعال شدند"
msgid "Whether to allow users to invite new users."
msgstr "خواه به کاربران اجازه ی دعوت کردن کاربران جدید داده شود."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr ""
@@ -3988,84 +4237,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "لیسانس"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "پذیرÙتن"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "تصویب این کاریر"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "رد کردن"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr ""
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr ""
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -4084,20 +4333,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "از هات داگ خود لذت ببرید!"
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
+
#: actions/usergroups.php:130
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"
@@ -4110,11 +4370,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "وضعیت حذ٠شد."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4146,7 +4401,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "شخصی"
@@ -4186,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"
@@ -4203,27 +4463,27 @@ msgstr "پیغام نمی تواند درج گردد"
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"تعداد خیلی زیاد آگهی و بسیار سریع؛ استراحت کنید و مجددا دقایقی دیگر ارسال "
"کنید."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4231,37 +4491,76 @@ msgstr ""
"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
"ارسال کنید."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "شما از Ùرستادن پست در این سایت مردود شدید ."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 "تنضبمات پروÙيلتان را تغیر دهید"
@@ -4299,136 +4598,198 @@ msgstr "%s گروه %s را ترک کرد."
msgid "Untitled page"
msgstr "صÙحه ÛŒ بدون عنوان"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "خانه"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "وصل‌شدن"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "متصل شدن به خدمات"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "وصل‌شدن"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "تغییر پیکربندی سایت"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "دعوت‌کردن"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "مدیر"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "خروج"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "دعوت‌کردن"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "خارج شدن از سایت ."
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ú©Ù…Ú©"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ورود"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "به من کمک کنید!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "جست‌وجو"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ú©Ù…Ú©"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "جستجو برای شخص با متن"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "دید محلی"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "خبر صÙحه"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ú©Ù…Ú©"
+
+#: lib/action.php:754
msgid "About"
msgstr "دربارهٔ"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "سوال‌های رایج"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصی"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "منبع"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "تماس"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet مجوز نرم اÙزار"
-#: lib/action.php:776
+#: 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:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4436,132 +4797,214 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "مجوز محتویات سایت"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "همه "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "مجوز."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "صÙحه بندى"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "بعد از"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "پیکره بندی اصلی سایت"
+
+#. 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 "پیکره بندی اصلی سایت"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "پیکره بندی اصلی سایت"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr ""
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr ""
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "منبع"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4590,12 +5033,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "تغییر گذرواژه"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "تغییر گذرواژه"
@@ -4751,77 +5194,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"
@@ -4835,6 +5288,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"
@@ -4862,19 +5316,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "شما ممکن است بخواهید نصاب را اجرا کنید تا این را تعمیر کند."
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "برو به نصاب."
@@ -4972,6 +5426,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 ""
@@ -5062,32 +5521,32 @@ 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 "کیلوبایت"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5288,7 +5747,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 "از"
@@ -5379,6 +5838,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 "یک Ø¢Ú¯Ù‡ÛŒ بÙرستید"
@@ -5412,48 +5877,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "در زمینه"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "تکرار از"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "به این آگهی جواب دهید"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "جواب دادن"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "آگهی تکرار شد"
@@ -5485,11 +5950,7 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5505,19 +5966,19 @@ msgstr "پاسخ ها"
msgid "Favorites"
msgstr "چیزهای مورد علاقه"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق دریاÙتی"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "پیام های وارد شونده ی شما"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "صندوق خروجی"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "پیام های Ùرستاده شده به وسیله ÛŒ شما"
@@ -5530,7 +5991,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 "اشتراک‌ها"
@@ -5538,23 +5999,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 "تمام گروه‌ها"
@@ -5595,6 +6056,15 @@ msgstr "به این آگهی جواب دهید"
msgid "Repeat this notice"
msgstr ""
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5611,6 +6081,10 @@ msgstr "جست‌وجوی وب‌گاه"
msgid "Keyword(s)"
msgstr "کلمه(های) کلیدی"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "جست‌وجو"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "راهنمای جستجو"
@@ -5662,33 +6136,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
@@ -5740,67 +6195,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "حدود یک دقیقه پیش"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "حدود %d دقیقه پیش"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "حدود یک ساعت پیش"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "حدود %d ساعت پیش"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "حدود یک روز پیش"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "حدود %d روز پیش"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "حدود یک ماه پیش"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "حدود %d ماه پیش"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "حدود یک سال پیش"
@@ -5814,7 +6284,7 @@ msgstr "%s یک رنگ صحیح نیست!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s یک رنگ صحیح نیست! از Û³ یا Û¶ حر٠مبنای شانزده استÙاده کنید"
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index d07fd61ca..dc707ff1b 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,23 +10,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:30+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:29+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Hyväksy"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Profiilikuva-asetukset"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Rekisteröidy"
+
+#. 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"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "Kutsu"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Estä"
+
+#. 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/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
@@ -35,51 +101,58 @@ msgstr "Sivua ei ole."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -87,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 "
@@ -96,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 "
@@ -105,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:202
+#: 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!"
@@ -127,22 +202,22 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -158,7 +233,7 @@ msgstr "API-metodia ei löytynyt!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Tämä metodi edellyttää POST sanoman."
@@ -177,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."
@@ -189,7 +265,7 @@ msgstr "Ei voitu tallentaa profiilia."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -203,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
@@ -312,17 +388,17 @@ msgstr "Et voi lopettaa itsesi tilausta!"
msgid "Two user ids or screen_names must be supplied."
msgstr "Kaksi käyttäjätunnusta tai nimeä täytyy antaa."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Julkista päivitysvirtaa ei saatu."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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."
@@ -330,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -396,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."
@@ -413,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"
@@ -433,23 +509,28 @@ msgstr "Käyttäjän %s ryhmät"
msgid "groups on %s"
msgstr "Ryhmän toiminnot"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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."
@@ -457,77 +538,86 @@ msgstr ""
"Istuntosi avaimen kanssa oli ongelmia. Olisitko ystävällinen ja kokeilisit "
"uudelleen."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Käyttäjätunnus tai salasana ei kelpaa."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Virhe tapahtui käyttäjän asettamisessa."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Odottamaton lomakkeen lähetys."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Käyttäjätili"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Tunnus"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Salasana"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
#, fuzzy
msgid "Deny"
msgstr "Ulkoasu"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Kaikki"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -562,17 +652,17 @@ msgstr "Päivitys poistettu."
msgid "No status with that ID found."
msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Päivitys on liian pitkä. Maksimipituus on %d merkkiä."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Ei löytynyt"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite."
@@ -586,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"
@@ -624,27 +702,22 @@ msgstr "%s julkinen aikajana"
msgid "%s updates from everyone!"
msgstr "%s päivitykset kaikilta!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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!"
@@ -660,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."
@@ -673,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"
@@ -690,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -721,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."
@@ -753,22 +825,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Kyllä"
-#: actions/block.php:144 actions/groupmembers.php:346 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ä"
@@ -776,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ä"
@@ -866,16 +943,62 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr ""
+"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Päivitykselle ei ole profiilia"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Istuntoavaimesi kanssa oli ongelma."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Päivitystä ei ole."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Älä poista tätä päivitystä"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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."
@@ -904,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Poista tämä päivitys"
@@ -921,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"
@@ -1043,12 +1166,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1064,13 +1188,15 @@ msgstr "Tämä päivitys ei ole suosikki!"
msgid "Add to favorites"
msgstr "Lisää suosikkeihin"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Dokumenttia ei ole."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Muita asetuksia"
#: actions/editapplication.php:66
#, fuzzy
@@ -1078,22 +1204,12 @@ msgid "You must be logged in to edit an application."
msgstr ""
"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Sinä et kuulu tähän ryhmään."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Päivitystä ei ole."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Istuntoavaimesi kanssa oli ongelma."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1104,47 +1220,52 @@ msgstr "Käytä tätä lomaketta muokataksesi ryhmää."
msgid "Name is required."
msgstr "Sama kuin ylläoleva salasana. Pakollinen."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Koko nimi on liian pitkä (max 255 merkkiä)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Tunnus on jo käytössä. Yritä toista tunnusta."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Kuvaus"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Kotisivun verkko-osoite ei ole toimiva."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Kotipaikka on liian pitkä (max 255 merkkiä)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Ei voitu päivittää ryhmää."
@@ -1158,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."
@@ -1220,8 +1341,8 @@ msgstr ""
"lisäohjeita. "
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Peruuta"
@@ -1304,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Tuo ei ole kelvollinen sähköpostiosoite."
@@ -1316,7 +1437,7 @@ msgstr "Tämä on jo sähköpostiosoitteesi."
msgid "That email address already belongs to another user."
msgstr "Tämä sähköpostiosoite kuuluu jo toisella käyttäjällä."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Ei voitu asettaa vahvistuskoodia."
@@ -1378,7 +1499,7 @@ msgstr "Tämä päivitys on jo suosikki!"
msgid "Disfavor favorite"
msgstr "Poista suosikeista"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Suosituimmat päivitykset"
@@ -1498,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
@@ -1528,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Estä käyttäjä ryhmästä"
@@ -1562,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Ylläpito"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Estä"
-#: actions/groupmembers.php:441
+#: 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:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tee ylläpitäjäksi"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1814,6 +1960,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Tämä ei ole Jabber ID-tunnuksesi."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Saapuneet viestit käyttäjälle %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1898,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"
@@ -1967,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"
@@ -1976,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"
@@ -1998,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Kirjaudu sisään"
@@ -2039,21 +2197,21 @@ msgstr ""
"käyttäjätunnusta? [Rekisteröi](%%action.register%%) käyttäjätunnus tai "
"kokeile [OpenID](%%action.openidlogin%%)-tunnuksella sisään kirjautumista. "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Vain ylläpitäjä voi tehdä toisesta käyttäjästä ylläpitäjän."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%s on jo ryhmän \"%s\" ylläpitäjä."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ei saatu käyttäjän %s jäsenyystietoja ryhmästä %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ei voitu tehdä käyttäjästä %s ylläpitäjää ryhmään %s"
@@ -2063,8 +2221,9 @@ msgid "No current status"
msgstr "Ei nykyistä tilatietoa"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Päivitystä ei ole."
#: actions/newapplication.php:64
#, fuzzy
@@ -2076,11 +2235,11 @@ msgstr "Sinun pitää olla kirjautunut sisään jotta voit luoda ryhmän."
msgid "Use this form to register a new application."
msgstr "Käytä tätä lomaketta luodaksesi ryhmän."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Ei voitu lisätä aliasta."
@@ -2215,29 +2374,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Sinä et kuulu tähän ryhmään."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2259,8 +2418,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2331,6 +2490,11 @@ msgstr "Päivityksen sisältö ei kelpaa"
msgid "Login token expired."
msgstr "Kirjaudu sisään"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Käyttäjän %s lähetetyt viestit"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2401,7 +2565,8 @@ msgstr "Uutta salasanaa ei voida tallentaa."
msgid "Password saved."
msgstr "Salasana tallennettu."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Polut"
@@ -2409,143 +2574,159 @@ msgstr "Polut"
msgid "Path and server settings for this StatusNet site."
msgstr "Polut ja palvelin asetukset tälle StatusNet palvelulle."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Pikaviestin ei ole käytettävissä."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "Kutsu"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Palauta"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Palvelun ilmoitus"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Kuva"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Profiilikuva-asetukset"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Kuva päivitetty."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Kuva poistettu."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Taustakuvat"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Taustakuvapalvelin"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Taustakuvan hakemistopolku"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Taustakuvan hakemisto"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Palauta"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Päivitykset"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
#, fuzzy
msgid "Always"
msgstr "Aliakset"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Palauta"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Palvelun ilmoitus"
@@ -2574,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 ""
@@ -2605,13 +2786,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Kotisivu"
@@ -2633,8 +2814,8 @@ msgid "Bio"
msgstr "Tietoja"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Kotipaikka"
@@ -2660,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Kieli"
@@ -2688,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aikavyöhykettä ei ole valittu."
@@ -2701,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."
@@ -2731,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Julkinen syöte (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Julkisen Aikajanan Syöte (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Julkinen syöte (Atom)"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Ole ensimmäinen joka lähettää päivityksen!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2778,7 +2960,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2815,7 +2997,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Tagipilvi"
@@ -2955,8 +3137,7 @@ msgstr "Virheellinen kutsukoodin."
msgid "Registration successful"
msgstr "Rekisteröityminen onnistui"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Rekisteröidy"
@@ -2997,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Sähköposti"
@@ -3107,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"
@@ -3151,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Luotu"
@@ -3161,28 +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:144
+#: 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: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 "
@@ -3191,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 "
@@ -3212,6 +3398,21 @@ 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"
+msgstr "Päivitys poistettu."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3222,117 +3423,160 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Profiilikuva-asetukset"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Päivitykselle ei ole profiilia"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Tunnus"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Sivutus"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Kuvaus"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tilastot"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Oletko varma että haluat poistaa tämän päivityksen?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Käyttäjän %s suosikkipäivitykset"
+
#: actions/showfavorites.php:132
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 "
@@ -3340,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 ""
@@ -3349,67 +3593,72 @@ msgstr ""
msgid "%s group"
msgstr "Ryhmä %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Ryhmän %s jäsenet, sivu %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Ryhmän profiili"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3419,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."
@@ -3430,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"
@@ -3461,6 +3710,11 @@ msgstr "Päivitys on poistettu."
msgid " tagged %s"
msgstr "Päivitykset joilla on tagi %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s ja kaverit, sivu %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3486,20 +3740,20 @@ msgstr "Päivityksien syöte käyttäjälle %s"
msgid "FOAF for %s"
msgstr "Käyttäjän %s lähetetyt viestit"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Tämä on käyttäjän %s aikajana, mutta %s ei ole lähettänyt vielä yhtään "
"päivitystä."
-#: actions/showstream.php:196
+#: 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:198
+#: actions/showstream.php:207
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3508,7 +3762,7 @@ msgstr ""
"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
"newnotice%%%%?status_textarea=%s)!"
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3517,7 +3771,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3527,7 +3781,7 @@ msgstr ""
"Käyttäjällä **%s** on käyttäjätili palvelussa %%%%site.name%%%%, joka on "
"[mikroblogauspalvelu](http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Vastaukset käyttäjälle %s"
@@ -3543,209 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: 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:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Paikalliset näkymät"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ensisijainen kieli"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Palauta"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Hyväksy"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Yksityisyys"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "Kutsu"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-#, fuzzy
-msgid "Closed"
-msgstr "Estä"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Uusi viesti"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Twitter-asetuksia ei voitu tallentaa!"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Profiilikuva-asetukset"
+msgid "Save site notice"
+msgstr "Palvelun ilmoitus"
#: actions/smssettings.php:58
#, fuzzy
@@ -3849,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"
@@ -3921,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 "
@@ -3931,30 +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:86
+#: 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: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"
@@ -3973,7 +4234,8 @@ msgstr "Tagi %s"
msgid "User profile"
msgstr "Käyttäjän profiili"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Kuva"
@@ -4010,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!"
@@ -4037,18 +4299,20 @@ msgstr "Ei profiili id:tä kyselyssä."
msgid "Unsubscribed"
msgstr "Tilaus lopetettu"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4117,26 +4381,6 @@ msgstr "Kutsu(t) lähetettiin"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Valtuuta tilaus"
@@ -4152,37 +4396,37 @@ msgstr ""
"päivitykset. Jos et valinnut haluavasi tilata jonkin käyttäjän päivityksiä, "
"paina \"Peruuta\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Lisenssi"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Hyväksy"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Tilaa tämä käyttäjä"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Hylkää"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Käyttäjän %s tilaukset"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ei valtuutuspyyntöä!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Tilaus sallittu"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4193,11 +4437,11 @@ msgstr ""
"saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hyväksytään. "
"Tilauskoodisi on:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Tilaus hylätty"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4207,37 +4451,37 @@ msgstr ""
"Päivityksen tilaus on hylätty, mutta callback-osoitetta palveluun ei ole "
"saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hylätään kokonaan."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Kuvan URL-osoitetta '%s' ei voi avata."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Kuvan '%s' tyyppi on väärä"
@@ -4257,20 +4501,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Ryhmän %s jäsenet, sivu %d"
+
#: actions/usergroups.php:130
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"
@@ -4283,11 +4538,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Päivitys poistettu."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4319,7 +4569,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Omat"
@@ -4360,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"
@@ -4378,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4407,37 +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:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Tietokantavirhe tallennettaessa vastausta: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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"
@@ -4476,127 +4773,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Nimetön sivu"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Ensisijainen sivunavigointi"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Koti"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Yhdistä"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Kutsu"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ylläpito"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Kirjaudu ulos"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Kutsu"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ohjeet"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Kirjaudu sisään"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Auta minua!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Haku"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ohjeet"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Paikalliset näkymät"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sivuilmoitus"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Toissijainen sivunavigointi"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ohjeet"
+
+#: lib/action.php:754
msgid "About"
msgstr "Tietoa"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "UKK"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Yksityisyys"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Lähdekoodi"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Ota yhteyttä"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tönäise"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4605,12 +4963,12 @@ msgstr ""
"**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** on mikroblogipalvelu. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4621,143 +4979,225 @@ msgstr ""
"versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Kaikki "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "lisenssi."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Sivutus"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Myöhemmin"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS vahvistus"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS vahvistus"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Lähdekoodi"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4787,12 +5227,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Salasanan vaihto"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Salasanan vaihto"
@@ -4946,83 +5386,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"
@@ -5036,6 +5485,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"
@@ -5063,20 +5513,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Varmistuskoodia ei ole annettu."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Kirjaudu sisään palveluun"
@@ -5178,6 +5628,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"
@@ -5271,32 +5726,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5511,7 +5966,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ä "
@@ -5602,6 +6057,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"
@@ -5635,51 +6096,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Ei sisältöä!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Luotu"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Vastaa tähän päivitykseen"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Vastaus"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Päivitys on poistettu."
@@ -5713,12 +6174,7 @@ msgstr "Virhe tapahtui uuden etäprofiilin lisäämisessä"
msgid "Duplicate notice"
msgstr "Poista päivitys"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ei voitu lisätä uutta tilausta."
@@ -5734,19 +6190,19 @@ msgstr "Vastaukset"
msgid "Favorites"
msgstr "Suosikit"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Saapuneet"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Sinulle saapuneet viestit"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Lähetetyt"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Lähettämäsi viestit"
@@ -5760,7 +6216,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"
@@ -5768,24 +6224,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"
@@ -5828,6 +6284,15 @@ msgstr "Vastaa tähän päivitykseen"
msgid "Repeat this notice"
msgstr "Vastaa tähän päivitykseen"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5847,6 +6312,10 @@ msgstr "Haku"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Haku"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5901,35 +6370,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
@@ -5984,68 +6432,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "noin vuosi sitten"
@@ -6059,7 +6523,7 @@ msgstr "Kotisivun verkko-osoite ei ole toimiva."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 41f62001f..1965123ea 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -4,6 +4,7 @@
# Author@translatewiki.net: IAlex
# Author@translatewiki.net: Isoph
# Author@translatewiki.net: Jean-Frédéric
+# Author@translatewiki.net: Julien C
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Peter17
# --
@@ -13,23 +14,81 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:36+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:34+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Accès"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Paramètres d’accès au site"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Inscription"
+
+#. 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
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privé"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Autoriser l’inscription sur invitation seulement."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Sur invitation uniquement"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Désactiver les nouvelles inscriptions."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fermé"
+
+#. 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/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
@@ -38,51 +97,58 @@ msgstr "Page non trouvée"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 "%1$s profils bloqués, 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."
@@ -90,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 "
@@ -99,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 "
@@ -109,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:202
+#: 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 "
@@ -118,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!"
@@ -133,22 +201,22 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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 !"
@@ -163,7 +231,7 @@ msgstr "Méthode API non trouvée !"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Ce processus requiert un POST."
@@ -183,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."
@@ -194,7 +263,7 @@ msgstr "Impossible d’enregistrer le profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -210,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."
@@ -314,15 +383,15 @@ msgstr "Vous ne pouvez pas ne plus vous suivre vous-même."
msgid "Two user ids or screen_names must be supplied."
msgstr "Vous devez fournir 2 identifiants ou pseudos."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Impossible de déterminer l’utilisateur source."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -330,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -396,24 +465,24 @@ 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."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
-msgstr "Vous n'êtes pas membre de ce groupe."
+msgstr "Vous n’êtes pas membre de ce groupe."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
+#: 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."
@@ -433,23 +502,27 @@ msgstr "Groupes de %s"
msgid "groups on %s"
msgstr "groupes sur %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Paramètre oauth_token non fourni."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Jeton incorrect."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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."
@@ -457,77 +530,93 @@ msgstr ""
"Un problème est survenu avec votre jeton de session. Veuillez essayer à "
"nouveau."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "Identifiant ou mot de passe incorrect."
+msgstr "Pseudo ou mot de passe incorrect !"
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Erreur lors de la configuration de l’utilisateur."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr ""
+"Erreur de la base de données lors de la suppression de l’utilisateur de "
+"l’application OAuth."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr ""
+"Erreur de base de donnée en insérant l’utilisateur de l’application OAuth"
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"Le jeton de connexion %s a été autorisé. Merci de l’échanger contre un jeton "
+"d’accès."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "Le jeton de connexion %s a été refusé et révoqué."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Soumission de formulaire inattendue."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
+"Une application vous demande l’autorisation de se connecter à votre compte"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Autoriser ou refuser l’accès"
+
+#: 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 ""
+"L’application <strong>%1$s</strong> de <strong>%2$s</strong> voudrait "
+"pouvoir <strong>%3$s</strong> les données de votre compte %4$s. Vous ne "
+"devriez donner l’accès à votre compte %4$s qu’aux tiers à qui vous faites "
+"confiance."
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Compte"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Pseudo"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Mot de passe"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Refuser"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Autoriser"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Autoriser ou refuser l’accès à votre compte."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -558,17 +647,17 @@ msgstr "Statut supprimé."
msgid "No status with that ID found."
msgstr "Aucun statut trouvé avec cet identifiant."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "C’est trop long ! La taille maximale de l’avis est de %d caractères."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Non trouvé"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -584,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"
@@ -621,27 +698,22 @@ msgstr "Activité publique %s"
msgid "%s updates from everyone!"
msgstr "%s statuts de tout le monde !"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repris par %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 !"
@@ -657,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."
@@ -670,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"
@@ -689,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -720,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."
@@ -750,26 +821,27 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
-"Êtes-vous certain de vouloir bloquer cet utilisateur ? Après cela, il ne "
-"sera plus abonné à votre compte, ne pourra plus s’y abonner de nouveau, et "
-"vous ne serez pas informé des @-réponses de sa part."
+"Voulez-vous vraiment bloquer cet utilisateur ? Après cela, il ne sera plus "
+"abonné à votre compte, ne pourra plus s’y abonner de nouveau, et vous ne "
+"serez pas informé des @-réponses de sa part."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Oui"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquer cet utilisateur"
@@ -777,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"
@@ -852,7 +928,6 @@ msgid "Couldn't delete email confirmation."
msgstr "Impossible de supprimer le courriel de confirmation."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Confirmer l’adresse"
@@ -866,16 +941,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Vous devez être connecté pour supprimer une application."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Application non trouvée."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "Vous n’êtes pas le propriétaire de cette application."
+
+#: 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 "Un problème est survenu avec votre jeton de session."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Supprimer l’application"
+
+#: 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 ""
+"Voulez-vous vraiment supprimer cette application ? Ceci effacera toutes les "
+"données à son propos de la base de données, y compris toutes les connexions "
+"utilisateur existantes."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Ne pas supprimer cette application"
+
+#: actions/deleteapplication.php:160
+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é."
@@ -898,13 +1015,13 @@ msgstr "Supprimer cet avis"
#: actions/deletenotice.php:144
msgid "Are you sure you want to delete this notice?"
-msgstr "Êtes-vous sûr(e) de vouloir supprimer cet avis ?"
+msgstr "Voulez-vous vraiment supprimer cet avis ?"
#: actions/deletenotice.php:145
msgid "Do not delete this notice"
msgstr "Ne pas supprimer cet avis"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Supprimer cet avis"
@@ -918,22 +1035,22 @@ msgstr "Vous pouvez seulement supprimer les utilisateurs locaux."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
msgid "Delete user"
-msgstr "Supprimer l'utilsateur"
+msgstr "Supprimer l’utilisateur"
-#: actions/deleteuser.php:135
+#: 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 ""
-"Êtes-vous certain de vouloir supprimer cet utilisateur ? Ceci effacera "
-"toutes les données à son propos de la base de données, sans sauvegarde."
+"Voulez-vous vraiment supprimer cet utilisateur ? Ceci effacera toutes les "
+"données à son propos de la base de données, sans sauvegarde."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: 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"
@@ -948,7 +1065,7 @@ msgstr "URL du logo invalide."
#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
-msgstr "Le thème n'est pas disponible : %s"
+msgstr "Le thème n’est pas disponible : %s"
#: actions/designadminpanel.php:375
msgid "Change logo"
@@ -985,7 +1102,7 @@ msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-"Vous pouvez importer une image d'arrière plan pour ce site. La taille "
+"Vous pouvez importer une image d’arrière plan pour ce site. La taille "
"maximale du fichier est de %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
@@ -1038,12 +1155,13 @@ 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:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1059,90 +1177,75 @@ msgstr "Cet avis n’est pas un favori !"
msgid "Add to favorites"
msgstr "Ajouter aux favoris"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Document non trouvé."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Document « %s » non trouvé."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Modifier l’application"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Vous devez ouvrir une session pour modifier un groupe."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Vous n'êtes pas membre de ce groupe."
+msgstr "Vous devez être connecté pour modifier une application."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Avis non trouvé."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Un problème est survenu avec votre jeton de session."
+msgstr "Application non trouvée."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Remplissez ce formulaire pour modifier les options du groupe."
+msgstr "Utilisez ce formulaire pour modifier votre application."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Identique au mot de passe ci-dessus. Requis."
+msgstr "Le nom est requis."
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Nom complet trop long (maximum de 255 caractères)."
+msgstr "Le nom est trop long (maximum de 255 caractères)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
-#, fuzzy
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Ce nom est déjà utilisé. Essayez-en un autre."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Description"
+msgstr "La description est requise."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "L’URL source est trop longue."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "L’URL de l’avatar ‘%s’ n’est pas valide."
+msgstr "L’URL source est invalide."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "L’organisation est requise."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Emplacement trop long (maximum de 255 caractères)."
+msgstr "L’organisation est trop longue (maximum de 255 caractères)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "La page d’accueil de l’organisation est requise."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Le rappel (Callback) est trop long."
-#: actions/editapplication.php:222 actions/newapplication.php:212
-#, fuzzy
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr "L’URL de l’avatar ‘%s’ n’est pas valide."
+msgstr "L’URL de rappel (Callback) est invalide."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "Impossible de mettre à jour le groupe."
+msgstr "Impossible de mettre à jour l’application."
#: actions/editgroup.php:56
#, php-format
@@ -1153,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."
@@ -1212,8 +1315,8 @@ msgstr ""
"réception (et celle de spam !) pour recevoir de nouvelles instructions."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Annuler"
@@ -1295,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse courriel invalide."
@@ -1307,7 +1410,7 @@ msgstr "Vous utilisez déjà cette adresse courriel."
msgid "That email address already belongs to another user."
msgstr "Cette adresse courriel appartient déjà à un autre utilisateur."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Impossible d’insérer le code de confirmation."
@@ -1368,7 +1471,7 @@ msgstr "Cet avis a déjà été ajouté à vos favoris !"
msgid "Disfavor favorite"
msgstr "Retirer ce favori"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Avis populaires"
@@ -1465,7 +1568,7 @@ msgstr "Cet utilisateur vous a empêché de vous inscrire."
#: actions/finishremotesubscribe.php:110
msgid "You are not authorized."
-msgstr "Vous n'êtes pas autorisé."
+msgstr "Vous n’êtes pas autorisé."
#: actions/finishremotesubscribe.php:113
msgid "Could not convert request token to access token."
@@ -1487,6 +1590,22 @@ msgstr "Fichier non trouvé."
msgid "Cannot read file."
msgstr "Impossible de lire le fichier"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Rôle invalide."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Ce rôle est réservé et ne peut pas être défini."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Vous ne pouvez pas attribuer des rôles aux utilisateurs sur ce site."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "L'utilisateur a déjà ce rôle."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1516,7 +1635,7 @@ msgstr "Cet utilisateur est déjà bloqué pour le groupe."
msgid "User is not a member of group."
msgstr "L’utilisateur n’est pas membre du groupe."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquer cet utilisateur du groupe"
@@ -1552,11 +1671,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."
@@ -1564,20 +1683,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."
@@ -1585,62 +1704,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrer"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquer"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Faire de cet utilisateur un administrateur du groupe"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Faire un administrateur"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1817,6 +1942,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Ceci n’est pas votre identifiant Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Boîte de réception de %1$s - page %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1901,16 +2031,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"
@@ -1973,7 +2105,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"
@@ -1982,11 +2118,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."
+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"
@@ -2005,8 +2141,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ouvrir une session"
@@ -2046,24 +2181,24 @@ msgstr ""
"pas encore d’identifiant ? [Créez-vous](%%action.register%%) un nouveau "
"compte."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Seul un administrateur peut faire d’un autre utilisateur un administrateur."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s est déjà administrateur du groupe « %2$s »."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr ""
"Impossible d’obtenir les enregistrements d’appartenance pour %1$s dans le "
"groupe %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Impossible de rendre %1$s administrateur du groupe %2$s."
@@ -2073,27 +2208,24 @@ msgid "No current status"
msgstr "Aucun statut actuel"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "Nouvelle application"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Vous devez ouvrir une session pour créer un groupe."
+msgstr "Vous devez être connecté pour enregistrer une application."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Remplissez les champs ci-dessous pour créer un nouveau groupe :"
+msgstr "Utilisez ce formulaire pour inscrire une nouvelle application."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "L’URL source est requise."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "Impossible de créer les alias."
+msgstr "Impossible de créer l’application."
#: actions/newgroup.php:53
msgid "New group"
@@ -2210,49 +2342,49 @@ msgid "Nudge sent!"
msgstr "Clin d’œil envoyé !"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Vous devez ouvrir une session pour modifier un groupe."
+msgstr "Vous devez être connecté pour lister vos applications."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Autres options "
+msgstr "Applications OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Applications que vous avez enregistré"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Vous n’avez encore enregistré aucune application."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Applications connectées."
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
+"Vous avez autorisé les applications suivantes à accéder à votre compte."
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "Vous n'êtes pas membre de ce groupe."
+msgstr "Vous n’êtes pas un utilisateur de cette application."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Impossible d’annuler l’accès de l’application : "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Vous n’avez autorisé aucune application à utiliser votre compte."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Les programmeurs peuvent modifier les paramètres d’enregistrement pour leurs "
+"applications "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2271,8 +2403,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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é."
@@ -2285,7 +2417,6 @@ msgid "Notice Search"
msgstr "Recherche d’avis"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Autres paramètres"
@@ -2319,23 +2450,28 @@ msgstr "Le service de réduction d’URL est trop long (50 caractères maximum).
#: actions/otp.php:69
msgid "No user ID specified."
-msgstr "Aucun identifiant d'utilisateur n’a été spécifié."
+msgstr "Aucun identifiant d’utilisateur n’a été spécifié."
#: actions/otp.php:83
msgid "No login token specified."
-msgstr "Aucun jeton d'identification n’a été spécifié."
+msgstr "Aucun jeton d’identification n’a été spécifié."
#: actions/otp.php:90
msgid "No login token requested."
-msgstr "Aucune jeton d'identification requis."
+msgstr "Aucun jeton d’identification n’a été demandé."
#: actions/otp.php:95
msgid "Invalid login token specified."
-msgstr "Jeton d'identification invalide."
+msgstr "Jeton d’identification invalide."
#: actions/otp.php:104
msgid "Login token expired."
-msgstr "Jeton d'identification périmé."
+msgstr "Jeton d’identification périmé."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Boîte d’envoi de %1$s - page %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2408,7 +2544,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:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Chemins"
@@ -2416,132 +2553,147 @@ msgstr "Chemins"
msgid "Path and server settings for this StatusNet site."
msgstr "Paramètres de chemin et serveur pour ce site StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Dossier des thème non lisible : %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Dossier des avatars non inscriptible : %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Dossier des arrière plans non inscriptible : %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Dossier des paramètres régionaux non lisible : %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
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:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Site"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Serveur"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nom d’hôte du serveur du site."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Chemin"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Chemin du site"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Chemin vers les paramètres régionaux"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Chemin de dossier vers les paramètres régionaux"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Jolies URL"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Utiliser des jolies URL (plus lisibles et faciles à mémoriser) ?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Thème"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Serveur de thèmes"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Chemin des thèmes"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Dossier des thèmes"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatars"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Serveur d’avatar"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Chemin des avatars"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Dossier des avatars"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Arrière plans"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Serveur des arrière plans"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Chemin des arrière plans"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Dossier des arrière plans"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Jamais"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Quelquefois"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Toujours"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Utiliser SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Quand utiliser SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Serveur SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Serveur vers lequel rediriger les requêtes SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Enregistrer les chemins."
@@ -2569,11 +2721,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 ""
@@ -2600,13 +2752,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Site personnel"
@@ -2628,8 +2780,8 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Emplacement"
@@ -2655,7 +2807,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Langue"
@@ -2683,7 +2835,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aucun fuseau horaire n’a été choisi."
@@ -2696,23 +2848,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."
@@ -2725,28 +2878,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fil du flux public (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fil du flux public (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fil du flux public (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2755,11 +2908,11 @@ msgstr ""
"Ceci est la chronologie publique de %%site.name%% mais personne n’a encore "
"rien posté."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Soyez le premier à poster !"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2767,7 +2920,7 @@ msgstr ""
"Pourquoi ne pas [créer un compte](%%action.register%%) et être le premier à "
"poster !"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2781,7 +2934,7 @@ msgstr ""
"vous avec vos amis, famille et collègues ! ([Plus d’informations](%%doc.help%"
"%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2819,7 +2972,7 @@ msgstr ""
"Pourquoi ne pas [créer un compte](%%action.register%%) et être le premier à "
"en poster un !"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Nuage de marques"
@@ -2963,8 +3116,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Créer un compte"
@@ -3006,7 +3158,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Courriel"
@@ -3115,7 +3267,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"
@@ -3152,7 +3304,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repris"
@@ -3160,28 +3312,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:144
+#: 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: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 "
@@ -3190,7 +3347,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 "
@@ -3200,7 +3357,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 "
@@ -3215,6 +3372,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Réponses à %1$s sur %2$s !"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Vous ne pouvez pas révoquer les rôles des utilisateurs sur ce site."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "L'utilisateur ne possède pas ce rôle."
+
+#: 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 ""
@@ -3224,104 +3393,142 @@ 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:390
+msgid "Sessions"
+msgstr "Sessions"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Paramètres de session pour ce site StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gérer les sessions"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "S’il faut gérer les sessions nous-même."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Déboguage de session"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Activer la sortie de déboguage pour les sessions."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Sauvegarder les paramètres du site"
+
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Vous devez ouvrir une session pour quitter un groupe."
+msgstr "Vous devez être connecté pour voir une application."
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "L’avis n’a pas de profil"
+msgstr "Profil de l’application"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icône"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nom"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Pagination"
+msgstr "Organisation"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiques"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Créé par %1$s - accès %2$s par défaut - %3$d utilisateurs"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Actions de l’application"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "Réinitialiser la clé et le secret"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Informations sur l’application"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
-msgstr ""
+msgstr "Clé de l’utilisateur"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
-msgstr ""
+msgstr "Secret de l’utilisateur"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL du jeton de requête"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL du jeton d’accès"
-#: actions/showapplication.php:263
-#, fuzzy
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr "Auteur"
+msgstr "Autoriser l’URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Note : Nous utilisons les signatures HMAC-SHA1. Nous n’utilisons pas la "
+"méthode de signature en texte clair."
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Voulez-vous vraiment réinitialiser votre clé consommateur et secrète ?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Avis favoris de %1$s, page %2$d"
#: actions/showfavorites.php:132
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."
@@ -3330,7 +3537,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 "
@@ -3339,7 +3546,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 "
@@ -3350,7 +3557,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."
@@ -3359,67 +3566,72 @@ msgstr "C’est un moyen de partager ce que vous aimez."
msgid "%s group"
msgstr "Groupe %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Groupe %1$s, page %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profil du groupe"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3435,7 +3647,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."
@@ -3448,7 +3660,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"
@@ -3481,6 +3693,11 @@ msgstr "Avis supprimé."
msgid " tagged %s"
msgstr " marqué %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, page %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3506,13 +3723,13 @@ msgstr "Flux des avis de %s (Atom)"
msgid "FOAF for %s"
msgstr "ami d’un ami pour %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Ceci est la chronologie de %1$s mais %2$s n’a rien publié pour le moment."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3520,7 +3737,7 @@ msgstr ""
"Avez-vous vu quelque chose d’intéressant récemment ? Vous n’avez pas publié "
"d’avis pour le moment, vous pourriez commencer maintenant :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3529,7 +3746,7 @@ msgstr ""
"Vous pouvez essayer de faire un clin d’œil à %1$s ou de [poster quelque "
"chose à son intention](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3543,7 +3760,7 @@ msgstr ""
"register%%%%) pour suivre les avis de **%s** et bien plus ! ([En lire plus](%"
"%%%doc.help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3554,7 +3771,7 @@ msgstr ""
"wikipedia.org/wiki/Microblog) basé sur le logiciel libre [StatusNet](http://"
"status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Reprises de %s"
@@ -3568,199 +3785,134 @@ 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."
-msgstr "Paramètres basiques pour ce site StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Paramètres basiques pour ce site StatusNet"
-#: actions/siteadminpanel.php:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Langue « %s » inconnue."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "URL de rapport d’instantanés invalide."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Valeur de lancement d’instantanés invalide."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "La fréquence des instantanés doit être un nombre."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "La limite minimale de texte est de 140 caractères."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Général"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom du site"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Apporté par"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Apporté par URL"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adresse de courriel de contact de votre site"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Zone horaire par défaut"
-#: actions/siteadminpanel.php:289
+#: 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:295
-msgid "Default site language"
-msgstr "Langue du site par défaut"
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Serveur"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nom d’hôte du serveur du site."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Jolies URL"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Utiliser des jolies URL (plus lisibles et mémorable) ?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Accès"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privé"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Interdire aux utilisateurs anonymes (non connectés) de voir le site ?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Sur invitation uniquement"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Rendre l’inscription sur invitation seulement."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Fermé"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Désactiver les nouvelles inscriptions."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Instantanés"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Au hasard lors des requêtes web"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Dans une tâche programée"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Instantanés de données"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Quand envoyer des données statistiques aux serveurs status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Fréquence"
-
-#: actions/siteadminpanel.php:354
-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:359
-msgid "Report URL"
-msgstr "URL de rapport"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Langue par défaut"
-#: actions/siteadminpanel.php:360
-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 ""
+"Langue du site lorsque la détection automatique des paramètres du navigateur "
+"n'est pas disponible"
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texte"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Nombre maximal de caractères pour les avis."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de doublons"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Sauvegarder les paramètres du site"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Avis du site"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Modifier un message portant sur tout le site"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Impossible d'enregistrer l'avis du site."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "La longueur maximale pour l'avis du site est de 255 caractères"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Texte de l'avis du site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Texte de l'avis portant sur tout le site (max. 255 caractères ; HTML activé)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Enregistrer l'avis du site"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3865,19 +4017,88 @@ 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
+msgid "Manage snapshot configuration"
+msgstr "Gérer la configuration des instantanés"
+
+#: 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
+msgid "Save snapshot settings"
+msgstr "Sauvegarder les paramètres des instantanés"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
-msgstr "Vous n'êtes pas abonné(e) à ce profil."
+msgstr "Vous n’êtes pas abonné(e) à ce profil."
-#: actions/subedit.php:83
+#: 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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Abonné"
@@ -3941,7 +4162,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 "
@@ -3957,30 +4178,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:86
+#: 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: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)"
@@ -3998,7 +4224,8 @@ msgstr "Marque %s"
msgid "User profile"
msgstr "Profil de l’utilisateur"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Photo"
@@ -4034,7 +4261,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."
@@ -4058,7 +4285,7 @@ msgstr "Aucune identité de profil dans la requête."
msgid "Unsubscribed"
msgstr "Désabonné"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4066,12 +4293,13 @@ 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."
@@ -4135,26 +4363,6 @@ msgid "Whether to allow users to invite new users."
msgstr ""
"S’il faut autoriser les utilisateurs à inviter de nouveaux utilisateurs."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessions"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Gérer les sessions"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "S’il faut gérer les sessions nous-même."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Déboguage de session"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Activer la sortie de déboguage pour les sessions."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autoriser l’abonnement"
@@ -4169,36 +4377,36 @@ msgstr ""
"abonner aux avis de cet utilisateur. Si vous n’avez pas demandé à vous "
"abonner aux avis de quelqu’un, cliquez « Rejeter »."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licence"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Accepter"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "S’abonner à cet utilisateur"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Refuser"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Rejeter cet abonnement"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Pas de requête d’autorisation !"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Abonnement autorisé"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4208,11 +4416,11 @@ msgstr ""
"Vérifiez les instructions du site pour savoir comment compléter "
"l’autorisation de l’abonnement. Votre jeton d’abonnement est :"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abonnement refusé"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4222,38 +4430,38 @@ msgstr ""
"Vérifiez les instructions du site pour savoir comment refuser pleinement "
"l’abonnement."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "L’URI de l’auditeur ‘%s’ n’a pas été trouvée ici."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est trop longue."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
"L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est un utilisateur local."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "L’URL du profil ‘%s’ est pour un utilisateur local."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "L’URL de l’avatar ‘%s’ n’est pas valide."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Impossible de lire l’URL de l’avatar « %s »."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Format d’image invalide pour l’URL de l’avatar « %s »."
@@ -4274,22 +4482,33 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Bon appétit !"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Groupes %1$s, page %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4304,10 +4523,6 @@ msgstr ""
"Ce site est propulsé par %1$s, version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. et ses contributeurs."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Contributeurs"
@@ -4349,7 +4564,7 @@ msgstr ""
msgid "Plugins"
msgstr "Extensions"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4378,20 +4593,24 @@ msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets."
#: classes/Group_member.php:41
msgid "Group join failed."
-msgstr "L'inscription au groupe a échoué."
+msgstr "L’inscription au groupe a échoué."
#: classes/Group_member.php:53
msgid "Not part of group."
-msgstr "N'appartient pas au groupe."
+msgstr "N’appartient pas au groupe."
#: classes/Group_member.php:60
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"
-msgstr "Impossible de créer le jeton d'ouverture de session pour %s"
+msgstr "Impossible de créer le jeton d’identification pour %s"
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
@@ -4405,27 +4624,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:171
+#: 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:225
+#: 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:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4433,36 +4652,71 @@ msgstr ""
"Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau "
"dans quelques minutes."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: 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:1059
-#, 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: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:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossible de supprimer le jeton OMB de 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."
+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"
@@ -4490,7 +4744,7 @@ msgstr "Autres "
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr "Autres options "
+msgstr "Autres options"
#: lib/action.php:144
#, php-format
@@ -4501,124 +4755,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Page sans nom"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigation primaire du site"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Accueil"
-
-#: lib/action.php:433
+#. 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:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personnel"
+
+#. TRANS: Tooltip for main menu option "Account"
#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Modifier votre courriel, avatar, mot de passe, profil"
+msgstr "Modifier votre adresse électronique, avatar, mot de passe, profil"
-#: lib/action.php:438
-msgid "Connect"
-msgstr "Connecter"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Inviter"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrer"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Fermeture de session"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Inviter"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Aide"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Connexion"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "À l’aide !"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Rechercher"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Aide"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Vues locales"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Avis de la page"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navigation secondaire du site"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Aide"
+
+#: lib/action.php:754
msgid "About"
msgstr "À propos"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "CGU"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Confidentialité"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Insigne"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licence du logiciel StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4627,12 +4927,12 @@ msgstr ""
"**%%site.name%%** est un service de microblogging qui vous est proposé par "
"[%%site.broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:778
+#: 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:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4643,143 +4943,221 @@ 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:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licence du contenu du site"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Le contenu et les données de %1$s sont privés et confidentiels."
-#: lib/action.php:805
+#: 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:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Tous "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Après"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuration des chemins"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Configuration des sessions"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Modifier l'avis du site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Configuration des instantanés"
+
+#: 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:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"L’essai d’authentification de l’API a échoué ; pseudo = %1$s, proxy = %2$s, "
+"ip = %3$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Modifier votre application"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "Icône pour cette application"
-#: lib/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Description du groupe ou du sujet en %d caractères"
+msgstr "Décrivez votre application en %d caractères"
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "Description du groupe ou du sujet"
+msgstr "Décrivez votre application"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "Source"
+msgstr "URL source"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr "URL du site Web ou blogue du groupe ou sujet "
+msgstr "URL de la page d’accueil de cette application"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organisation responsable de cette application"
-#: lib/applicationeditform.php:232
-#, fuzzy
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr "URL du site Web ou blogue du groupe ou sujet "
+msgstr "URL de la page d’accueil de l’organisation"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL vers laquelle rediriger après l’authentification"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Navigateur"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Bureau"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Type d’application, navigateur ou bureau"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Lecture seule"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lecture-écriture"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Accès par défaut pour cette application : en lecture seule ou en lecture-"
"écriture"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Retirer"
+msgstr "Révoquer"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4801,11 +5179,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:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "La modification du mot de passe a échoué"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "La modification du mot de passe n’est pas autorisée"
@@ -4837,7 +5215,7 @@ msgstr "Ça n’a pas de sens de se faire un clin d’œil à soi-même !"
#: lib/command.php:99
#, php-format
msgid "Nudge sent to %s"
-msgstr "Coup de code envoyé à %s"
+msgstr "Clin d’œil envoyé à %s"
#: lib/command.php:126
#, php-format
@@ -4875,7 +5253,7 @@ msgstr "Impossible d’inscrire l’utilisateur %s au groupe %s"
#: lib/command.php:236
#, php-format
msgid "%s joined group %s"
-msgstr "%1$s a rejoint le groupe %2$s"
+msgstr "%s a rejoint le groupe %s"
#: lib/command.php:275
#, php-format
@@ -4885,7 +5263,7 @@ msgstr "Impossible de retirer l’utilisateur %s du groupe %s"
#: lib/command.php:280
#, php-format
msgid "%s left group %s"
-msgstr "%1$s a quitté le groupe %2$s"
+msgstr "%s a quitté le groupe %s"
#: lib/command.php:309
#, php-format
@@ -4960,82 +5338,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"
+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 pas abonné(e) à personne."
+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"
@@ -5049,6 +5436,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"
@@ -5087,6 +5475,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"
@@ -5114,20 +5503,20 @@ msgstr ""
"tracks - pas encore implémenté.\n"
"tracking - pas encore implémenté.\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Aucun fichier de configuration n’a été trouvé. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Aller au programme d’installation"
@@ -5144,13 +5533,12 @@ msgid "Updates by SMS"
msgstr "Suivi des avis par SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Connecter"
+msgstr "Connexions"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Applications autorisées connectées"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5227,6 +5615,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 "Accorder le rôle « %s » à cet utilisateur"
+
#: 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 "
@@ -5292,7 +5685,7 @@ msgstr "Groupes avec le plus de membres"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
-msgstr "Groupes avec le plus d'éléments publiés"
+msgstr "Groupes avec le plus d’éléments publiés"
#: lib/grouptagcloudsection.php:56
#, php-format
@@ -5321,32 +5714,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Source %d inconnue pour la boîte de réception."
@@ -5627,7 +6020,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"
@@ -5680,7 +6073,7 @@ msgstr "Un dossier temporaire est manquant."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr "Impossible d'écrire sur le disque."
+msgstr "Impossible d’écrire sur le disque."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
@@ -5720,6 +6113,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"
@@ -5750,51 +6148,51 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
-"Désolé, l'obtention de votre localisation prend plus de temps que prévu. "
+"Désolé, 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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "dans le contexte"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repris par"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Répondre à cet avis"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Répondre"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Avis repris"
@@ -5826,11 +6224,7 @@ msgstr "Erreur lors de l’insertion du profil distant"
msgid "Duplicate notice"
msgstr "Dupliquer l’avis"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Il vous avez été interdit de vous abonner."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Impossible d’insérer un nouvel abonnement."
@@ -5846,19 +6240,19 @@ msgstr "Réponses"
msgid "Favorites"
msgstr "Favoris"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Boîte de réception"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Vos messages reçus"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Boîte d’envoi"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Vos messages envoyés"
@@ -5871,7 +6265,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"
@@ -5879,23 +6273,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"
@@ -5935,6 +6329,15 @@ msgstr "Reprendre cet avis ?"
msgid "Repeat this notice"
msgstr "Reprendre cet avis"
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Révoquer le rôle « %s » de cet utilisateur"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Bac à sable"
@@ -5951,6 +6354,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"
@@ -6002,33 +6409,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
@@ -6080,67 +6468,81 @@ 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:875
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Rôle de l'utilisateur"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrateur"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modérateur"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "il y a environ 1 an"
@@ -6155,7 +6557,7 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
"%s n’est pas une couleur valide ! Utilisez 3 ou 6 caractères hexadécimaux."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 0f6c29dfa..b88dc4e2c 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -8,25 +8,91 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:39+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:38+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Aceptar"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Configuracións de Twitter"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Rexistrar"
+
+#. 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"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "Invitar"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Bloquear"
+
+#. 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/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
@@ -35,84 +101,93 @@ msgstr "Non existe a etiqueta."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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!"
@@ -122,22 +197,22 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -153,7 +228,7 @@ msgstr "Método da API non atopado"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método require un POST."
@@ -172,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."
@@ -184,7 +260,7 @@ msgstr "Non se puido gardar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -198,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
@@ -311,78 +387,78 @@ msgstr ""
"Dous identificadores de usuario ou nomes_en_pantalla deben ser "
"proporcionados."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Non se pudo recuperar a liña de tempo publica."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -394,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."
@@ -411,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."
@@ -431,99 +507,113 @@ msgstr ""
msgid "groups on %s"
msgstr "Outras opcions"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Usuario ou contrasinal inválidos."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Acounteceu un erro configurando o usuario."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Erro ó inserir o hashtag na BD: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Envio de formulario non esperada."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "Sobre"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Alcume"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Contrasinal"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Todos"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -559,18 +649,18 @@ msgstr "Avatar actualizado."
msgid "No status with that ID found."
msgstr "Non existe ningún estado con esa ID atopada."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
"Iso é demasiado longo. O tamaño máximo para un chío é de 140 caracteres."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Non atopado"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -585,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"
@@ -622,27 +700,22 @@ msgstr "Liña de tempo pública de %s"
msgid "%s updates from everyone!"
msgstr "%s chíos de calquera!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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!"
@@ -659,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."
@@ -672,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"
@@ -689,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -722,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 ""
@@ -758,23 +830,24 @@ msgstr ""
"do teur perfil, non será capaz de suscribirse a ti nun futuro, e non vas a "
"ser notificado de ningunha resposta-@ del."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Si"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Bloquear usuario"
@@ -783,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"
@@ -877,16 +954,62 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "O chío non ten perfil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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: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..."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Ningún chío."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Non se pode eliminar este chíos."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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."
@@ -917,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "Eliminar chío"
@@ -937,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 ""
@@ -1061,12 +1184,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1082,36 +1206,27 @@ msgstr "Este chío non é un favorito!"
msgid "Add to favorites"
msgstr "Engadir a favoritos"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Ningún documento."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Outras opcions"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Non estás suscrito a ese perfil"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Ningún chío."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-#, fuzzy
-msgid "There was a problem with your session token."
-msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1124,47 +1239,52 @@ msgstr ""
msgid "Name is required."
msgstr "A mesma contrasinal que arriba. Requerido."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "O nome completo é demasiado longo (max 255 car)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "O alcume xa está sendo empregado por outro usuario. Tenta con outro."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Subscricións"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "A páxina persoal semella que non é unha URL válida."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "A localización é demasiado longa (max 255 car.)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Non se puido actualizar o usuario."
@@ -1179,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."
@@ -1244,8 +1364,8 @@ msgstr ""
"a %s á túa lista de contactos?)"
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancelar"
@@ -1327,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non é un enderezo de correo válido."
@@ -1339,7 +1459,7 @@ msgstr "Xa é o teu enderezo de correo."
msgid "That email address already belongs to another user."
msgstr "Este enderezo de correo xa pertence a outro usuario."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Non se puido inserir o código de confirmación."
@@ -1401,7 +1521,7 @@ msgstr "Este chío xa é un favorito!"
msgid "Disfavor favorite"
msgstr "Desactivar favorito"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Chíos populares"
@@ -1523,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
@@ -1555,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Bloquear usuario"
@@ -1593,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 ""
@@ -1850,6 +1995,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Esa non é a túa conta Jabber."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Band. Entrada para %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1931,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"
@@ -2000,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"
@@ -2010,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"
@@ -2033,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Inicio de sesión"
@@ -2072,21 +2229,21 @@ msgstr ""
"(%%action.register%%) unha nova conta, ou accede co teu enderezo [OpenID](%%"
"action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "O usuario bloqueoute."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "O usuario bloqueoute."
@@ -2096,8 +2253,9 @@ msgid "No current status"
msgstr "Sen estado actual"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Ningún chío."
#: actions/newapplication.php:64
#, fuzzy
@@ -2108,11 +2266,11 @@ msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Non se puido crear o favorito."
@@ -2247,29 +2405,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Non estás suscrito a ese perfil"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2291,8 +2449,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2362,6 +2520,11 @@ msgstr "Contido do chío inválido"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Band. Saída para %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2435,7 +2598,8 @@ msgstr "Non se pode gardar a contrasinal."
msgid "Password saved."
msgstr "Contrasinal gardada."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2443,142 +2607,158 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "Invitar"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Recuperar"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Novo chío"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Avatar"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Configuracións de Twitter"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Avatar actualizado."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Avatar actualizado."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Recuperar"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Chíos"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Recuperar"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Novo chío"
@@ -2606,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 ""
@@ -2637,13 +2817,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Páxina persoal"
@@ -2666,8 +2846,8 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Localización"
@@ -2693,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Linguaxe"
@@ -2721,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso Horario non seleccionado"
@@ -2734,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."
@@ -2764,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Sindicación do Fio Público"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2818,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:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2856,7 +3037,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2995,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Rexistrar"
@@ -3041,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo Electrónico"
@@ -3149,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"
@@ -3192,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Crear"
@@ -3202,42 +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:144
+#: 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: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 "
@@ -3249,6 +3434,21 @@ 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"
+msgstr "Avatar actualizado."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3259,118 +3459,160 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Configuracións de Twitter"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "O chío non ten perfil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Alcume"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Invitación(s) enviada(s)."
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "Subscricións"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Estas seguro que queres eliminar este chío?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Chíos favoritos de %s"
+
#: actions/showfavorites.php:132
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 "
@@ -3378,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 ""
@@ -3387,73 +3629,78 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Tódalas subscricións"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Non existe o perfil."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3467,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."
@@ -3480,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 ""
@@ -3512,6 +3759,11 @@ msgstr "Chío publicado"
msgid " tagged %s"
msgstr "Chíos tagueados con %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s e amigos"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3537,25 +3789,25 @@ msgstr "Fonte de chíos para %s"
msgid "FOAF for %s"
msgstr "Band. Saída para %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3568,7 +3820,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3580,7 +3832,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Replies to %s"
@@ -3596,208 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Novo chío"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: 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:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Localización"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Linguaxe preferida"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Recuperar"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Aceptar"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Privacidade"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "Invitar"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "Bloquear"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nova mensaxe"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-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:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Configuracións de Twitter"
+msgid "Save site notice"
+msgstr "Novo chío"
#: actions/smssettings.php:58
#, fuzzy
@@ -3902,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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Suscrito"
@@ -3974,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 "
@@ -3984,30 +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:86
+#: 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: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"
@@ -4027,7 +4286,8 @@ msgstr "Tags"
msgid "User profile"
msgstr "O usuario non ten perfil."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -4065,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."
@@ -4092,18 +4352,20 @@ msgstr "Non hai identificador de perfil na peticion."
msgid "Unsubscribed"
msgstr "De-suscribido"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4172,26 +4434,6 @@ msgstr "Invitación(s) enviada(s)."
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Subscrición de autorización."
@@ -4207,38 +4449,38 @@ msgstr ""
"user's notices. If you didn't just ask to subscribe to someone's notices, "
"click \"Cancel\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Aceptar"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "Suscrito a %s"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Rexeitar"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Subscrición de autorización."
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Sen petición de autorización!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Subscrición autorizada"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4249,11 +4491,11 @@ msgstr ""
"proporcionada. Comproba coas instruccións do sitio para máis detalles en "
"como autorizar subscricións. O teu token de subscrición é:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Subscrición rexeitada"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4264,37 +4506,37 @@ msgstr ""
"with the site's instructions for details on how to fully reject the "
"subscription."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Non se pode ler a URL do avatar de '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imaxe incorrecto para '%s'"
@@ -4314,20 +4556,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Tódalas subscricións"
+
#: actions/usergroups.php:130
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"
@@ -4340,11 +4593,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Avatar actualizado."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4376,7 +4624,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persoal"
@@ -4417,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"
@@ -4435,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro ó inserir o hashtag na BD: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4465,39 +4718,81 @@ msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Erro ó inserir a contestación na BD: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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"
@@ -4537,134 +4832,187 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Persoal"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "Conectar"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitar"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Axuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Inicio de sesión"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Axuda"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Buscar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Axuda"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Novo chío"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Navegación de subscricións"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Axuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas frecuentes"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4673,12 +5021,12 @@ msgstr ""
"**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é un servizo de microbloguexo."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4689,146 +5037,228 @@ msgstr ""
"%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Atopar no contido dos chíos"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
#, fuzzy
msgid "All "
msgstr "Todos"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Despois"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Confirmación de SMS"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Confirmación de SMS"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Fonte"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4858,12 +5288,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Contrasinal gardada."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Contrasinal gardada."
@@ -5021,55 +5451,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:"
@@ -5078,12 +5517,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."
@@ -5092,12 +5531,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"
@@ -5106,7 +5545,7 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:728
+#: lib/command.php:769
#, fuzzy
msgid ""
"Commands:\n"
@@ -5121,6 +5560,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"
@@ -5174,20 +5614,20 @@ msgstr ""
"tracks - non implementado por agora.\n"
"tracking - non implementado por agora.\n"
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Sen código de confirmación."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5290,6 +5730,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"
@@ -5384,34 +5829,34 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5672,7 +6117,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 "
@@ -5765,6 +6210,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"
@@ -5799,53 +6250,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Sen contido!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "Non se pode eliminar este chíos."
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "contestar"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Chío publicado"
@@ -5882,12 +6333,7 @@ msgstr "Aconteceu un erro ó inserir o perfil remoto"
msgid "Duplicate notice"
msgstr "Eliminar chío"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Este usuario non che permite suscribirte a el."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Non se puido inserir a nova subscrición."
@@ -5903,19 +6349,19 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritos"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Band. Entrada"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "As túas mensaxes entrantes"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Band. Saída"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "As túas mensaxes enviadas"
@@ -5929,7 +6375,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"
@@ -5937,25 +6383,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"
@@ -6000,6 +6446,15 @@ msgstr "Non se pode eliminar este chíos."
msgid "Repeat this notice"
msgstr "Non se pode eliminar este chíos."
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -6019,6 +6474,10 @@ msgstr "Buscar"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Buscar"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -6074,35 +6533,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
@@ -6160,70 +6600,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fai un ano"
@@ -6237,7 +6692,7 @@ msgstr "%1s non é unha orixe fiable."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index 0367bace5..0856fd8fe 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,24 +7,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:42+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:40+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "קבל"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "הגדרות"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "הירש×"
+
+#. 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 "פרטיות"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "×ין משתמש ×›×–×”."
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "הגדרות"
+
+#: 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
@@ -33,84 +98,93 @@ msgstr "×ין הודעה כזו."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -120,22 +194,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +225,7 @@ msgstr "קוד ×”×ישור ×œ× × ×ž×¦×."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -170,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 "למשתמש ×ין פרופיל."
@@ -182,7 +257,7 @@ msgstr "שמירת הפרופיל נכשלה."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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."
@@ -303,78 +378,78 @@ msgstr "עידכון המשתמש נכשל."
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "עידכון המשתמש נכשל."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -386,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"
@@ -405,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"
@@ -425,98 +500,112 @@ msgstr ""
msgid "groups on %s"
msgstr ""
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "×©× ×”×ž×©×ª×ž×© ×ו הסיסמה ×œ× ×—×•×§×™×™×"
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "שגי××” ביצירת ×©× ×”×ž×©×ª×ž×©."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "שגי×ת מסד × ×ª×•× ×™× ×‘×”×›× ×¡×ª התגובה: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "הגשת טופס ×œ× ×¦×¤×•×™×”."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "×ודות"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "כינוי"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "סיסמה"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -552,17 +641,17 @@ msgstr "התמונה עודכנה."
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "×œ× × ×ž×¦×"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -577,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"
@@ -614,27 +691,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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"
@@ -652,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 "×ין כינוי"
@@ -665,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 "תמונה"
@@ -682,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -715,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 ""
@@ -749,23 +820,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "כן"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "×ין משתמש ×›×–×”."
@@ -774,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 "×ין משתמש ×›×–×”."
@@ -867,16 +943,61 @@ 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 "עידכון המשתמש נכשל."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "להודעה ×ין פרופיל"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "×ין הודעה כזו."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "×ין הודעה כזו."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "×œ× ×ž×—×•×‘×¨."
@@ -904,7 +1025,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "×ין הודעה כזו."
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -923,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 ""
@@ -1047,12 +1168,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "שמור"
@@ -1069,34 +1191,26 @@ msgstr ""
msgid "Add to favorites"
msgstr "מועדפי×"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "×ין מסמך ×›×–×”."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "להודעה ×ין פרופיל"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "×ין הודעה כזו."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1105,47 +1219,52 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "×”×©× ×”×ž×œ× ×רוך מידי (מותרות 255 ×ותיות בלבד)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "כינוי ×–×” כבר תפוס. נסה כינוי ×חר."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "הרשמות"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "ל×תר הבית יש כתובת ×œ× ×—×•×§×™×ª."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "×©× ×”×ž×™×§×•× ×רוך מידי (מותר עד 255 ×ותיות)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "עידכון המשתמש נכשל."
@@ -1159,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 "ההגדרות נשמרו."
@@ -1220,8 +1339,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "בטל"
@@ -1302,7 +1421,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1314,7 +1433,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "הכנסת קוד ×”×ישור נכשלה."
@@ -1373,7 +1492,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1497,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
@@ -1528,7 +1666,7 @@ msgstr "למשתמש ×ין פרופיל."
msgid "User is not a member of group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "×ין משתמש ×›×–×”."
@@ -1564,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 "קבוצות"
@@ -1822,6 +1966,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "זהו ×œ× ×–×™×”×•×™ ×”-Jabber שלך."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1898,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"
@@ -1942,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 ""
@@ -1951,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 "
@@ -1974,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "היכנס"
@@ -2010,21 +2166,21 @@ msgstr ""
"היכנס בעזרת ×©× ×”×ž×©×ª×ž×© והסיסמה שלך. עדיין ×ין לך ×©× ×ž×©×ª×ž×©? [הרש×](%%action."
"register%%) לחשבון "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "למשתמש ×ין פרופיל."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "נכשלה יצירת OpenID מתוך: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "למשתמש ×ין פרופיל."
@@ -2034,8 +2190,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "×ין הודעה כזו."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2045,11 +2202,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "שמירת מידע התמונה נכשל"
@@ -2179,29 +2336,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2223,8 +2380,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2295,6 +2452,11 @@ msgstr "תוכן ההודעה ×œ× ×—×•×§×™"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2367,7 +2529,8 @@ msgstr "×œ× × ×™×ª×Ÿ לשמור ×ת הסיסמה"
msgid "Password saved."
msgstr "הסיסמה נשמרה."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2375,141 +2538,157 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "עמוד ×–×” ×ינו זמין בסוג מדיה ש×תה יכול לקבל"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "שיחזור"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "הודעה חדשה"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "תמונה"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "הגדרות"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "התמונה עודכנה."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "התמונה עודכנה."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "סמס"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "שיחזור"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "הודעות"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "שיחזור"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "הודעה חדשה"
@@ -2537,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 ""
@@ -2565,13 +2744,13 @@ 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 "×©× ×ž×œ×"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "×תר בית"
@@ -2594,8 +2773,8 @@ msgid "Bio"
msgstr "ביוגרפיה"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "מיקו×"
@@ -2619,7 +2798,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "שפה"
@@ -2645,7 +2824,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיות)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2658,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 "ההגדרות נשמרו."
@@ -2689,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "הזנת ×–×¨× ×”×¦×™×‘×•×¨×™"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2739,7 +2919,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2773,7 +2953,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2910,8 +3090,7 @@ msgstr "שגי××” ב×ישור הקוד."
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "הירש×"
@@ -2950,7 +3129,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -3038,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 "×”×™×¨×©× ×›×ž× ×•×™"
@@ -3079,7 +3258,7 @@ msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון"
msgid "You already repeated that notice."
msgstr "כבר נכנסת למערכת!"
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "צור"
@@ -3089,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "תגובת עבור %s"
+
+#: 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 "
@@ -3136,6 +3320,21 @@ 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"
+msgstr "התמונה עודכנה."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3146,117 +3345,158 @@ msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
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 ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "הגדרות"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "להודעה ×ין פרופיל"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "כינוי"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "מיקו×"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "הרשמות"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "סטטיסטיקה"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s וחברי×"
+
#: actions/showfavorites.php:132
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 "
@@ -3264,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 ""
@@ -3273,71 +3513,76 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "כל המנויי×"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "×ין הודעה כזו."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3347,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."
@@ -3356,7 +3601,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3388,6 +3633,11 @@ msgstr "הודעות"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s וחברי×"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3413,25 +3663,25 @@ msgstr "הזנת הודעות של %s"
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3440,7 +3690,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3448,7 +3698,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "תגובת עבור %s"
@@ -3463,204 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "מיקו×"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "שיחזור"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "קבל"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "פרטיות"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "×ין משתמש ×›×–×”."
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "בעיה בשמירת ההודעה."
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "הגדרות"
+msgid "Save site notice"
+msgstr "הודעה חדשה"
#: actions/smssettings.php:58
#, fuzzy
@@ -3757,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 "×”×™×¨×©× ×›×ž× ×•×™"
@@ -3833,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 "
@@ -3843,31 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "מיקרובלוג מ×ת %s"
+
+#: 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"
@@ -3887,7 +4144,8 @@ msgstr ""
msgid "User profile"
msgstr "למשתמש ×ין פרופיל."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3920,7 +4178,7 @@ msgstr ""
msgid "No such tag."
msgstr "×ין הודעה כזו."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3949,18 +4207,20 @@ msgstr "השרת ×œ× ×”×—×–×™×¨ כתובת פרופיל"
msgid "Unsubscribed"
msgstr "בטל מנוי"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4026,26 +4286,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "×שר מנוי"
@@ -4060,38 +4300,38 @@ msgstr ""
"בדוק ×ת ×”×¤×¨×˜×™× ×›×“×™ ×œ×•×•×“× ×©×‘×¨×¦×•× ×š ×œ×”×™×¨×©× ×›×ž× ×•×™ להודעות משתמש ×–×”. ×× ×ינך רוצה "
"להירש×, לחץ \"בטל\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "קבל"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "ההרשמה ×ושרה"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "דחה"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "כל המנויי×"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "×œ× ×”×ª×‘×§×© ×ישור!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "ההרשמה ×ושרה"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4101,11 +4341,11 @@ msgstr ""
"המנוי ×ושר, ×בל ×œ× ×”×ª×§×‘×œ×” כתובת ×ליה ניתן לחזור. בדוק ×ת הור×ות ×”×תר וחפש "
"כיצד ל×שר מנוי. ×סימון המנוי שלך הו×:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "ההרשמה נדחתה"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4115,37 +4355,37 @@ msgstr ""
"המנוי נדחה, ×בל ×œ× ×”×ª×§×‘×œ×” כתובת לחזרה. בדוק ×ת הור×ות ×”×תר וחפש כיצד ×œ×”×©×œ×™× "
"דחיית מנוי."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ת ×”-URL '%s' של התמונה"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "סוג התמונה של '%s' ×ינו מת××™×"
@@ -4165,20 +4405,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "כל המנויי×"
+
#: actions/usergroups.php:130
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"
@@ -4191,11 +4442,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "התמונה עודכנה."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4227,7 +4473,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "×ישי"
@@ -4268,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"
@@ -4285,65 +4536,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "שגי×ת מסד × ×ª×•× ×™× ×‘×”×›× ×¡×ª התגובה: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 ""
@@ -4383,131 +4676,185 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "בית"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "התחבר"
+msgstr "שנה סיסמה"
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "נכשלה ההפניה לשרת: %s"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "התחבר"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "הרשמות"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "צ×"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "גודל ×œ× ×—×•×§×™."
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "עזרה"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "היכנס"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "עזרה"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "חיפוש"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "עזרה"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "הודעה חדשה"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "הרשמות"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "עזרה"
+
+#: lib/action.php:754
msgid "About"
msgstr "×ודות"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "רשימת ש×לות נפוצות"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "פרטיות"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "מקור"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "צור קשר"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4516,12 +4863,12 @@ msgstr ""
"**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4532,139 +4879,221 @@ msgstr ""
"s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)"
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "הודעה חדשה"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "<< ×חרי"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "הרשמות"
+
+#. 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 "הרשמות"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "הרשמות"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "הרשמות"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "ת×ר ×ת עצמך ו×ת נוש××™ העניין שלך ב-140 ×ותיות"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "ת×ר ×ת עצמך ו×ת נוש××™ העניין שלך ב-140 ×ותיות"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "מקור"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "הכתובת של ×תר הבית שלך, בלוג, ×ו פרופיל ב×תר ×חר "
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "הכתובת של ×תר הבית שלך, בלוג, ×ו פרופיל ב×תר ×חר "
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4694,12 +5123,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "הסיסמה נשמרה."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "הסיסמה נשמרה."
@@ -4855,83 +5284,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"
@@ -4945,6 +5384,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"
@@ -4972,20 +5412,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "×ין קוד ×ישור."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5086,6 +5526,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"
@@ -5180,33 +5625,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5410,7 +5855,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 ""
@@ -5501,6 +5946,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"
@@ -5535,52 +5986,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "×ין תוכן!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "צור"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "הגב"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "הודעות"
@@ -5614,11 +6065,7 @@ msgstr "שגי××” בהכנסת פרופיל מרוחק"
msgid "Duplicate notice"
msgstr "הודעה חדשה"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "הכנסת מנוי חדש נכשלה."
@@ -5634,19 +6081,19 @@ msgstr "תגובות"
msgid "Favorites"
msgstr "מועדפי×"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5659,7 +6106,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 "הרשמות"
@@ -5667,25 +6114,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 ""
@@ -5729,6 +6176,15 @@ msgstr "×ין הודעה כזו."
msgid "Repeat this notice"
msgstr "×ין הודעה כזו."
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5747,6 +6203,10 @@ msgstr "חיפוש"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "חיפוש"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5801,37 +6261,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"
@@ -5886,69 +6324,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "לפני כיו×"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "לפני ×›-%d ימי×"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "לפני ×›-%d חודשי×"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "לפני כשנה"
@@ -5962,7 +6415,7 @@ msgstr "ל×תר הבית יש כתובת ×œ× ×—×•×§×™×ª."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index 2355fd8e9..8c129a376 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -9,24 +9,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:44+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:43+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Přistup"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Sydłowe nastajenja składować"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Registrować"
+
+#. 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 "Priwatny"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Jenož přeprosyć"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Nowe registrowanja znjemóžnić."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "ZaÄinjeny"
+
+#. 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/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
@@ -35,83 +98,92 @@ msgstr "Strona njeeksistuje"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -121,22 +193,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -151,7 +223,7 @@ msgstr "API-metoda njenamakana."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Tuta metoda wužaduje sej POST."
@@ -169,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."
@@ -180,7 +253,7 @@ msgstr "Profil njeje so składować dał."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -194,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."
@@ -296,76 +369,76 @@ msgstr "Njemóžeš slědowanje swójskich aktiwitow blokować."
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr ""
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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ć."
@@ -376,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ć."
@@ -393,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ć."
@@ -413,94 +486,110 @@ msgstr ""
msgid "groups on %s"
msgstr "skupiny na %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Njepłaćiwe přimjeno abo hesło!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
-msgstr ""
+#: actions/apioauthauthorize.php:159
+#, fuzzy
+msgid "Database error deleting OAuth application user."
+msgstr "Zmylk datoweje banki při zasunjenju wužiwarja OAuth-aplikacije."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+#, fuzzy
+msgid "Database error inserting OAuth application user."
msgstr "Zmylk datoweje banki při zasunjenju wužiwarja OAuth-aplikacije."
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Přimjeno"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Hesło"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Wotpokazać"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Dowolić"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -533,17 +622,17 @@ msgstr "Status zniÄeny."
msgid "No status with that ID found."
msgstr "Žadyn status z tym ID namakany."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "To je předołho. Maksimalna wulkosć zdźělenki je %d znamješkow."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Njenamakany"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -557,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"
@@ -594,27 +671,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ""
@@ -630,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."
@@ -643,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"
@@ -661,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -692,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 ""
@@ -723,22 +794,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Haj"
-#: actions/block.php:144 actions/groupmembers.php:346 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ć"
@@ -746,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 ""
@@ -834,16 +910,60 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Dyrbiš přizjewjeny być, zo by skupinu wobdźěłał."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Aplikaciski profil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Aplikacija njeeksistuje."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Tutu zdźělenku njewušmórnyć"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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."
@@ -870,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Tutu zdźělenku wušmórnyć"
@@ -886,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"
@@ -1001,12 +1121,13 @@ 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:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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ć"
@@ -1022,32 +1143,25 @@ msgstr "Tuta zdźělenka faworit njeje!"
msgid "Add to favorites"
msgstr "K faworitam přidać"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Dokument njeeksistuje."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Aplikacije OAuth"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wobdźěłał."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Njejsy wobsedźer tuteje aplikacije."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Aplikacija njeeksistuje."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Wužij tutón formular, zo by aplikaciju wobdźěłał."
@@ -1056,43 +1170,48 @@ msgstr "Wužij tutón formular, zo by aplikaciju wobdźěłał."
msgid "Name is required."
msgstr "Mjeno je trěbne."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Mjeno je předołho (maks. 255 znamješkow)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Přimjeno so hižo wužiwa. Spytaj druhe."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Wopisanje je trěbne."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "URL žórła płaćiwy njeje."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "Mjeno organizacije je předołho (maks. 255 znamješkow)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Aplikacija njeda so aktualizować."
@@ -1105,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."
@@ -1162,8 +1281,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Přetorhnyć"
@@ -1243,7 +1362,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Njepłaćiwa e-mejlowa adresa."
@@ -1255,7 +1374,7 @@ msgstr "To je hižo twoja e-mejlowa adresa."
msgid "That email address already belongs to another user."
msgstr "Ta e-mejlowa adresa hižo słuša k druhemu wužiwarjej."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr ""
@@ -1314,7 +1433,7 @@ msgstr "Tuta zdźělenka je hižo faworit!"
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Woblubowane zdźělenki"
@@ -1427,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
@@ -1456,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Wužiwarja za skupinu blokować"
@@ -1488,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."
@@ -1519,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokować"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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"
@@ -1724,6 +1868,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "To njeje twój ID Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1802,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"
@@ -1846,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 ""
@@ -1855,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 ""
@@ -1876,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Přizjewić"
@@ -1910,21 +2066,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s je hižo administrator za skupinu \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "PÅ™istup na datowu sadźbu ÄÅ‚ona %1$S w skupinje %2$s móžno njeje."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Njeje móžno %1$S k administratorej w skupinje %2$s Äinić."
@@ -1934,8 +2090,9 @@ msgid "No current status"
msgstr "Žadyn aktualny status"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Aplikacija njeeksistuje."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -1945,11 +2102,11 @@ msgstr "Dyrbiš přizjewjeny być, zo by aplikaciju registrował."
msgid "Use this form to register a new application."
msgstr "Wužij tutón formular, zo by nowu aplikaciju registrował."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Aplikacija njeda so wutworić."
@@ -2074,28 +2231,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Njejsy wužiwar tuteje aplikacije."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2116,8 +2273,8 @@ msgstr ""
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2181,6 +2338,11 @@ msgstr "Njepłaćiwe přizjewjenske znamješko podate."
msgid "Login token expired."
msgstr "Přizjewjenske znamješko spadnjene."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2251,7 +2413,8 @@ msgstr ""
msgid "Password saved."
msgstr "Hesło składowane."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Šćežki"
@@ -2259,132 +2422,147 @@ msgstr "Šćežki"
msgid "Path and server settings for this StatusNet site."
msgstr "Šćežka a serwerowe nastajenja za tute sydło StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Sydło"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Serwer"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Šćežka"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Sydłowa šćežka"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Šćežka k lokalam"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Zapisowa šćežka k lokalam"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Å at"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Å atowy serwer"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Šatowa šćežka"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Å atowy zapis"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Awatary"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Awatarowy serwer"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Awatarowa šćežka"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Awatarowy zapis"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Pozadki"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Pozadkowy serwer"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Pozadkowa šćežka"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Pozadkowy zapis"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ženje"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Druhdy"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Přeco"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "SSL wužiwać"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-serwer"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Šćežki składować"
@@ -2409,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 ""
@@ -2436,13 +2614,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Startowa strona"
@@ -2464,8 +2642,8 @@ msgid "Bio"
msgstr "Biografija"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Městno"
@@ -2489,7 +2667,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "RÄ›Ä"
@@ -2515,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ÄŒasowe pasmo njeje wubrane."
@@ -2528,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."
@@ -2557,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2604,7 +2783,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2637,7 +2816,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2774,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrować"
@@ -2814,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mejl"
@@ -2898,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ć"
@@ -2934,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Wospjetowany"
@@ -2942,42 +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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr ""
+
+#: 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 "
@@ -2989,6 +3172,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -2997,113 +3194,155 @@ msgstr ""
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 "Posedźenja"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "Designowe nastajenja za tute sydło StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Z posedźenjemi wobchadźeć"
+
+#: 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 "Sydłowe nastajenja składować"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr "Dyrbiš přizjewjeny być, zo by sej aplikaciju wobhladał."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Aplikaciski profil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Mjeno"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Organizacija"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Wopisanje"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistika"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "URL awtorizować"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Chceš woprawdźe tutu zdźělenku wušmórnyć?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%1$s a přećeljo, strona %2$d"
+
#: actions/showfavorites.php:132
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 "
@@ -3111,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 ""
@@ -3120,67 +3359,72 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Skupinski profil"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3190,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."
@@ -3199,7 +3443,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratorojo"
@@ -3230,6 +3474,11 @@ msgstr "Zdźělenka zniÄena."
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s a přećeljo, strona %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3255,25 +3504,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr "FOAF za %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3282,7 +3531,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3290,7 +3539,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr ""
@@ -3304,196 +3553,135 @@ 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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Njeznata rÄ›Ä \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Powšitkowny"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Sydłowe mjeno"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalny"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardne Äasowe pasmo"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Standardna sydÅ‚owa rÄ›Ä"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Serwer"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Přistup"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Priwatny"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Jenož přeprosyć"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "ZaÄinjeny"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Nowe registrowanja znjemóžnić."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frekwenca"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-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:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limity"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstowy limit"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksimalna liÄba znamjeÅ¡kow za zdźělenki."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
+#: 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
@@ -3588,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"
@@ -3660,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 "
@@ -3670,30 +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:86
+#: 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: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 ""
@@ -3711,7 +3975,8 @@ msgstr ""
msgid "User profile"
msgstr "Wužiwarski profil"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -3742,7 +4007,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3766,18 +4031,20 @@ msgstr ""
msgid "Unsubscribed"
msgstr "Wotskazany"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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."
@@ -3839,26 +4106,6 @@ msgstr "Přeprošenja zmóžnjene"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Posedźenja"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Z posedźenjemi wobchadźeć"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr ""
@@ -3870,84 +4117,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licenca"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Akceptować"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Tutoho wužiwarja abonować"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Wotpokazać"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Tutón abonement wotpokazać"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Abonement awtorizowany"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abonement wotpokazany"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -3966,20 +4213,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
+
#: actions/usergroups.php:130
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"
@@ -3992,10 +4250,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4027,7 +4281,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersija"
@@ -4064,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"
@@ -4081,61 +4340,99 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: 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 ""
@@ -4173,136 +4470,200 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bjez titula"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-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:433
-msgid "Personal profile and friends timeline"
-msgstr ""
+#, 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:438
+#: lib/action.php:443
msgid "Connect"
msgstr "Zwjazać"
-#: lib/action.php:438
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:442
+#. 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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Přeprosyć"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr ""
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Přeprosyć"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Pomoc"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Přizjewić"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomhaj!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Pytać"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Pomoc"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Pomoc"
+
+#: lib/action.php:754
msgid "About"
msgstr "Wo"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Huste prašenja"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Priwatnosć"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Žórło"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: 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:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4310,130 +4671,212 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS-wobkrućenje"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Wopisaj swoju aplikaciju z %d znamješkami"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Wopisaj swoju aplikaciju"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "URL žórła"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4461,11 +4904,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: 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:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Změnjenje hesła njeje dowolene"
@@ -4613,54 +5056,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ł:"
@@ -4668,11 +5121,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:"
@@ -4680,11 +5133,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:"
@@ -4692,7 +5145,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"
@@ -4706,6 +5159,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"
@@ -4733,19 +5187,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Žana konfiguraciska dataja namakana. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4842,6 +5296,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 ""
@@ -4931,32 +5390,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Njeznate žórło postoweho kašćika %d."
@@ -5151,7 +5610,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"
@@ -5240,6 +5699,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ć"
@@ -5271,48 +5736,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Wospjetowany wot"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Na tutu zdźělenku wotmołwić"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Wotmołwić"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Zdźělenka wospjetowana"
@@ -5344,11 +5809,7 @@ msgstr "Zmylk při zasunjenju zdaleneho profila"
msgid "Duplicate notice"
msgstr "Dwójna zdźělenka"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5364,19 +5825,19 @@ msgstr "Wotmołwy"
msgid "Favorites"
msgstr "Fawority"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Twoje dochadźace powěsće"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Twoje pósłane powěsće"
@@ -5389,7 +5850,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"
@@ -5397,23 +5858,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"
@@ -5453,6 +5914,15 @@ msgstr "Tutu zdźělenku wospjetować?"
msgid "Repeat this notice"
msgstr "Tutu zdźělenku wospjetować"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5469,6 +5939,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"
@@ -5520,34 +5994,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"
@@ -5598,67 +6053,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
@@ -5674,7 +6145,7 @@ msgstr ""
"%s płaćiwa barba njeje! Wužij 3 heksadecimalne znamješka abo 6 "
"heksadecimalnych znamješkow."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index b54150d95..4116b91d5 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,23 +8,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:47+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:46+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Accesso"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Configurationes de accesso al sito"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registration"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Private"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Permitter le registration solmente al invitatos."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Solmente per invitation"
+
+#. 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."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Claudite"
+
+#. 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/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
@@ -33,51 +93,58 @@ msgstr "Pagina non existe"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 profilos blocate, pagina %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."
@@ -85,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 "
@@ -94,16 +161,17 @@ msgstr ""
"Proba subscriber te a altere personas, [face te membro de un gruppo](%%"
"action.groups%%) o publica alique tu mesme."
-#: actions/all.php:134
-#, fuzzy, php-format
+#. 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 ""
-"Tu pote tentar [dar un pulsata a %s](../%s) in su profilo o [publicar un "
-"message a su attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar [dar un pulsata a %1$s](../%2$s) in su profilo o [publicar un "
+"message a su attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -112,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!"
@@ -127,22 +196,22 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -157,7 +226,7 @@ msgstr "Methodo API non trovate."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Iste methodo require un POST."
@@ -177,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."
@@ -188,7 +258,7 @@ msgstr "Non poteva salveguardar le profilo."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -204,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."
@@ -270,18 +340,16 @@ msgid "No status found with that ID."
msgstr "Nulle stato trovate con iste ID."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite."
-msgstr "Iste stato es ja favorite!"
+msgstr "Iste stato es ja favorite."
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "Non poteva crear le favorite."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite."
-msgstr "Iste stato non es favorite!"
+msgstr "Iste stato non es favorite."
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -301,84 +369,83 @@ msgid "Could not unfollow user: User not found."
msgstr "Non poteva cessar de sequer le usator: Usator non trovate."
#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
msgid "You cannot unfollow yourself."
-msgstr "Tu non pote cessar de sequer te mesme!"
+msgstr "Tu non pote cessar de sequer te mesme."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Duo IDs de usator o pseudonymos debe esser fornite."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Non poteva determinar le usator de origine."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -389,27 +456,27 @@ 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
-#, fuzzy, php-format
+#: 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 %s in le gruppo %s."
+msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
msgstr "Tu non es membro de iste gruppo."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
-#, fuzzy, php-format
+#: 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 %s del gruppo %s."
+msgstr "Non poteva remover le usator %1$s del gruppo %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -426,100 +493,117 @@ msgstr "Gruppos de %s"
msgid "groups on %s"
msgstr "gruppos in %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Nulle parametro oauth_token fornite."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Occurreva un problema con le indicio de tu session. Per favor reproba."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "Nomine de usator o contrasigno invalide."
+msgstr "Nomine de usator o contrasigno invalide!"
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Error durante le configuration del usator."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr ""
+"Error del base de datos durante le deletion del usator del application OAuth."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "Error durante le configuration del usator."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr ""
+"Error del base de datos durante le insertion del usator del application "
+"OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"Le indicio de requesta %s ha essite autorisate. Per favor excambia lo pro un "
+"indicio de accesso."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "Le indicio de requesta %s ha essite refusate e revocate."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Submission de formulario inexpectate."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Un application vole connecter se a tu conto"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Permitter o refusar accesso"
+
+#: 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 ""
+"Le application <strong>%1$s</strong> per <strong>%2$s</strong> vole poter "
+"<strong>%3$s</strong> le datos de tu conto de %4$s. Tu debe solmente dar "
+"accesso a tu conto de %4$s a tertie personas in le quales tu ha confidentia."
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
-msgstr ""
+msgstr "Conto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Pseudonymo"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Contrasigno"
-#: actions/apioauthauthorize.php:338
-#, fuzzy
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr "Apparentia"
+msgstr "Refusar"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr ""
+msgstr "Permitter"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Permitter o refusar accesso al informationes de tu conto."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -550,18 +634,18 @@ msgstr "Stato delite."
msgid "No status with that ID found."
msgstr "Nulle stato trovate con iste ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
"Isto es troppo longe. Le longitude maximal del notas es %d characteres."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Non trovate"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -573,26 +657,14 @@ msgid "Unsupported format."
msgstr "Formato non supportate."
#: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favorites de %s"
-
-#: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s actualisationes favoritisate 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 "Chronologia de %s"
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Favorites de %2$s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
+#: actions/apitimelinefavorites.php:117
#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualisationes de %1$s in %2$s!"
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
#: actions/apitimelinementions.php:117
#, php-format
@@ -615,27 +687,22 @@ msgstr "Chronologia public de %s"
msgid "%s updates from everyone!"
msgstr "Actualisationes de totes in %s!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repetite per %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -646,13 +713,12 @@ msgstr "Non trovate."
#: actions/attachment.php:73
msgid "No such attachment."
-msgstr "Attachamento non existe."
+msgstr "Annexo non existe."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: 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."
@@ -664,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"
@@ -672,7 +738,8 @@ msgstr "Avatar"
#: actions/avatarsettings.php:78
#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Tu pote cargar tu avatar personal. Le dimension maxime del file es %s."
+msgstr ""
+"Tu pote incargar tu avatar personal. Le dimension maximal del file es %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "Cargar"
+msgstr "Incargar"
-#: actions/avatarsettings.php:231 actions/grouplogo.php:286
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
msgid "Crop"
msgstr "Taliar"
@@ -712,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."
@@ -746,22 +813,23 @@ msgstr ""
"cancellate, ille non potera resubscriber se a te in le futuro, e tu non "
"recipera notification de su @-responsas."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Si"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocar iste usator"
@@ -769,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
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:100
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s profilos blocate, pagina %d"
+msgstr "%1$s profilos blocate, pagina %2$d"
-#: actions/blockedfromgroup.php:108
+#: 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"
@@ -844,7 +916,6 @@ msgid "Couldn't delete email confirmation."
msgstr "Non poteva deler confirmation de e-mail."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Confirmar adresse"
@@ -858,16 +929,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Tu debe aperir un session pro deler un application."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Application non trovate."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Il habeva un problema con tu indicio de session."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Deler application"
+
+#: 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 ""
+"Es tu secur de voler deler iste application? Isto radera tote le datos super "
+"le application del base de datos, includente tote le existente connexiones "
+"de usator."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Non deler iste application"
+
+#: actions/deleteapplication.php:160
+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."
@@ -896,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Deler iste nota"
@@ -912,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."
@@ -920,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"
@@ -977,8 +1090,8 @@ msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-"Tu pote cargar un imagine de fundo pro le sito. Le dimension maxime del file "
-"es %1$s."
+"Tu pote incargar un imagine de fundo pro le sito. Le dimension maximal del "
+"file es %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -1030,12 +1143,13 @@ msgstr "Revenir al predefinitiones"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1051,88 +1165,75 @@ msgstr "Iste nota non es favorite!"
msgid "Add to favorites"
msgstr "Adder al favorites"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Documento non existe."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Le documento \"%s\" non existe."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Modificar application"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Tu debe aperir un session pro modificar un gruppo."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Tu non es membro de iste gruppo."
+msgstr "Tu debe aperir un session pro modificar un application."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Nota non trovate."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
+msgstr "Application non trovate."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Usa iste formulario pro modificar le gruppo."
+msgstr "Usa iste formulario pro modificar le application."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Identic al contrasigno hic supra. Requisite."
+msgstr "Le nomine es requirite."
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Le nomine complete es troppo longe (max. 255 characteres)."
+msgstr "Le nomine es troppo longe (max. 255 characteres)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Nomine ja in uso. Proba un altere."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr ""
+msgstr "Le description es requirite."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "Le URL de origine es troppo longe."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "Le pagina personal non es un URL valide."
+msgstr "Le URL de origine non es valide."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Le organisation es requirite."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Loco es troppo longe (max. 255 characteres)."
+msgstr "Le organisation es troppo longe (max. 255 characteres)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Le sito web del organisation es requirite."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Le reappello (callback) es troppo longe."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Le URL de reappello (callback) non es valide."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "Non poteva actualisar gruppo."
+msgstr "Non poteva actualisar application."
#: actions/editgroup.php:56
#, php-format
@@ -1143,35 +1244,33 @@ 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
-#, 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 "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."
#: actions/emailsettings.php:60
-#, fuzzy
msgid "Email settings"
msgstr "Configuration de e-mail"
@@ -1204,15 +1303,14 @@ msgstr ""
"spam!) pro un message con ulterior instructiones."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancellar"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
-msgstr "Adresses de e-mail"
+msgstr "Adresse de e-mail"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1259,7 +1357,7 @@ msgstr "Inviar me e-mail quando alcuno me invia un message private."
#: actions/emailsettings.php:174
msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Inviar me e-mail quando alcuno me invia un \"@-responsa\"."
+msgstr "Inviar me e-mail quando alcuno me invia un \"responsa @\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
@@ -1287,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse de e-mail invalide."
@@ -1299,7 +1397,7 @@ msgstr "Isto es ja tu adresse de e-mail."
msgid "That email address already belongs to another user."
msgstr "Iste adresse de e-mail pertine ja a un altere usator."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Non poteva inserer le codice de confirmation."
@@ -1361,7 +1459,7 @@ msgstr "Iste nota es ja favorite!"
msgid "Disfavor favorite"
msgstr "Disfavorir favorite"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Notas popular"
@@ -1433,11 +1531,11 @@ msgstr "Nulle nota."
#: actions/file.php:42
msgid "No attachments."
-msgstr "Nulle attachamento."
+msgstr "Nulle annexo."
#: actions/file.php:51
msgid "No uploaded attachments."
-msgstr "Nulle attachamento cargate."
+msgstr "Nulle annexo incargate."
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1479,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
@@ -1508,20 +1625,20 @@ msgstr "Le usator es ja blocate del gruppo."
msgid "User is not a member of group."
msgstr "Le usator non es membro del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blocar usator del gruppo"
#: actions/groupblock.php:162
-#, fuzzy, php-format
+#, php-format
msgid ""
"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
-"Es tu secur de voler blocar le usator \"%s\" del gruppo \"%s\"? Ille essera "
-"removite del gruppo, non potera publicar messages, e non potera subscriber "
-"se al gruppo in le futuro."
+"Es tu secur de voler blocar le usator \"%1$s\" del gruppo \"%2$s\"? Ille "
+"essera removite del gruppo, non potera publicar messages, e non potera "
+"subscriber se al gruppo in le futuro."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1543,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."
@@ -1555,84 +1672,89 @@ 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."
msgstr ""
-"Tu pote cargar un imagine pro le logotypo de tu gruppo. Le dimension maxime "
-"del file es %s."
+"Tu pote incargar un imagine pro le logotypo de tu gruppo. Le dimension "
+"maximal del file es %s."
-#: actions/grouplogo.php:178
-#, fuzzy
+#: 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
-#, fuzzy, php-format
+#: actions/groupmembers.php:103
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "Membros del gruppo %s, pagina %d"
+msgstr "Membros del gruppo %1$s, pagina %2$d"
-#: actions/groupmembers.php:111
+#: 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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blocar"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Facer le usator administrator del gruppo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Facer administrator"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1710,7 +1832,6 @@ msgid "Error removing the block."
msgstr "Error de remover le blocada."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
msgstr "Configuration de messageria instantanee"
@@ -1741,7 +1862,6 @@ msgstr ""
"message con ulterior instructiones. (Ha tu addite %s a tu lista de amicos?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
msgstr "Adresse de messageria instantanee"
@@ -1806,6 +1926,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Isto non es tu ID de Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Cassa de entrata de %1$s - pagina %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1846,7 +1971,7 @@ msgstr "Tu es a subscribite a iste usatores:"
#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
#, php-format
msgid "%1$s (%2$s)"
-msgstr ""
+msgstr "%1$s (%2$s)"
#: actions/invite.php:136
msgid ""
@@ -1889,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"
@@ -1959,23 +2087,28 @@ 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
-#, fuzzy, php-format
+#: 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 "%s se faceva membro del gruppo %s"
+msgstr "%1$s es ora membro del gruppo %2$s"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
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
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s quitava le gruppo %s"
+msgstr "%1$s quitava le gruppo %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1990,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Aperir session"
@@ -2028,53 +2160,50 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
"Aperi un session con tu nomine de usator e contrasigno. Non ha ancora un "
-"nomine de usator? [Registra](%%action.register%%) un nove conto."
+"nomine de usator? [Crea](%%action.register%%) un nove conto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Solmente un administrator pote facer un altere usator administrator."
-#: actions/makeadmin.php:95
-#, fuzzy, php-format
+#: actions/makeadmin.php:96
+#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%s es ja administrator del gruppo \"%s\"."
+msgstr "%1$s es ja administrator del gruppo \"%2$s\"."
-#: actions/makeadmin.php:132
-#, fuzzy, php-format
+#: actions/makeadmin.php:133
+#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Non poteva obtener le datos del membrato de %s in le gruppo %s"
+msgstr "Non pote obtener le datos del membrato de %1$s in le gruppo %2$s."
-#: actions/makeadmin.php:145
-#, fuzzy, php-format
+#: actions/makeadmin.php:146
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Non pote facer %s administrator del gruppo %s"
+msgstr "Non pote facer %1$s administrator del gruppo %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "Nulle stato actual"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "Nove application"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Tu debe aperir un session pro crear un gruppo."
+msgstr "Tu debe aperir un session pro registrar un application."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Usa iste formulario pro crear un nove gruppo."
+msgstr "Usa iste formulario pro registrar un nove application."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Le URL de origine es requirite."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "Non poteva crear aliases."
+msgstr "Non poteva crear application."
#: actions/newgroup.php:53
msgid "New group"
@@ -2113,9 +2242,9 @@ msgid "Message sent"
msgstr "Message inviate"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Message directe a %s inviate"
+msgstr "Message directe a %s inviate."
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
@@ -2143,9 +2272,9 @@ msgid "Text search"
msgstr "Recerca de texto"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Resultatos del recerca de \"%s\" in %s"
+msgstr "Resultatos del recerca de \"%1$s\" in %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2192,48 +2321,48 @@ msgid "Nudge sent!"
msgstr "Pulsata inviate!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Tu debe aperir un session pro modificar un gruppo."
+msgstr "Tu debe aperir un session pro listar tu applicationes."
#: actions/oauthappssettings.php:74
msgid "OAuth applications"
-msgstr ""
+msgstr "Applicationes OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Applicationes que tu ha registrate"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Tu non ha ancora registrate alcun application."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Applicationes connectite"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Tu ha permittite al sequente applicationes de acceder a tu conto."
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "Tu non es membro de iste gruppo."
+msgstr "Tu non es usator de iste application."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Impossibile revocar le accesso del application: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Tu non ha autorisate alcun application a usar tu conto."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Le programmatores pote modificar le parametros de registration pro lor "
+"applicationes "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2252,8 +2381,8 @@ msgstr "typo de contento "
msgid "Only "
msgstr "Solmente "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2266,7 +2395,6 @@ msgid "Notice Search"
msgstr "Rercerca de notas"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Altere configurationes"
@@ -2299,28 +2427,29 @@ msgid "URL shortening service is too long (max 50 chars)."
msgstr "Le servicio de accurtamento de URL es troppo longe (max 50 chars)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
-msgstr "Nulle gruppo specificate."
+msgstr "Nulle identificator de usator specificate."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "Nulle nota specificate."
+msgstr "Nulle indicio de identification specificate."
#: actions/otp.php:90
msgid "No login token requested."
-msgstr ""
+msgstr "Nulle indicio de identification requestate."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "Indicio invalide o expirate."
+msgstr "Indicio de identification invalide specificate."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "Identificar te a iste sito"
+msgstr "Le indicio de identification ha expirate."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Cassa de exito de %1$s - pagina %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2393,7 +2522,8 @@ msgstr "Non pote salveguardar le nove contrasigno."
msgid "Password saved."
msgstr "Contrasigno salveguardate."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camminos"
@@ -2401,133 +2531,147 @@ msgstr "Camminos"
msgid "Path and server settings for this StatusNet site."
msgstr "Configuration de cammino e servitor pro iste sito StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Directorio de thema non legibile: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Directorio de avatar non scriptibile: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Directorio de fundo non scriptibile: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Directorio de localitates non scriptibile: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr "Servitor SSL invalide. Le longitude maxime es 255 characteres."
+msgstr "Servitor SSL invalide. Le longitude maximal es 255 characteres."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Sito"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servitor"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nomine de host del servitor del sito."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Cammino"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Cammino del sito"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Cammino al localitates"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Cammino al directorio de localitates"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URLs de luxo"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Usar URLs de luxo (plus legibile e memorabile)?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Thema"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Servitor de themas"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Cammino al themas"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Directorio del themas"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatares"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Servitor de avatares"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Cammino al avatares"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Directorio del avatares"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Fundos"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Servitor de fundos"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Cammino al fundos"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Directorio al fundos"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunquam"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Alcun vices"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Sempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Usar SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Quando usar SSL"
-#: actions/pathsadminpanel.php:308
-#, fuzzy
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Servitor SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Servitor verso le qual diriger le requestas SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Salveguardar camminos"
@@ -2550,19 +2694,20 @@ msgid "Not a valid people tag: %s"
msgstr "Etiquetta de personas invalide: %s"
#: actions/peopletag.php:144
-#, fuzzy, php-format
+#, php-format
msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Usatores auto-etiquettate con %s - pagina %d"
+msgstr "Usatores auto-etiquettate con %1$s - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Le contento del nota es invalide"
-#: 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 ""
-"Le licentia del nota '%s' non es compatibile con le licentia del sito '%s'."
+"Le licentia del nota ‘%1$s’ non es compatibile con le licentia del sito ‘%2"
+"$s’."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2584,13 +2729,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Pagina personal"
@@ -2612,8 +2757,8 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Loco"
@@ -2639,7 +2784,7 @@ msgstr ""
"Etiquettas pro te (litteras, numeros, -, ., e _), separate per commas o "
"spatios"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2666,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horari non seligite."
@@ -2679,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."
@@ -2708,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Syndication del fluxo public (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Syndication del fluxo public (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Syndication del fluxo public (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2738,11 +2884,11 @@ msgstr ""
"Isto es le chronologia public pro %%site.name%%, ma nulle persona ha ancora "
"scribite alique."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Sia le prime a publicar!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2750,7 +2896,7 @@ msgstr ""
"Proque non [registrar un conto](%%action.register%%) e devenir le prime a "
"publicar?"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2763,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2786,7 +2932,7 @@ msgstr "Istes es le etiquettas recente le plus popular in %s "
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
msgstr ""
-"Nulle persona ha ancora publicate un nota con un [hashtag](%%doc.tags%%) yet."
+"Nulle persona ha ancora publicate un nota con un [hashtag](%%doc.tags%%)."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
@@ -2801,7 +2947,7 @@ msgstr ""
"Proque non [registrar un conto](%%action.register%%) e devenir le prime a "
"publicar un?"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Etiquettario"
@@ -2941,10 +3087,9 @@ 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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
-msgstr "Crear un conto"
+msgstr "Crear conto"
#: actions/register.php:135
msgid "Registration not allowed."
@@ -2952,8 +3097,7 @@ msgstr "Registration non permittite."
#: actions/register.php:198
msgid "You can't register if you don't agree to the license."
-msgstr ""
-"Tu non pote registrar te si tu non te declara de accordo con le licentia."
+msgstr "Tu non pote crear un conto si tu non accepta le licentia."
#: actions/register.php:212
msgid "Email address already exists."
@@ -2973,18 +3117,18 @@ msgstr ""
#: actions/register.php:425
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1-64 minusculas o numeros, sin punctuation o spatios. Requisite."
+msgstr "1-64 minusculas o numeros, sin punctuation o spatios. Requirite."
#: actions/register.php:430
msgid "6 or more characters. Required."
-msgstr "6 o plus characteres. Requisite."
+msgstr "6 o plus characteres. Requirite."
#: actions/register.php:434
msgid "Same as password above. Required."
-msgstr "Identic al contrasigno hic supra. Requisite."
+msgstr "Identic al contrasigno hic supra. Requirite."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3000,7 +3144,7 @@ msgstr "Nomine plus longe, preferibilemente tu nomine \"real\""
#: actions/register.php:494
msgid "My text and files are available under "
-msgstr "Mi texto e files es disponibile sub "
+msgstr "Mi texto e files es disponibile sub le licentia "
#: actions/register.php:496
msgid "Creative Commons Attribution 3.0"
@@ -3015,7 +3159,7 @@ msgstr ""
"messageria instantanee, numero de telephono."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3032,9 +3176,9 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Felicitationes, %s! Benvenite a %%%%site.name%%%%. Ora tu pote...\n"
+"Felicitationes, %1$s! Benvenite a %%%%site.name%%%%. Ora tu pote...\n"
"\n"
-"* Visitar [tu profilo](%s) e publicar tu prime message.\n"
+"* Visitar [tu profilo](%2$s) e publicar tu prime message.\n"
"* Adder un [adresse Jabber/GTalk](%%%%action.imsettings%%%%) pro poter "
"inviar notas per messages instantanee.\n"
"* [Cercar personas](%%%%action.peoplesearch%%%%) que tu cognosce o con que "
@@ -3091,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"
@@ -3129,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetite"
@@ -3137,37 +3281,42 @@ 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:144
+#: 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: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
-#, 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 ""
-"Isto es le chronologia de responsas a %s, ma %s non ha ancora recipite alcun "
-"nota a su attention."
+"Isto es le chronologia de responsas a %1$s, ma %2$s non ha ancora recipite "
+"alcun nota a su attention."
-#: actions/replies.php:203
+#: actions/replies.php:204
#, php-format
msgid ""
"You can engage other users in a conversation, subscribe to more people or "
@@ -3176,20 +3325,34 @@ msgstr ""
"Tu pote facer conversation con altere usatores, subscriber te a plus "
"personas o [devenir membro de gruppos](%%action.groups%%)."
-#: 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 ""
-"Tu pote tentar [pulsar %s](../%s) o [publicar alique a su attention](%%%%"
-"action.newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar [pulsar %1$s](../%2$s) o [publicar alique a su attention](%%%%"
+"action.newnotice%%%%?status_textarea=%3$s)."
#: actions/repliesrss.php:72
#, php-format
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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
@@ -3198,103 +3361,142 @@ 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:390
+msgid "Sessions"
+msgstr "Sessiones"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Parametros de session pro iste sito StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gerer sessiones"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Si nos debe gerer le sessiones nos mesme."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Cercar defectos de session"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Producer informationes technic pro cercar defectos in sessiones."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Salveguardar configurationes del sito"
+
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Tu debe aperir un session pro quitar un gruppo."
+msgstr "Tu debe aperir un session pro vider un application."
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "Le nota ha nulle profilo"
+msgstr "Profilo del application"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icone"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "Pseudonymo"
+msgstr "Nomine"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr ""
+msgstr "Organisation"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
-msgstr ""
+msgstr "Description"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statisticas"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Create per %1$s - accesso %2$s per predefinition - %3$d usatores"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Actiones de application"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "Reinitialisar clave e secreto"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Info del application"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
-msgstr ""
+msgstr "Clave de consumitor"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
-msgstr ""
+msgstr "Secreto de consumitor"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL del indicio de requesta"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL del indicio de accesso"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr ""
+msgstr "URL de autorisation"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Nota: Nos supporta le signaturas HMAC-SHA1. Nos non accepta signaturas in "
+"texto simple."
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Es tu secur de voler reinitialisar tu clave e secreto de consumitor?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Notas favorite de %1$s, pagina %2$d"
#: actions/showfavorites.php:132
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."
@@ -3303,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 "
@@ -3312,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 "
@@ -3323,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."
@@ -3332,67 +3534,72 @@ msgstr "Isto es un modo de condivider lo que te place."
msgid "%s group"
msgstr "Gruppo %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Gruppo %1$s, pagina %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profilo del gruppo"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3407,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."
@@ -3420,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"
@@ -3451,10 +3658,15 @@ msgstr "Nota delite."
msgid " tagged %s"
msgstr " con etiquetta %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, pagina %2$d"
+
#: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Syndication de notas pro %s con etiquetta %s (RSS 1.0)"
+msgstr "Syndication de notas pro %1$s con etiquetta %2$s (RSS 1.0)"
#: actions/showstream.php:129
#, php-format
@@ -3476,12 +3688,13 @@ msgstr "Syndication de notas pro %s (Atom)"
msgid "FOAF for %s"
msgstr "Amico de un amico pro %s"
-#: actions/showstream.php:191
-#, fuzzy, php-format
+#: actions/showstream.php:200
+#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr "Isto es le chronologia pro %s, ma %s non ha ancora publicate alique."
+msgstr ""
+"Isto es le chronologia pro %1$s, ma %2$s non ha ancora publicate alique."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3489,16 +3702,16 @@ msgstr ""
"Videva tu qualcosa de interessante recentemente? Tu non ha ancora publicate "
"alcun nota, dunque iste es un bon momento pro comenciar :)"
-#: actions/showstream.php:198
-#, fuzzy, php-format
+#: 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 ""
-"Tu pote tentar pulsar %s o [publicar un nota a su attention](%%%%action."
-"newnotice%%%%?status_textarea=%s)."
+"Tu pote tentar pulsar %1$s o [publicar un nota a su attention](%%%%action."
+"newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3512,7 +3725,7 @@ msgstr ""
"pro sequer le notas de **%s** e multe alteres! ([Lege plus](%%%%doc.help%%%"
"%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3523,7 +3736,7 @@ msgstr ""
"(http://en.wikipedia.org/wiki/Microblog) a base del software libere "
"[StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Repetition de %s"
@@ -3537,205 +3750,142 @@ 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:146
+#: 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:154
-#, fuzzy
+#: 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:172
-#, fuzzy, php-format
+#: actions/siteadminpanel.php:159
+#, php-format
msgid "Unknown language \"%s\"."
-msgstr "Lingua \"%s\" incognite"
-
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Le URL pro reportar instantaneos es invalide."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Valor de execution de instantaneo invalide."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "Le frequentia de instantaneos debe esser un numero."
+msgstr "Lingua \"%s\" incognite."
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
-msgstr "Le limite minime del texto es 140 characteres."
+msgstr "Le limite minimal del texto es 140 characteres."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nomine del sito"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Realisate per"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL pro \"Realisate per\""
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: 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:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horari predefinite"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horari predefinite pro le sito; normalmente UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Lingua predefinite del sito"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URLs"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Servitor"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nomine de host del servitor del sito."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "URLs de luxo"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Usar URLs de luxo (plus legibile e memorabile)?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Accesso"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Private"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Prohiber al usatores anonyme (sin session aperte) de vider le sito?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Solmente per invitation"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Permitter le registration solmente al invitatos."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Claudite"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Disactivar le creation de nove contos."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Instantaneos"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Aleatorimente durante un accesso web"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "In un processo planificate"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Instantaneos de datos"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviar datos statistic al servitores de status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frequentia"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Un instantaneo essera inviate a cata N accessos web"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "URL pro reporto"
-
-#: actions/siteadminpanel.php:360
-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:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
-msgstr "Numero maxime de characteres pro notas."
+msgstr "Numero maximal de characteres pro notas."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatos"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Salveguardar configurationes del sito"
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso del sito"
-#: actions/smssettings.php:58
+#: 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 "Configuration SMS"
+msgstr "Parametros de SMS"
#: actions/smssettings.php:69
#, php-format
@@ -3763,7 +3913,6 @@ msgid "Enter the code you received on your phone."
msgstr "Entra le codice que tu ha recipite in tu telephono."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
msgstr "Numero de telephono pro SMS"
@@ -3833,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"
@@ -3855,9 +4075,9 @@ msgid "%s subscribers"
msgstr "Subscriptores a %s"
#: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "Subscriptores a %s, pagina %d"
+msgstr "Subscriptores a %1$s, pagina %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
@@ -3879,7 +4099,7 @@ msgstr ""
#: actions/subscribers.php:110
#, php-format
msgid "%s has no subscribers. Want to be the first?"
-msgstr ""
+msgstr "%s non ha subscriptores. Vole esser le prime?"
#: actions/subscribers.php:114
#, php-format
@@ -3887,27 +4107,29 @@ msgid ""
"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
"%) and be the first?"
msgstr ""
+"%s non ha subscriptores. Proque non [crear un conto](%%%%action.register%%%"
+"%) e esser le prime?"
#: actions/subscriptions.php:52
#, php-format
msgid "%s subscriptions"
-msgstr ""
+msgstr "Subscriptiones de %s"
#: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "Subscriptores a %s, pagina %d"
+msgstr "Subscriptiones de %1$s, pagina %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
-msgstr ""
+msgstr "Tu seque le notas de iste personas."
#: actions/subscriptions.php:69
#, php-format
msgid "These are the people whose notices %s listens to."
-msgstr ""
+msgstr "%s seque le notas de iste personas."
-#: actions/subscriptions.php:121
+#: actions/subscriptions.php:126
#, php-format
msgid ""
"You're not listening to anyone's notices right now, try subscribing to "
@@ -3916,34 +4138,45 @@ msgid ""
"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
"automatically subscribe to people you already follow there."
msgstr ""
+"Tu non seque le notas de alcuno in iste momento. Tenta subscriber te a "
+"personas que tu cognosce. Proba [le recerca de personas](%%action."
+"peoplesearch%%), cerca membros in le gruppos de tu interesse e in le "
+"[usatores in evidentia](%%action.featured%%). Si tu es [usator de Twitter](%%"
+"action.twittersettings%%), tu pote automaticamente subscriber te a personas "
+"que tu ja seque la."
-#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
-msgstr ""
+msgstr "%s non seque alcuno."
-#: actions/subscriptions.php:194
+#: actions/subscriptions.php:199
msgid "Jabber"
-msgstr ""
+msgstr "Jabber"
-#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
msgid "SMS"
-msgstr ""
+msgstr "SMS"
-#: actions/tag.php:86
+#: 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:87
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (RSS 1.0)"
-#: actions/tag.php:92
+#: actions/tag.php:93
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (RSS 2.0)"
-#: actions/tag.php:98
+#: actions/tag.php:99
#, php-format
msgid "Notice feed for tag %s (Atom)"
-msgstr ""
+msgstr "Syndication de notas pro le etiquetta %s (Atom)"
#: actions/tagother.php:39
msgid "No ID argument."
@@ -3952,164 +4185,153 @@ msgstr "Nulle parametro de ID."
#: actions/tagother.php:65
#, php-format
msgid "Tag %s"
-msgstr ""
+msgstr "Etiquetta %s"
#: actions/tagother.php:77 lib/userprofile.php:75
msgid "User profile"
-msgstr ""
+msgstr "Profilo del usator"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
-msgstr ""
+msgstr "Photo"
#: actions/tagother.php:141
msgid "Tag user"
-msgstr ""
+msgstr "Etiquettar usator"
#: actions/tagother.php:151
msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
msgstr ""
+"Etiquettas pro iste usator (litteras, numeros, -, . e _), separate per "
+"commas o spatios"
#: actions/tagother.php:193
msgid ""
"You can only tag people you are subscribed to or who are subscribed to you."
msgstr ""
+"Tu pote solmente etiquettar personas a qui tu es subscribite o qui es "
+"subscribite a te."
#: actions/tagother.php:200
msgid "Could not save tags."
-msgstr ""
+msgstr "Non poteva salveguardar etiquettas."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
msgstr ""
+"Usa iste formulario pro adder etiquettas a tu subscriptores o subscriptiones."
#: actions/tagrss.php:35
msgid "No such tag."
-msgstr ""
+msgstr "Etiquetta non existe."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
-msgstr ""
+msgstr "Methodo API in construction."
#: actions/unblock.php:59
msgid "You haven't blocked that user."
-msgstr ""
+msgstr "Tu non ha blocate iste usator."
#: actions/unsandbox.php:72
msgid "User is not sandboxed."
-msgstr ""
+msgstr "Le usator non es in le cassa de sablo."
#: actions/unsilence.php:72
msgid "User is not silenced."
-msgstr ""
+msgstr "Le usator non es silentiate."
#: actions/unsubscribe.php:77
msgid "No profile id in request."
-msgstr ""
+msgstr "Nulle ID de profilo in requesta."
#: actions/unsubscribe.php:98
msgid "Unsubscribed"
-msgstr ""
+msgstr "Subscription cancellate"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
-#, fuzzy, php-format
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
+#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
-"Le licentia del nota '%s' non es compatibile con le licentia del sito '%s'."
+"Le licentia del fluxo que tu ascolta, ‘%1$s’, non es compatibile con le "
+"licentia del sito ‘%2$s’."
-#: actions/useradminpanel.php:58 lib/adminpanelaction.php:321
-#: lib/personalgroupnav.php:115
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+#, fuzzy
+msgctxt "TITLE"
msgid "User"
-msgstr ""
+msgstr "Usator"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Configurationes de usator pro iste sito de StatusNet."
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Limite de biographia invalide. Debe esser un numero."
#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Texto de benvenita invalide. Longitude maximal es 255 characteres."
#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Subscription predefinite invalide: '%1$s' non es usator."
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
-msgstr ""
+msgstr "Profilo"
#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Limite de biographia"
#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Le longitude maximal del biographia de un profilo in characteres."
#: actions/useradminpanel.php:231
msgid "New users"
-msgstr ""
+msgstr "Nove usatores"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Message de benvenita a nove usatores"
#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Texto de benvenita pro nove usatores (max. 255 characteres)"
#: actions/useradminpanel.php:241
msgid "Default subscription"
-msgstr ""
+msgstr "Subscription predefinite"
#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
-msgstr ""
+msgstr "Subscriber automaticamente le nove usatores a iste usator."
#: actions/useradminpanel.php:251
msgid "Invitations"
-msgstr ""
+msgstr "Invitationes"
#: actions/useradminpanel.php:256
msgid "Invitations enabled"
-msgstr ""
+msgstr "Invitationes activate"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr ""
-
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Si le usatores pote invitar nove usatores."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
-msgstr ""
+msgstr "Autorisar subscription"
#: actions/userauthorization.php:110
msgid ""
@@ -4117,121 +4339,143 @@ msgid ""
"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
"click “Rejectâ€."
msgstr ""
+"Per favor verifica iste detalios pro assecurar te que tu vole subscriber te "
+"al notas de iste usator. Si tu non ha requestate isto, clicca \"Rejectar\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
-msgstr ""
+msgstr "Licentia"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
-msgstr ""
+msgstr "Acceptar"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
-msgstr ""
+msgstr "Subscriber me a iste usator"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
-msgstr ""
+msgstr "Rejectar"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
-msgstr ""
+msgstr "Rejectar iste subscription"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
-msgstr ""
+msgstr "Nulle requesta de autorisation!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
-msgstr ""
+msgstr "Subscription autorisate"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
+"Le subscription ha essite autorisate, ma nulle URL de retorno ha essite "
+"recipite. Lege in le instructiones del sito in question como autorisar le "
+"subscription. Tu indicio de subscription es:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
-msgstr ""
+msgstr "Subscription rejectate"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
+"Le subscription ha essite rejectate, ma nulle URL de retorno ha essite "
+"recipite. Lege in le instructiones del sito in question como rejectar "
+"completemente le subscription."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
-msgstr ""
+msgstr "URI de ascoltator ‘%s’ non trovate hic."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
+msgstr "URI de ascoltato ‘%s’ es troppo longe."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
+msgstr "URI de ascoltato ‘%s’ es un usator local."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "URL de profilo ‘%s’ es de un usator local."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
+msgstr "URL de avatar ‘%s’ non es valide."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
-msgstr ""
+msgstr "Non pote leger URL de avatar ‘%s’."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
-msgstr ""
+msgstr "Typo de imagine incorrecte pro URL de avatar ‘%s’."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
-msgstr ""
+msgstr "Apparentia del profilo"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Personalisa le apparentia de tu profilo con un imagine de fundo e un paletta "
+"de colores de tu preferentia."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Bon appetito!"
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Gruppos %1$s, pagina %2$d"
#: actions/usergroups.php:130
msgid "Search for more groups"
-msgstr ""
+msgstr "Cercar altere gruppos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
-msgstr ""
+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
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "Statisticas"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4239,15 +4483,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
-
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Stato delite."
+"Iste sito es realisate per %1$s version %2$s, copyright 2008-2010 StatusNet, "
+"Inc. e contributores."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Contributores"
#: actions/version.php:168
msgid ""
@@ -4256,6 +4497,10 @@ msgid ""
"Software Foundation, either version 3 of the License, or (at your option) "
"any later version. "
msgstr ""
+"StatusNet es software libere: vos pote redistribuer lo e/o modificar lo sub "
+"le conditiones del GNU Affero General Public License como publicate per le "
+"Free Software Foundation, o version 3 de iste licentia, o (a vostre "
+"election) omne version plus recente. "
#: actions/version.php:174
msgid ""
@@ -4264,6 +4509,10 @@ msgid ""
"FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License "
"for more details. "
msgstr ""
+"Iste programma es distribuite in le sperantia que illo essera utile, ma SIN "
+"ALCUN GARANTIA; sin mesmo le garantia implicite de COMMERCIABILITATE o de "
+"USABILITATE PRO UN PARTICULAR SCOPO. Vide le GNU Affero General Public "
+"License pro ulterior detalios. "
#: actions/version.php:180
#, php-format
@@ -4271,19 +4520,20 @@ msgid ""
"You should have received a copy of the GNU Affero General Public License "
"along with this program. If not, see %s."
msgstr ""
+"Un copia del GNU Affero General Public License deberea esser disponibile "
+"insimul con iste programma. Si non, vide %s."
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:741
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "Conversation"
+msgstr "Version"
#: actions/version.php:197
msgid "Author(s)"
-msgstr ""
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4291,471 +4541,666 @@ msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
+"Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %"
+"d bytes. Tenta incargar un version minus grande."
#: classes/File.php:154
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "Un file de iste dimension excederea tu quota de usator de %d bytes."
#: classes/File.php:161
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
-msgstr ""
+msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Profilo del gruppo"
+msgstr "Le inscription al gruppo ha fallite."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Non poteva actualisar gruppo."
+msgstr "Non es membro del gruppo."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Profilo del gruppo"
+msgstr "Le cancellation del membrato del gruppo ha fallite."
+
+#: classes/Local_group.php:41
+#, fuzzy
+msgid "Could not update local group."
+msgstr "Non poteva actualisar gruppo."
#: classes/Login_token.php:76
-#, fuzzy, php-format
+#, php-format
msgid "Could not create login token for %s"
-msgstr "Non poteva crear aliases."
+msgstr "Non poteva crear indicio de identification pro %s"
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
-msgstr ""
+msgstr "Il te es prohibite inviar messages directe."
#: classes/Message.php:61
msgid "Could not insert message."
-msgstr ""
+msgstr "Non poteva inserer message."
#: classes/Message.php:71
msgid "Could not update message with new URI."
-msgstr ""
+msgstr "Non poteva actualisar message con nove URI."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
-msgstr ""
+msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
-msgstr ""
+msgstr "Problema salveguardar nota. Troppo longe."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
-msgstr ""
+msgstr "Problema salveguardar nota. Usator incognite."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
+"Troppo de messages duplicate troppo rapidemente; face un pausa e publica de "
+"novo post alcun minutas."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
-msgstr ""
+msgstr "Il te es prohibite publicar notas in iste sito."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
-msgstr ""
+msgstr "Problema salveguardar nota."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problema salveguardar le cassa de entrata del gruppo."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
+
+#: 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:382
+#: classes/User.php:373
#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr ""
+msgstr "Benvenite a %1$s, @%2$s!"
-#: classes/User_group.php:380
+#: classes/User_group.php:477
msgid "Could not create group."
-msgstr ""
+msgstr "Non poteva crear gruppo."
+
+#: classes/User_group.php:486
+#, fuzzy
+msgid "Could not set group URI."
+msgstr "Non poteva configurar le membrato del gruppo."
-#: classes/User_group.php:409
+#: classes/User_group.php:507
msgid "Could not set group membership."
-msgstr ""
+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 ""
+msgstr "Cambiar le optiones de tu profilo"
#: lib/accountsettingsaction.php:112
msgid "Upload an avatar"
-msgstr ""
+msgstr "Incargar un avatar"
#: lib/accountsettingsaction.php:116
msgid "Change your password"
-msgstr ""
+msgstr "Cambiar tu contrasigno"
#: lib/accountsettingsaction.php:120
msgid "Change email handling"
-msgstr ""
+msgstr "Modificar le tractamento de e-mail"
#: lib/accountsettingsaction.php:124
msgid "Design your profile"
-msgstr ""
+msgstr "Designar tu profilo"
#: lib/accountsettingsaction.php:128
msgid "Other"
-msgstr ""
+msgstr "Altere"
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr ""
+msgstr "Altere optiones"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%s quitava le gruppo %s"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
-msgstr ""
+msgstr "Pagina sin titulo"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
-msgstr ""
+msgstr "Navigation primari del sito"
-#: lib/action.php:433
-msgid "Home"
-msgstr ""
+#. 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:433
-msgid "Personal profile and friends timeline"
-msgstr ""
+#, 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 ""
+msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo"
-#: lib/action.php:438
-msgid "Connect"
-msgstr ""
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr ""
+msgstr "Connecter con servicios"
+
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Connecter"
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr ""
+msgstr "Modificar le configuration del sito"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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 "Invitar amicos e collegas a accompaniar te in %s"
-#: lib/action.php:452
-msgid "Logout"
-msgstr ""
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitar"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr ""
+msgstr "Terminar le session del sito"
-#: lib/action.php:457
+#: 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 ""
+msgstr "Crear un conto"
-#: lib/action.php:460
+#: 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 ""
+msgstr "Identificar te a iste sito"
-#: lib/action.php:463 lib/action.php:726
-msgid "Help"
-msgstr ""
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Aperir session"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
-msgstr ""
+msgstr "Adjuta me!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr ""
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Adjuta"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr ""
+msgstr "Cercar personas o texto"
-#: lib/action.php:487
+#: 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 ""
+msgstr "Aviso del sito"
-#: lib/action.php:553
+#: lib/action.php:579
msgid "Local views"
-msgstr ""
+msgstr "Vistas local"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
-msgstr ""
+msgstr "Aviso de pagina"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
-msgstr ""
+msgstr "Navigation secundari del sito"
+
+#: lib/action.php:752
+msgid "Help"
+msgstr "Adjuta"
-#: lib/action.php:728
+#: lib/action.php:754
msgid "About"
-msgstr ""
+msgstr "A proposito"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
-msgstr ""
+msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
-msgstr ""
+msgstr "CdS"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
-msgstr ""
+msgstr "Confidentialitate"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
-msgstr ""
+msgstr "Fonte"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
-msgstr ""
+msgstr "Contacto"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
-msgstr ""
+msgstr "Insignia"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
-msgstr ""
+msgstr "Licentia del software StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
+"**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%"
+"%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
-msgstr ""
+msgstr "**%%site.name%%** es un servicio de microblog. "
-#: lib/action.php:780
+#: 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 ""
+"Le sito functiona con le software de microblog [StatusNet](http://status."
+"net/), version %s, disponibile sub le [GNU Affero General Public License]"
+"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
-msgstr ""
+msgstr "Licentia del contento del sito"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Le contento e datos de %1$s es private e confidential."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "Contento e datos sub copyright de %1$s. Tote le derectos reservate."
-#: lib/action.php:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
-msgstr ""
+msgstr "Totes "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
-msgstr ""
+msgstr "licentia."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
-msgstr ""
+msgstr "Pagination"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
-msgstr ""
+msgstr "Post"
-#: lib/action.php:1141
+#: lib/action.php:1169
msgid "Before"
+msgstr "Ante"
+
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
msgstr ""
-#: lib/adminpanelaction.php:96
-msgid "You cannot make changes to this site."
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/adminpanelaction.php:107
-#, fuzzy
+#: 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."
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
msgid "Changes to that panel are not allowed."
-msgstr "Registration non permittite."
+msgstr "Le modification de iste pannello non es permittite."
-#: lib/adminpanelaction.php:206
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
-msgstr ""
+msgstr "showForm() non implementate."
-#: lib/adminpanelaction.php:235
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
-msgstr ""
+msgstr "saveSettings() non implementate."
-#: lib/adminpanelaction.php:258
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
-msgstr ""
+msgstr "Impossibile deler configuration de apparentia."
-#: lib/adminpanelaction.php:312
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
-msgstr ""
+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 ""
+msgstr "Configuration del apparentia"
-#: lib/adminpanelaction.php:322 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
+msgstr "Configuration del camminos"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Configuration del sessiones"
+
+#. 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/applicationeditform.php:186
-msgid "Icon for this application"
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"Tentativa de authentication al API fallite, pseudonymo = %1$s, proxy = %2$s, "
+"IP = %3$s"
-#: lib/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Modificar application"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "Icone pro iste application"
+
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Describe te e tu interesses in %d characteres"
+msgstr "Describe tu application in %d characteres"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr ""
+msgstr "Describe tu application"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "URL pro reporto"
+msgstr "URL de origine"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr ""
+msgstr "URL del pagina initial de iste application"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organisation responsabile de iste application"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr ""
+msgstr "URL del pagina initial del organisation"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL verso le qual rediriger post authentication"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Navigator"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Scriptorio"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Typo de application, navigator o scriptorio"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Lectura solmente"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lectura e scriptura"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Accesso predefinite pro iste application: lectura solmente, o lectura e "
+"scriptura"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Remover"
+msgstr "Revocar"
#: lib/attachmentlist.php:87
msgid "Attachments"
-msgstr ""
+msgstr "Annexos"
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Autor"
#: lib/attachmentlist.php:278
msgid "Provider"
-msgstr ""
+msgstr "Providitor"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Notas ubi iste annexo appare"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr ""
+msgstr "Etiquettas pro iste annexo"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
-#, fuzzy
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
-msgstr "Cambio del contrasigno"
+msgstr "Cambio del contrasigno fallite"
-#: lib/authenticationplugin.php:229
-#, fuzzy
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
-msgstr "Cambio del contrasigno"
+msgstr "Cambio del contrasigno non permittite"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
-msgstr ""
+msgstr "Resultatos del commando"
#: lib/channel.php:210 lib/mailhandler.php:142
msgid "Command complete"
-msgstr ""
+msgstr "Commando complete"
#: lib/channel.php:221
msgid "Command failed"
-msgstr ""
+msgstr "Commando fallite"
#: lib/command.php:44
msgid "Sorry, this command is not yet implemented."
-msgstr ""
+msgstr "Pardono, iste commando non es ancora implementate."
#: lib/command.php:88
-#, fuzzy, php-format
+#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "Non poteva trovar le usator de destination."
+msgstr "Non poteva trovar un usator con pseudonymo %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
+msgstr "Non ha multe senso pulsar te mesme!"
#: lib/command.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Nudge sent to %s"
-msgstr "Pulsata inviate"
+msgstr "Pulsata inviate a %s"
#: lib/command.php:126
#, php-format
@@ -4764,21 +5209,22 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Subscriptiones: %1$s\n"
+"Subscriptores: %2$s\n"
+"Notas: %3$s"
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
msgid "Notice with that id does not exist"
-msgstr "Nulle usator existe con iste adresse de e-mail o nomine de usator."
+msgstr "Non existe un nota con iste ID"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
-#, fuzzy
msgid "User has no last notice"
-msgstr "Le usator non ha un profilo."
+msgstr "Usator non ha ultime nota"
#: lib/command.php:190
msgid "Notice marked as fave."
-msgstr ""
+msgstr "Nota marcate como favorite."
#: lib/command.php:217
msgid "You are already a member of that group"
@@ -4805,29 +5251,29 @@ msgid "%s left group %s"
msgstr "%s quitava le gruppo %s"
#: lib/command.php:309
-#, fuzzy, php-format
+#, php-format
msgid "Fullname: %s"
-msgstr "Nomine complete"
+msgstr "Nomine complete: %s"
#: lib/command.php:312 lib/mail.php:254
#, php-format
msgid "Location: %s"
-msgstr ""
+msgstr "Loco: %s"
#: lib/command.php:315 lib/mail.php:256
#, php-format
msgid "Homepage: %s"
-msgstr ""
+msgstr "Pagina personal: %s"
#: lib/command.php:318
#, php-format
msgid "About: %s"
-msgstr ""
+msgstr "A proposito: %s"
#: lib/command.php:349
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Message troppo longe - maximo es %d characteres, tu inviava %d"
#: lib/command.php:367
#, php-format
@@ -4836,7 +5282,7 @@ msgstr "Message directe a %s inviate"
#: lib/command.php:369
msgid "Error sending direct message."
-msgstr ""
+msgstr "Error durante le invio del message directe."
#: lib/command.php:413
msgid "Cannot repeat your own notice"
@@ -4847,9 +5293,9 @@ msgid "Already repeated that notice"
msgstr "Iste nota ha ja essite repetite"
#: lib/command.php:426
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Nota delite."
+msgstr "Nota de %s repetite"
#: lib/command.php:428
msgid "Error repeating notice."
@@ -4858,95 +5304,107 @@ msgstr "Error durante le repetition del nota."
#: lib/command.php:482
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Nota troppo longe - maximo es %d characteres, tu inviava %d"
#: lib/command.php:491
-#, fuzzy, php-format
+#, php-format
msgid "Reply to %s sent"
-msgstr "Responsas a %s"
+msgstr "Responsa a %s inviate"
#: lib/command.php:493
msgid "Error saving notice."
-msgstr ""
+msgstr "Errur durante le salveguarda del nota."
#: lib/command.php:547
msgid "Specify the name of the user to subscribe to"
-msgstr ""
+msgstr "Specifica le nomine del usator al qual subscriber te"
+
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr "Usator non existe"
-#: lib/command.php:554
+#: lib/command.php:561
#, php-format
msgid "Subscribed to %s"
-msgstr ""
+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 ""
+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 ""
+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 ""
+msgstr "Commando non ancora implementate."
-#: lib/command.php:603
+#: lib/command.php:616
msgid "Notification off."
-msgstr ""
+msgstr "Notification disactivate."
-#: lib/command.php:605
+#: lib/command.php:618
msgid "Can't turn off notification."
-msgstr ""
+msgstr "Non pote disactivar notification."
-#: lib/command.php:626
+#: lib/command.php:639
msgid "Notification on."
-msgstr ""
+msgstr "Notification activate."
-#: lib/command.php:628
+#: lib/command.php:641
msgid "Can't turn on notification."
-msgstr ""
+msgstr "Non pote activar notification."
-#: lib/command.php:641
+#: lib/command.php:654
msgid "Login command is disabled"
-msgstr ""
+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 ""
+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] ""
-msgstr[1] ""
+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 ""
+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] ""
-msgstr[1] ""
+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 ""
+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] ""
-msgstr[1] ""
+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"
@@ -4960,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"
@@ -4986,255 +5445,300 @@ msgid ""
"tracks - not yet implemented.\n"
"tracking - not yet implemented.\n"
msgstr ""
-
-#: lib/common.php:131
+"Commandos:\n"
+"on - activar notificationes\n"
+"off - disactivar notificationes\n"
+"help - monstrar iste adjuta\n"
+"follow <pseudonymo> - subscriber te al usator\n"
+"groups - listar le gruppos del quales tu es membro\n"
+"subscriptions - listar le personas que tu seque\n"
+"subscribers - listar le personas qui te seque\n"
+"leave <pseudonymo> - cancellar subscription al usator\n"
+"d <pseudonymo> <texto> - diriger message al usator\n"
+"get <pseudonymo> - obtener ultime nota del usator\n"
+"whois <pseudonymo> - obtener info de profilo del usator\n"
+"fav <pseudonymo> - adder ultime nota del usator como favorite\n"
+"fav #<id_de_nota> - adder nota con le ID date como favorite\n"
+"repeat #<id_de_nota> - repeter le nota con le ID date\n"
+"repeat <pseudonymo> - repeter le ultime nota del usator\n"
+"reply #<id_de_nota> - responder al nota con le ID date\n"
+"reply <pseudonymo> - responder al ultime nota del usator\n"
+"join <gruppo> - facer te membro del gruppo\n"
+"login - obtener ligamine pro aperir session al interfacie web\n"
+"drop <gruppo> - quitar gruppo\n"
+"stats - obtener tu statisticas\n"
+"stop - como 'off'\n"
+"quit - como 'off'\n"
+"sub <pseudonymo> - como 'follow'\n"
+"unsub <pseudonymo> - como 'leave'\n"
+"last <pseudonymo> - como 'get'\n"
+"on <pseudonymo> - non ancora implementate.\n"
+"off <pseudonymo> - non ancora implementate.\n"
+"nudge <pseudonymo> - rememorar un usator de scriber alique.\n"
+"invite <numero de telephono> - non ancora implementate.\n"
+"track <parola> - non ancora implementate.\n"
+"untrack <parola> - non ancora implementate.\n"
+"track off - non ancora implementate.\n"
+"untrack all - non ancora implementate.\n"
+"tracks - non ancora implementate.\n"
+"tracking - non ancora implementate.\n"
+
+#: lib/common.php:148
msgid "No configuration file found. "
-msgstr ""
+msgstr "Nulle file de configuration trovate. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
-msgstr ""
+msgstr "Io cercava files de configuration in le sequente locos: "
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "Considera executar le installator pro reparar isto."
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
-msgstr ""
+msgstr "Ir al installator."
#: lib/connectsettingsaction.php:110
msgid "IM"
-msgstr ""
+msgstr "MI"
#: lib/connectsettingsaction.php:111
msgid "Updates by instant messenger (IM)"
-msgstr ""
+msgstr "Actualisationes per messageria instantanee (MI)"
#: lib/connectsettingsaction.php:116
msgid "Updates by SMS"
-msgstr ""
+msgstr "Actualisationes per SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Conversation"
+msgstr "Connexiones"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Applicationes autorisate connectite"
#: lib/dberroraction.php:60
msgid "Database error"
-msgstr ""
+msgstr "Error de base de datos"
#: lib/designsettings.php:105
msgid "Upload file"
-msgstr ""
+msgstr "Incargar file"
#: lib/designsettings.php:109
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
+"Tu pote actualisar tu imagine de fundo personal. Le dimension maximal del "
+"file es 2MB."
#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "Apparentia predefinite restaurate."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
msgid "Disfavor this notice"
-msgstr ""
+msgstr "Disfavorir iste nota"
#: lib/favorform.php:114 lib/favorform.php:140
msgid "Favor this notice"
-msgstr ""
+msgstr "Favorir iste nota"
#: lib/favorform.php:140
msgid "Favor"
-msgstr ""
+msgstr "Favorir"
#: lib/feed.php:85
msgid "RSS 1.0"
-msgstr ""
+msgstr "RSS 1.0"
#: lib/feed.php:87
msgid "RSS 2.0"
-msgstr ""
+msgstr "RSS 2.0"
#: lib/feed.php:89
msgid "Atom"
-msgstr ""
+msgstr "Atom"
#: lib/feed.php:91
msgid "FOAF"
-msgstr ""
+msgstr "Amico de un amico"
#: lib/feedlist.php:64
msgid "Export data"
-msgstr ""
+msgstr "Exportar datos"
#: lib/galleryaction.php:121
msgid "Filter tags"
-msgstr ""
+msgstr "Filtrar etiquettas"
#: lib/galleryaction.php:131
msgid "All"
-msgstr ""
+msgstr "Totes"
#: lib/galleryaction.php:139
msgid "Select tag to filter"
-msgstr ""
+msgstr "Selige etiquetta a filtrar"
#: lib/galleryaction.php:140
msgid "Tag"
-msgstr ""
+msgstr "Etiquetta"
#: lib/galleryaction.php:141
msgid "Choose a tag to narrow list"
-msgstr ""
+msgstr "Selige etiquetta pro reducer lista"
#: lib/galleryaction.php:143
msgid "Go"
+msgstr "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 ""
+msgstr "URL del pagina initial o blog del gruppo o topico"
#: lib/groupeditform.php:168
msgid "Describe the group or topic"
-msgstr ""
+msgstr "Describe le gruppo o topico"
#: lib/groupeditform.php:170
#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr ""
+msgstr "Describe le gruppo o topico in %d characteres"
#: lib/groupeditform.php:179
msgid ""
"Location for the group, if any, like \"City, State (or Region), Country\""
msgstr ""
+"Loco del gruppo, si existe, como \"Citate, Provincia (o Region), Pais\""
#: lib/groupeditform.php:187
#, php-format
msgid "Extra nicknames for the group, comma- or space- separated, max %d"
msgstr ""
+"Pseudonymos additional pro le gruppo, separate per commas o spatios, max %d"
#: lib/groupnav.php:85
msgid "Group"
-msgstr ""
+msgstr "Gruppo"
#: lib/groupnav.php:101
msgid "Blocked"
-msgstr ""
+msgstr "Blocate"
#: lib/groupnav.php:102
#, php-format
msgid "%s blocked users"
-msgstr ""
+msgstr "%s usatores blocate"
#: lib/groupnav.php:108
#, php-format
msgid "Edit %s group properties"
-msgstr ""
+msgstr "Modificar proprietates del gruppo %s"
#: lib/groupnav.php:113
msgid "Logo"
-msgstr ""
+msgstr "Logotypo"
#: lib/groupnav.php:114
#, php-format
msgid "Add or edit %s logo"
-msgstr ""
+msgstr "Adder o modificar logotypo de %s"
#: lib/groupnav.php:120
#, php-format
msgid "Add or edit %s design"
-msgstr ""
+msgstr "Adder o modificar apparentia de %s"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
-msgstr ""
+msgstr "Gruppos con le plus membros"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
-msgstr ""
+msgstr "Gruppos con le plus messages"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr ""
+msgstr "Etiquettas in le notas del gruppo %s"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
-msgstr ""
+msgstr "Iste pagina non es disponibile in un formato que tu accepta"
#: lib/imagefile.php:75
#, php-format
msgid "That file is too big. The maximum file size is %s."
-msgstr ""
+msgstr "Iste file es troppo grande. Le dimension maximal es %s."
#: lib/imagefile.php:80
msgid "Partial upload."
-msgstr ""
+msgstr "Incargamento partial."
#: lib/imagefile.php:88 lib/mediafile.php:170
msgid "System error uploading file."
-msgstr ""
+msgstr "Error de systema durante le incargamento del file."
#: lib/imagefile.php:96
msgid "Not an image or corrupt file."
-msgstr ""
+msgstr "Le file non es un imagine o es defectuose."
-#: lib/imagefile.php:105
+#: lib/imagefile.php:109
msgid "Unsupported image file format."
-msgstr ""
+msgstr "Formato de file de imagine non supportate."
-#: lib/imagefile.php:118
+#: lib/imagefile.php:122
msgid "Lost our file."
-msgstr ""
+msgstr "File perdite."
-#: lib/imagefile.php:150 lib/imagefile.php:197
+#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
-msgstr ""
+msgstr "Typo de file incognite"
-#: 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:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
-#: lib/jabber.php:385
-#, fuzzy, php-format
+#: lib/jabber.php:400
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "Lingua \"%s\" incognite"
+msgstr "Fonte de cassa de entrata \"%s\" incognite"
#: lib/joinform.php:114
msgid "Join"
-msgstr ""
+msgstr "Inscriber"
#: lib/leaveform.php:114
msgid "Leave"
-msgstr ""
+msgstr "Quitar"
#: lib/logingroupnav.php:80
msgid "Login with a username and password"
-msgstr ""
+msgstr "Aperir session con nomine de usator e contrasigno"
#: lib/logingroupnav.php:86
msgid "Sign up for a new account"
-msgstr ""
+msgstr "Crear un nove conto"
#: lib/mail.php:172
msgid "Email address confirmation"
-msgstr ""
+msgstr "Confirmation del adresse de e-mail"
#: lib/mail.php:174
#, php-format
@@ -5252,11 +5756,23 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"Salute %s,\n"
+"\n"
+"Alcuno entrava ante un momento iste adresse de e-mail in %s.\n"
+"\n"
+"Si isto esseva tu, e tu vole confirmar le adresse, usa le URL hic infra:\n"
+"\n"
+"%s\n"
+"\n"
+"Si non, simplemente ignora iste message.\n"
+"\n"
+"Gratias pro tu attention,\n"
+"%s\n"
#: lib/mail.php:236
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
-msgstr ""
+msgstr "%1$s seque ora tu notas in %2$s."
#: lib/mail.php:241
#, php-format
@@ -5272,16 +5788,26 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
+"%1$s seque ora tu notas in %2$s.\n"
+"\n"
+"%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Cordialmente,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Cambia tu adresse de e-mail o optiones de notification a %8$s\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr "Bio"
+msgstr "Bio: %s"
#: lib/mail.php:286
#, php-format
msgid "New email address for posting to %s"
-msgstr ""
+msgstr "Nove adresse de e-mail pro publicar in %s"
#: lib/mail.php:289
#, php-format
@@ -5295,20 +5821,28 @@ msgid ""
"Faithfully yours,\n"
"%4$s"
msgstr ""
+"Tu ha un nove adresse pro publication in %1$s.\n"
+"\n"
+"Invia e-mail a %2$s pro publicar nove messages.\n"
+"\n"
+"Ulterior informationes se trova a %3$s.\n"
+"\n"
+"Cordialmente,\n"
+"%4$s"
#: lib/mail.php:413
#, php-format
msgid "%s status"
-msgstr ""
+msgstr "Stato de %s"
#: lib/mail.php:439
msgid "SMS confirmation"
-msgstr ""
+msgstr "Confirmation SMS"
#: lib/mail.php:463
#, php-format
msgid "You've been nudged by %s"
-msgstr ""
+msgstr "%s te ha pulsate"
#: lib/mail.php:467
#, php-format
@@ -5325,11 +5859,22 @@ msgid ""
"With kind regards,\n"
"%4$s\n"
msgstr ""
+"%1$s (%2$s) se demanda lo que tu face iste dies e te invita a scriber alique "
+"de nove.\n"
+"\n"
+"Dunque face audir de te :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Non responde a iste message; le responsa non arrivara.\n"
+"\n"
+"Con salutes cordial,\n"
+"%4$s\n"
#: lib/mail.php:510
#, php-format
msgid "New private message from %s"
-msgstr ""
+msgstr "Nove message private de %s"
#: lib/mail.php:514
#, php-format
@@ -5349,11 +5894,25 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) te ha inviate un message private:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"Tu pote responder a su message hic:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Non responde per e-mail; le responsa non arrivara.\n"
+"\n"
+"Con salutes cordial,\n"
+"%5$s\n"
#: lib/mail.php:559
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
+msgstr "%s (@%s) ha addite tu nota como favorite"
#: lib/mail.php:561
#, php-format
@@ -5375,11 +5934,28 @@ msgid ""
"Faithfully yours,\n"
"%6$s\n"
msgstr ""
+"%1$s (@%7$s) addeva ante un momento tu nota de %2$s como un de su "
+"favorites.\n"
+"\n"
+"Le URL de tu nota es:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Le texto de tu nota es:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Tu pote vider le lista del favorites de %1$s hic:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Cordialmente,\n"
+"%6$s\n"
#: lib/mail.php:624
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "%s (@%s) ha inviate un nota a tu attention"
#: lib/mail.php:626
#, php-format
@@ -5395,545 +5971,572 @@ msgid ""
"\t%4$s\n"
"\n"
msgstr ""
+"%1$s (@%9$s) inviava ante un momento un nota a tu attention (un 'responsa "
+"@') in %2$s.\n"
+"\n"
+"Le nota es hic:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Le texto:\n"
+"\n"
+"%4$s\n"
+"\n"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
-msgstr ""
+msgstr "Solmente le usator pote leger su proprie cassas postal."
#: lib/mailbox.php:139
msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
+"Tu non ha messages private. Tu pote inviar messages private pro ingagiar "
+"altere usatores in conversation. Altere personas pote inviar te messages que "
+"solmente tu pote leger."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
-msgstr ""
+msgstr "de"
#: lib/mailhandler.php:37
msgid "Could not parse message."
-msgstr ""
+msgstr "Non comprendeva le syntaxe del message."
#: lib/mailhandler.php:42
msgid "Not a registered user."
-msgstr ""
+msgstr "Non un usator registrate."
#: lib/mailhandler.php:46
msgid "Sorry, that is not your incoming email address."
-msgstr ""
+msgstr "Pardono, isto non es tu adresse de e-mail entrante."
#: lib/mailhandler.php:50
msgid "Sorry, no incoming email allowed."
-msgstr ""
+msgstr "Pardono, le reception de e-mail non es permittite."
#: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
msgid "Unsupported message type: %s"
-msgstr "Formato non supportate."
+msgstr "Typo de message non supportate: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
msgstr ""
+"Un error de base de datos occurreva durante le salveguarda de tu file. Per "
+"favor reproba."
#: lib/mediafile.php:142
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
-msgstr ""
+msgstr "Le file incargate excede le directiva upload_max_filesize in php.ini."
#: lib/mediafile.php:147
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form."
msgstr ""
+"Le file incargate excede le directiva MAX_FILE_SIZE specificate in le "
+"formulario HTML."
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "Le file incargate ha solmente essite incargate partialmente."
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "Manca un dossier temporari."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr ""
+msgstr "Falleva de scriber le file in disco."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
-msgstr ""
+msgstr "Incargamento de file stoppate per un extension."
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota."
-msgstr ""
+msgstr "File excede quota del usator."
#: lib/mediafile.php:196 lib/mediafile.php:233
msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "File non poteva esser displaciate in le directorio de destination."
#: lib/mediafile.php:201 lib/mediafile.php:237
-#, fuzzy
msgid "Could not determine file's MIME type."
-msgstr "Non poteva determinar le usator de origine."
+msgstr "Non poteva determinar le typo MIME del file."
#: lib/mediafile.php:270
#, php-format
msgid " Try using another %s format."
-msgstr ""
+msgstr " Tenta usar un altere formato %s."
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported file type on this server."
-msgstr ""
+msgstr "%s non es un typo de file supportate in iste servitor."
#: lib/messageform.php:120
msgid "Send a direct notice"
-msgstr ""
+msgstr "Inviar un nota directe"
#: lib/messageform.php:146
msgid "To"
-msgstr ""
+msgstr "A"
#: lib/messageform.php:159 lib/noticeform.php:185
msgid "Available characters"
-msgstr ""
+msgstr "Characteres disponibile"
+
+#: lib/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 ""
+msgstr "Inviar un nota"
#: lib/noticeform.php:173
#, php-format
msgid "What's up, %s?"
-msgstr ""
+msgstr "Como sta, %s?"
#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Annexar"
#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Annexar un file"
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
-msgstr "Non poteva salveguardar le preferentias de loco."
+msgstr "Divulgar mi loco"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
-msgstr "Non poteva salveguardar le preferentias de loco."
+msgstr "Non divulgar mi loco"
#: lib/noticeform.php:216
msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Pardono, le obtention de tu geolocalisation prende plus tempore que "
+"previste. Per favor reproba plus tarde."
-#: lib/noticelist.php:428
+#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-msgstr ""
+msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-#: lib/noticelist.php:429
+#: lib/noticelist.php:430
msgid "N"
-msgstr ""
+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 "E"
-#: lib/noticelist.php:430
+#: lib/noticelist.php:431
msgid "W"
-msgstr ""
+msgstr "W"
-#: lib/noticelist.php:436
+#: lib/noticelist.php:438
msgid "at"
-msgstr ""
+msgstr "a"
-#: lib/noticelist.php:531
+#: lib/noticelist.php:566
msgid "in context"
-msgstr ""
+msgstr "in contexto"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetite per"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
-msgstr ""
+msgstr "Responder a iste nota"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
-msgstr ""
+msgstr "Responder"
-#: lib/noticelist.php:628
-#, fuzzy
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Nota delite."
+msgstr "Nota repetite"
#: lib/nudgeform.php:116
msgid "Nudge this user"
-msgstr ""
+msgstr "Pulsar iste usator"
#: lib/nudgeform.php:128
msgid "Nudge"
-msgstr ""
+msgstr "Pulsar"
#: lib/nudgeform.php:128
msgid "Send a nudge to this user"
-msgstr ""
+msgstr "Inviar un pulsata a iste usator"
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
-msgstr ""
+msgstr "Error durante le insertion del nove profilo"
#: lib/oauthstore.php:291
msgid "Error inserting avatar"
-msgstr ""
+msgstr "Error durante le insertion del avatar"
#: lib/oauthstore.php:311
msgid "Error inserting remote profile"
-msgstr ""
+msgstr "Error durante le insertion del profilo remote"
#: lib/oauthstore.php:345
msgid "Duplicate notice"
-msgstr ""
+msgstr "Duplicar nota"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
-msgstr ""
+msgstr "Non poteva inserer nove subscription."
#: lib/personalgroupnav.php:99
msgid "Personal"
-msgstr ""
+msgstr "Personal"
#: lib/personalgroupnav.php:104
msgid "Replies"
-msgstr ""
+msgstr "Responsas"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr ""
+msgstr "Favorites"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
-msgstr ""
+msgstr "Cassa de entrata"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
-msgstr ""
+msgstr "Tu messages recipite"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
-msgstr ""
+msgstr "Cassa de exito"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
-msgstr ""
+msgstr "Tu messages inviate"
#: lib/personaltagcloudsection.php:56
#, php-format
msgid "Tags in %s's notices"
-msgstr ""
+msgstr "Etiquettas in le notas de %s"
#: lib/plugin.php:114
-#, fuzzy
msgid "Unknown"
-msgstr "Action incognite"
+msgstr "Incognite"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
-msgstr ""
+msgstr "Subscriptiones"
#: lib/profileaction.php:126
msgid "All subscriptions"
-msgstr ""
+msgstr "Tote le subscriptiones"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
-msgstr ""
+msgstr "Subscriptores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
-msgstr ""
+msgstr "Tote le subscriptores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
-msgstr ""
+msgstr "ID del usator"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
-msgstr ""
+msgstr "Membro depost"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
-msgstr ""
+msgstr "Tote le gruppos"
#: lib/profileformaction.php:123
msgid "No return-to arguments."
-msgstr ""
+msgstr "Nulle parametro return-to."
#: lib/profileformaction.php:137
msgid "Unimplemented method."
-msgstr ""
+msgstr "Methodo non implementate."
#: lib/publicgroupnav.php:78
msgid "Public"
-msgstr ""
+msgstr "Public"
#: lib/publicgroupnav.php:82
msgid "User groups"
-msgstr ""
+msgstr "Gruppos de usatores"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
-msgstr ""
+msgstr "Etiquettas recente"
#: lib/publicgroupnav.php:88
msgid "Featured"
-msgstr ""
+msgstr "In evidentia"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr ""
+msgstr "Popular"
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "Repeter iste nota"
+msgstr "Repeter iste nota?"
#: lib/repeatform.php:132
msgid "Repeat this notice"
msgstr "Repeter iste nota"
+#: 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."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
-msgstr ""
+msgstr "Cassa de sablo"
#: lib/sandboxform.php:78
msgid "Sandbox this user"
-msgstr ""
+msgstr "Mitter iste usator in le cassa de sablo"
#: lib/searchaction.php:120
msgid "Search site"
-msgstr ""
+msgstr "Cercar in sito"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Parola(s)-clave"
+
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Cercar"
#: lib/searchaction.php:162
msgid "Search help"
-msgstr ""
+msgstr "Adjuta super le recerca"
#: lib/searchgroupnav.php:80
msgid "People"
-msgstr ""
+msgstr "Personas"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr ""
+msgstr "Cercar personas in iste sito"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
-msgstr ""
+msgstr "Cercar in contento de notas"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
-msgstr ""
+msgstr "Cercar gruppos in iste sito"
#: lib/section.php:89
msgid "Untitled section"
-msgstr ""
+msgstr "Section sin titulo"
#: lib/section.php:106
msgid "More..."
-msgstr ""
+msgstr "Plus…"
#: lib/silenceform.php:67
msgid "Silence"
-msgstr ""
+msgstr "Silentiar"
#: lib/silenceform.php:78
msgid "Silence this user"
-msgstr ""
+msgstr "Silentiar iste usator"
#: lib/subgroupnav.php:83
#, php-format
msgid "People %s subscribes to"
-msgstr ""
+msgstr "Personas que %s seque"
#: lib/subgroupnav.php:91
#, php-format
msgid "People subscribed to %s"
-msgstr ""
+msgstr "Personas qui seque %s"
#: lib/subgroupnav.php:99
#, php-format
msgid "Groups %s is a member of"
-msgstr ""
-
-#: lib/subs.php:52
-msgid "Already subscribed!"
-msgstr ""
-
-#: lib/subs.php:56
-msgid "User has blocked you."
-msgstr ""
+msgstr "Gruppos del quales %s es membro"
-#: 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 "Invitar"
-#: 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 "Invitar amicos e collegas a accompaniar te in %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
-msgstr ""
+msgstr "Nube de etiquettas de personas como auto-etiquettate"
#: lib/subscriberspeopletagcloudsection.php:48
#: lib/subscriptionspeopletagcloudsection.php:48
msgid "People Tagcloud as tagged"
-msgstr ""
+msgstr "Nube de etiquetta de personas como etiquettate"
#: lib/tagcloudsection.php:56
msgid "None"
-msgstr ""
+msgstr "Nulle"
#: lib/topposterssection.php:74
msgid "Top posters"
-msgstr ""
+msgstr "Qui scribe le plus"
#: lib/unsandboxform.php:69
msgid "Unsandbox"
-msgstr ""
+msgstr "Retirar del cassa de sablo"
#: lib/unsandboxform.php:80
msgid "Unsandbox this user"
-msgstr ""
+msgstr "Retirar iste usator del cassa de sablo"
#: lib/unsilenceform.php:67
msgid "Unsilence"
-msgstr ""
+msgstr "Dissilentiar"
#: lib/unsilenceform.php:78
msgid "Unsilence this user"
-msgstr ""
+msgstr "Non plus silentiar iste usator"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
-msgstr ""
+msgstr "Cancellar subscription a iste usator"
#: lib/unsubscribeform.php:137
msgid "Unsubscribe"
-msgstr ""
+msgstr "Cancellar subscription"
#: lib/userprofile.php:116
msgid "Edit Avatar"
-msgstr ""
+msgstr "Modificar avatar"
#: lib/userprofile.php:236
msgid "User actions"
-msgstr ""
+msgstr "Actiones de usator"
-#: lib/userprofile.php:248
+#: lib/userprofile.php:251
msgid "Edit profile settings"
-msgstr ""
+msgstr "Modificar configuration de profilo"
-#: lib/userprofile.php:249
+#: lib/userprofile.php:252
msgid "Edit"
-msgstr ""
+msgstr "Modificar"
-#: lib/userprofile.php:272
+#: lib/userprofile.php:275
msgid "Send a direct message to this user"
-msgstr ""
+msgstr "Inviar un message directe a iste usator"
-#: lib/userprofile.php:273
+#: lib/userprofile.php:276
msgid "Message"
-msgstr ""
+msgstr "Message"
-#: lib/userprofile.php:311
+#: lib/userprofile.php:314
msgid "Moderate"
-msgstr ""
+msgstr "Moderar"
+
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profilo del usator"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratores"
-#: lib/util.php:875
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
-msgstr ""
+msgstr "alcun secundas retro"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
-msgstr ""
+msgstr "circa un minuta retro"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
-msgstr ""
+msgstr "circa %d minutas retro"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
-msgstr ""
+msgstr "circa un hora retro"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
-msgstr ""
+msgstr "circa %d horas retro"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
-msgstr ""
+msgstr "circa un die retro"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
-msgstr ""
+msgstr "circa %d dies retro"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
-msgstr ""
+msgstr "circa un mense retro"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
-msgstr ""
+msgstr "circa %d menses retro"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
-msgstr ""
+msgstr "circa un anno retro"
#: lib/webcolor.php:82
#, php-format
msgid "%s is not a valid color!"
-msgstr ""
+msgstr "%s non es un color valide!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s non es un color valide! Usa 3 o 6 characteres hexadecimal."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
+msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d."
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index a12227a70..be9a80250 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-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:50+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:49+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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,13 +21,78 @@ msgstr ""
"= 31 && n % 100 != 41 && n % 100 != 51 && n % 100 != 61 && n % 100 != 71 && "
"n % 100 != 81 && n % 100 != 91);\n"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Samþykkja"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Stillingar fyrir mynd"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Nýskrá"
+
+#. 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"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "Bjóða"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr ""
+
+#. 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/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
@@ -36,83 +101,92 @@ msgstr "Ekkert þannig merki."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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!"
@@ -122,22 +196,22 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -153,7 +227,7 @@ msgstr "Aðferð í forritsskilum fannst ekki!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Þessi aðferð krefst POST."
@@ -172,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."
@@ -184,7 +259,7 @@ msgstr "Gat ekki vistað persónulega síðu."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -198,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."
@@ -307,76 +382,76 @@ msgstr "Gat ekki uppfært notanda."
msgid "Two user ids or screen_names must be supplied."
msgstr "Tvo notendakenni eða skjáarnöfn verða að vera uppgefin."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr ""
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -388,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"
@@ -407,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"
@@ -427,98 +502,112 @@ msgstr "Hópar %s"
msgid "groups on %s"
msgstr "Hópsaðgerðir"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Það kom upp vandamál með setutókann þinn. Vinsamlegast reyndu aftur."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Ótækt notendanafn eða lykilorð."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Villa kom upp í stillingu notanda."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Bjóst ekki við innsendingu eyðublaðs."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Aðgangur"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Stuttnefni"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Lykilorð"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Allt"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -553,17 +642,17 @@ msgstr ""
msgid "No status with that ID found."
msgstr "Engin staða með þessu kenni fannst."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Fannst ekki"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -578,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"
@@ -615,27 +692,22 @@ msgstr "Almenningsrás %s"
msgid "%s updates from everyone!"
msgstr "%s færslur frá öllum!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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 ""
@@ -651,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."
@@ -664,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"
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -713,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"
@@ -745,23 +816,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Já"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Loka á þennan notanda"
@@ -769,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"
@@ -860,16 +936,61 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Babl hefur enga persónulega síðu"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Það komu upp vandamál varðandi setutókann þinn."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Ekkert svoleiðis babl."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Gat ekki uppfært hóp."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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)."
@@ -896,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Eyða þessu babli"
@@ -915,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 ""
@@ -1036,12 +1157,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1057,35 +1179,27 @@ msgstr "Þetta babl er ekki í uppáhaldi!"
msgid "Add to favorites"
msgstr "Bæta við sem uppáhaldsbabli"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Ekkert svoleiðis skjal."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Aðrir valkostir"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Þú ert ekki meðlimur í þessum hópi."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Ekkert svoleiðis babl."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Það komu upp vandamál varðandi setutókann þinn."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1096,47 +1210,52 @@ msgstr "Notaðu þetta eyðublað til að breyta hópnum."
msgid "Name is required."
msgstr "Sama og lykilorðið hér fyrir ofan. Nauðsynlegt."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Fullt nafn er of langt (í mesta lagi 255 stafir)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Stuttnefni nú þegar í notkun. Prófaðu eitthvað annað."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Lýsing"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Heimasíða er ekki gild vefslóð."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Gat ekki uppfært hóp."
@@ -1150,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."
@@ -1211,8 +1330,8 @@ msgstr ""
"ruslpóstinn þinn!). Þar ættu að vera skilaboð með ítarlegri leiðbeiningum."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Hætta við"
@@ -1293,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ekki tækt tölvupóstfang."
@@ -1305,7 +1424,7 @@ msgstr "Þetta er nú þegar tölvupóstfangið þitt."
msgid "That email address already belongs to another user."
msgstr "Þetta tölvupóstfang tilheyrir öðrum notanda."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Gat ekki sett inn staðfestingarlykil."
@@ -1367,7 +1486,7 @@ msgstr "Þetta babl er nú þegar í uppáhaldi!"
msgid "Disfavor favorite"
msgstr "Ekki lengur í uppáhaldi"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Vinsælt babl"
@@ -1489,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
@@ -1518,7 +1656,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1551,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Stjórnandi"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Loka"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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"
@@ -1801,6 +1945,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Þetta er ekki Jabber-kennið þitt."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Innhólf %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1883,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"
@@ -1953,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"
@@ -1962,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"
@@ -1984,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Innskráning"
@@ -2025,21 +2181,21 @@ msgstr ""
"notendanafn? [Nýskráðu þig](%%action.register%%) eða prófaðu [OpenID](%%"
"action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
@@ -2049,8 +2205,9 @@ msgid "No current status"
msgstr "Engin núverandi staða"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Ekkert svoleiðis babl."
#: actions/newapplication.php:64
#, fuzzy
@@ -2062,11 +2219,11 @@ msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
msgid "Use this form to register a new application."
msgstr "Notaðu þetta eyðublað til að búa til nýjan hóp."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Gat ekki búið til uppáhald."
@@ -2200,29 +2357,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2243,8 +2400,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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ð."
@@ -2315,6 +2472,11 @@ msgstr "Ótækt bablinnihald"
msgid "Login token expired."
msgstr "Skrá þig inn á síðuna"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Úthólf %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2386,7 +2548,8 @@ msgstr "Get ekki vistað nýja lykilorðið."
msgid "Password saved."
msgstr "Lykilorð vistað."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2394,141 +2557,157 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Þessi síða er ekki aðgengileg í "
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "Bjóða"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Endurheimta"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Babl vefsíðunnar"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Mynd"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Stillingar fyrir mynd"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Mynd hefur verið uppfærð."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr ""
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Endurheimta"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Babl"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Endurheimta"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Babl vefsíðunnar"
@@ -2556,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 ""
@@ -2585,13 +2764,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Heimasíða"
@@ -2616,8 +2795,8 @@ msgid "Bio"
msgstr "Lýsing"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Staðsetning"
@@ -2643,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:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Tungumál"
@@ -2671,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tímabelti ekki valið."
@@ -2684,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."
@@ -2714,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2761,7 +2941,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2794,7 +2974,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Merkjaský"
@@ -2934,8 +3114,7 @@ msgstr ""
msgid "Registration successful"
msgstr "Nýskráning tókst"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Nýskrá"
@@ -2975,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Tölvupóstur"
@@ -3080,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"
@@ -3125,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "à sviðsljósinu"
@@ -3134,42 +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:144
+#: 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: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 "
@@ -3181,6 +3365,21 @@ 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"
+msgstr "Tölfræði"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3190,117 +3389,159 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Stillingar fyrir mynd"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Babl hefur enga persónulega síðu"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Stuttnefni"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Uppröðun"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Lýsing"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tölfræði"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ertu viss um að þú viljir eyða þessu babli?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Uppáhaldsbabl %s"
+
#: actions/showfavorites.php:132
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 "
@@ -3308,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 ""
@@ -3317,67 +3558,72 @@ msgstr ""
msgid "%s group"
msgstr "%s hópurinn"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Hópmeðlimir %s, síða %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Hópssíðan"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3387,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."
@@ -3396,7 +3642,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3428,6 +3674,11 @@ msgstr "Babl sent inn"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s og vinirnir, síða %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3453,25 +3704,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3480,7 +3731,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3488,7 +3739,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Svör við %s"
@@ -3503,208 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ekki tækt tölvupóstfang"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: 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:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Staðbundin sýn"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Tungumál (ákjósanlegt)"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "Vefslóð"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Endurheimta"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Samþykkja"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Friðhelgi"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "Bjóða"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr ""
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ný skilaboð"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Vandamál komu upp við að vista babl."
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Stillingar fyrir mynd"
+msgid "Save site notice"
+msgstr "Babl vefsíðunnar"
#: actions/smssettings.php:58
#, fuzzy
@@ -3806,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:107
+#, fuzzy
+msgid "No such profile."
+msgstr "Ekkert svoleiðis babl."
-#: actions/subscribe.php:69
+#: 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"
@@ -3878,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 "
@@ -3888,30 +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:86
+#: 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: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 ""
@@ -3930,7 +4188,8 @@ msgstr "Merki %s"
msgid "User profile"
msgstr "Persónuleg síða notanda"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Ljósmynd"
@@ -3967,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."
@@ -3994,18 +4253,20 @@ msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
msgid "Unsubscribed"
msgstr "Ekki lengur áskrifandi"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php: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 ""
@@ -4074,26 +4335,6 @@ msgstr "Boðskort hefur verið sent út"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Heimila áskriftir"
@@ -4109,36 +4350,36 @@ msgstr ""
"gerast áskrifandi að babli þessa notanda. Ef þú baðst ekki um að gerast "
"áskrifandi að babli, smelltu þá á \"Hætta við\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Samþykkja"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Gerast áskrifandi að þessum notanda"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Hafna"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr ""
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Engin heimildarbeiðni!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Ãskrift heimiluð"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4149,11 +4390,11 @@ msgstr ""
"leiðbeiningar síðunnar um það hvernig á að heimila áskrift. Ãskriftartókinn "
"þinn er;"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Ãskrift hafnað"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4163,37 +4404,37 @@ msgstr ""
"Ãskriftinni hefur verið hafnað en afturkallsveffang var ekki sent. Athugaðu "
"leiðbeiningar síðunnar um það hvernig á að hafna áskrift alveg."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Get ekki lesið slóðina fyrir myndina '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Röng gerð myndar fyrir '%s'"
@@ -4212,20 +4453,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Hópmeðlimir %s, síða %d"
+
#: actions/usergroups.php:130
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"
@@ -4238,11 +4490,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Tölfræði"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4274,7 +4521,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persónulegt"
@@ -4315,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"
@@ -4333,63 +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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Gat ekki vistað babl. Óþekktur notandi."
-#: classes/Notice.php:234
+#: 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:240
+#: 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:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Gagnagrunnsvilla við innsetningu svars: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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"
@@ -4427,128 +4721,189 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ónafngreind síða"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Stikl aðalsíðu"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Heim"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Tengjast"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Bjóða"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Stjórnandi"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Útskráning"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Bjóða"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Hjálp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Innskráning"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjálp!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Leita"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjálp"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Staðbundin sýn"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Babl síðunnar"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Stikl undirsíðu"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjálp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Um"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Spurt og svarað"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Friðhelgi"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Frumþula"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Tengiliður"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4557,12 +4912,12 @@ msgstr ""
"**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er örbloggsþjónusta."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4573,142 +4928,224 @@ msgstr ""
"sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Allt "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "leyfi."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Uppröðun"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Eftir"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS staðfesting"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS staðfesting"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Frumþula"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4737,12 +5174,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Lykilorðabreyting"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Lykilorðabreyting"
@@ -4896,83 +5333,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"
@@ -4986,6 +5432,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"
@@ -5013,20 +5460,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Enginn staðfestingarlykill."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Skrá þig inn á síðuna"
@@ -5127,6 +5574,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"
@@ -5218,32 +5670,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5448,7 +5900,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á"
@@ -5539,6 +5991,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"
@@ -5572,50 +6030,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "à sviðsljósinu"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svara þessu babli"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Babl sent inn"
@@ -5649,12 +6107,7 @@ msgstr "Villa kom upp við að setja inn persónulega fjarsíðu"
msgid "Duplicate notice"
msgstr "Eyða babli"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Gat ekki sett inn nýja áskrift."
@@ -5670,19 +6123,19 @@ msgstr "Svör"
msgid "Favorites"
msgstr "Uppáhald"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Innhólf"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Mótteknu skilaboðin þín"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Úthólf"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Skilaboð sem þú hefur sent"
@@ -5696,7 +6149,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"
@@ -5704,23 +6157,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"
@@ -5763,6 +6216,15 @@ msgstr "Svara þessu babli"
msgid "Repeat this notice"
msgstr "Svara þessu babli"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5781,6 +6243,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Leita"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5834,35 +6300,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
@@ -5916,67 +6361,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
@@ -5990,7 +6450,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index 892526e98..05b829067 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -9,23 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:54+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:52+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Accesso"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Impostazioni di accesso al sito"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registrazione"
+
+#. 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
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privato"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Rende la registrazione solo su invito"
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Solo invito"
+
+#. 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"
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Chiuso"
+
+#. 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/accessadminpanel.php:203
+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
@@ -34,51 +94,58 @@ msgstr "Pagina inesistente."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 "Profili bloccati di %1$s, pagina %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."
@@ -86,7 +153,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 "
@@ -95,7 +162,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 "
@@ -105,7 +173,7 @@ msgstr ""
"qualche cosa alla sua attenzione](%%%%action.newnotice%%%%?status_textarea=%3"
"$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -114,12 +182,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!"
@@ -129,22 +198,22 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -159,7 +228,7 @@ msgstr "Metodo delle API non trovato."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Questo metodo richiede POST."
@@ -179,8 +248,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."
@@ -190,7 +260,7 @@ msgstr "Impossibile salvare il profilo."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -206,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."
@@ -308,15 +378,15 @@ msgstr "Non puoi non seguirti."
msgid "Two user ids or screen_names must be supplied."
msgstr "Devono essere forniti due ID utente o nominativi."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Impossibile determinare l'utente sorgente."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -324,62 +394,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -390,15 +460,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."
@@ -407,7 +477,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."
@@ -427,102 +497,115 @@ msgstr "Gruppi di %s"
msgid "groups on %s"
msgstr "Gruppi su %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Nessun parametro oauth_token fornito."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Token non valido."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
"Si è verificato un problema con il tuo token di sessione. Prova di nuovo."
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Nome utente o password non valido."
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Errore nell'impostare l'utente."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "Errore nel database nell'eliminare l'applicazione utente OAuth."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "Errore del DB nell'inserire un hashtag: %s"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Errore nel database nell'inserire l'applicazione utente OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"Il token di richiesta %s è stato autorizzato. Scambiarlo con un token di "
+"accesso."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "Il token di richiesta %s è stato rifiutato o revocato."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Invio del modulo inaspettato."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Un'applicazione vorrebbe collegarsi al tuo account"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Consenti o nega l'accesso"
+
+#: 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 ""
+"L'applicazione <strong>%1$s</strong> di <strong>%2$s</strong> vorrebbe poter "
+"<strong>%3$s</strong> ai dati del tuo account %4$s. È consigliato fornire "
+"accesso al proprio account %4$s solo ad applicazioni di cui ci si può fidare."
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Soprannome"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Password"
-#: actions/apioauthauthorize.php:338
-#, fuzzy
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr "Aspetto"
+msgstr "Nega"
-#: actions/apioauthauthorize.php:344
-#, fuzzy
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr "Tutto"
+msgstr "Consenti"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Consenti o nega l'accesso alle informazioni del tuo account."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -551,19 +634,19 @@ 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:162 actions/newnotice.php:155
+#: 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 "Troppo lungo. Lunghezza massima %d caratteri."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Non trovato"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -578,23 +661,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"
@@ -615,27 +686,22 @@ msgstr "Attività pubblica di %s"
msgid "%s updates from everyone!"
msgstr "Aggiornamenti di %s da tutti!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Ripetuto da %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -651,8 +717,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."
@@ -664,7 +729,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"
@@ -682,30 +747,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -713,7 +778,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."
@@ -747,22 +812,23 @@ msgstr ""
"tuoi messaggi, non potrà più abbonarsi e non riceverai notifica delle @-"
"risposte che ti invierà."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Sì"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Blocca questo utente"
@@ -770,39 +836,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"
@@ -845,7 +915,6 @@ msgid "Couldn't delete email confirmation."
msgstr "Impossibile eliminare l'email di conferma."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Conferma indirizzo"
@@ -859,16 +928,57 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Devi eseguire l'accesso per eliminare un'applicazione."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Applicazione non trovata."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Si è verificato un problema con il tuo token di sessione."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Elimina applicazione"
+
+#: 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 ""
+"Vuoi eliminare questa applicazione? Questa azione eliminerà tutti i dati "
+"riguardo all'applicazione dal database, comprese tutte le connessioni utente."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Non eliminare l'applicazione"
+
+#: actions/deleteapplication.php:160
+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."
@@ -897,7 +1007,7 @@ msgstr "Vuoi eliminare questo messaggio?"
msgid "Do not delete this notice"
msgstr "Non eliminare il messaggio"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Elimina questo messaggio"
@@ -913,7 +1023,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."
@@ -921,12 +1031,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"
@@ -1031,12 +1141,13 @@ msgstr "Reimposta i valori predefiniti"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1052,90 +1163,75 @@ msgstr "Questo messaggio non è un preferito!"
msgid "Add to favorites"
msgstr "Aggiungi ai preferiti"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Nessun documento."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Nessun documento \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Modifica applicazione"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Devi eseguire l'accesso per modificare un gruppo."
+msgstr "Devi eseguire l'accesso per modificare un'applicazione."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Non fai parte di questo gruppo."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Nessun messaggio."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Si è verificato un problema con il tuo token di sessione."
+msgstr "Nessuna applicazione."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Usa questo modulo per modificare il gruppo."
+msgstr "Usa questo modulo per modificare la tua applicazione."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "Stessa password di sopra; richiesta"
+msgstr "Il nome è richiesto."
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Nome troppo lungo (max 255 caratteri)."
+msgstr "Il nome è troppo lungo (max 255 caratteri)."
+
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Nome già in uso. Prova con un altro."
-#: actions/editapplication.php:183 actions/newapplication.php:165
-#, fuzzy
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Descrizione"
+msgstr "La descrizione è richiesta."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "L'URL sorgente è troppo lungo."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "L'URL \"%s\" dell'immagine non è valido."
+msgstr "L'URL sorgente non è valido."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "L'organizzazione è richiesta."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Ubicazione troppo lunga (max 255 caratteri)."
+msgstr "L'organizzazione è troppo lunga (max 255 caratteri)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Il sito web dell'organizzazione è richiesto."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Il callback è troppo lungo."
-#: actions/editapplication.php:222 actions/newapplication.php:212
-#, fuzzy
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr "L'URL \"%s\" dell'immagine non è valido."
+msgstr "L'URL di callback non è valido."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "Impossibile aggiornare il gruppo."
+msgstr "Impossibile aggiornare l'applicazione."
#: actions/editgroup.php:56
#, php-format
@@ -1146,29 +1242,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."
@@ -1206,8 +1302,8 @@ msgstr ""
"istruzioni."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Annulla"
@@ -1290,7 +1386,7 @@ msgid "Cannot normalize that email address"
msgstr "Impossibile normalizzare quell'indirizzo email"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non è un indirizzo email valido."
@@ -1302,7 +1398,7 @@ msgstr "Quello è già il tuo indirizzo email."
msgid "That email address already belongs to another user."
msgstr "Quell'indirizzo email appartiene già a un altro utente."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Impossibile inserire il codice di conferma."
@@ -1364,7 +1460,7 @@ msgstr "Questo messaggio è già un preferito!"
msgid "Disfavor favorite"
msgstr "Rimuovi preferito"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Messaggi famosi"
@@ -1483,6 +1579,22 @@ msgstr "Nessun file."
msgid "Cannot read file."
msgstr "Impossibile leggere il file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ruolo non valido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Questo ruolo è riservato e non può essere impostato."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Non puoi concedere i ruoli agli utenti su questo sito."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "L'utente ricopre già questo ruolo."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1512,7 +1624,7 @@ msgstr "L'utente è già bloccato dal gruppo."
msgid "User is not a member of group."
msgstr "L'utente non fa parte del gruppo."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blocca l'utente dal gruppo"
@@ -1547,11 +1659,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."
@@ -1559,20 +1671,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."
@@ -1580,62 +1692,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Amministra"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blocca"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Rende l'utente amministratore del gruppo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Rendi amm."
-#: actions/groupmembers.php:473
+#: 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"
@@ -1807,6 +1925,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Quello non è il tuo ID di Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Casella posta in arrivo di %s - pagina %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1889,16 +2012,18 @@ 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
+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"
@@ -1959,7 +2084,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"
@@ -1968,11 +2097,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"
@@ -1989,8 +2118,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Accedi"
@@ -2027,22 +2155,22 @@ msgstr ""
"Accedi col tuo nome utente e password. Non hai ancora un nome utente? [Crea]"
"(%%action.register%%) un nuovo account."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Solo gli amministratori possono rendere un altro utente amministratori."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s è già amministratore del gruppo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Impossibile recuperare la membership per %1$s nel gruppo %2$s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Impossibile rendere %1$s un amministratore del gruppo %2$s"
@@ -2052,27 +2180,24 @@ msgid "No current status"
msgstr "Nessun messaggio corrente"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "Nuova applicazione"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Devi eseguire l'accesso per creare un gruppo."
+msgstr "Devi eseguire l'accesso per registrare un'applicazione."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Usa questo modulo per creare un nuovo gruppo."
+msgstr "Usa questo modulo per registrare un'applicazione."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "L'URL sorgente è richiesto."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "Impossibile creare gli alias."
+msgstr "Impossibile creare l'applicazione."
#: actions/newgroup.php:53
msgid "New group"
@@ -2139,7 +2264,7 @@ msgid "Text search"
msgstr "Cerca testo"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
msgstr "Risultati della ricerca per \"%1$s\" su %2$s"
@@ -2187,49 +2312,48 @@ msgid "Nudge sent!"
msgstr "Richiamo inviato!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Devi eseguire l'accesso per modificare un gruppo."
+msgstr "Devi eseguire l'accesso per poter elencare le tue applicazioni."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Altre opzioni"
+msgstr "Applicazioni OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Applicazioni che hai registrato"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Non hai ancora registrato alcuna applicazione."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Applicazioni collegate"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Hai consentito alle seguenti applicazioni di accedere al tuo account."
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "Non fai parte di quel gruppo."
+msgstr "Non sei un utente di quella applicazione."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Impossibile revocare l'accesso per l'applicazione: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Non hai autorizzato alcuna applicazione all'uso del tuo account."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Gli sviluppatori possono modificare le impostazioni di registrazione per le "
+"loro applicazioni "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2248,8 +2372,8 @@ msgstr "tipo di contenuto "
msgid "Only "
msgstr "Solo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2262,7 +2386,6 @@ msgid "Notice Search"
msgstr "Cerca messaggi"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Altre impostazioni"
@@ -2295,30 +2418,30 @@ msgid "URL shortening service is too long (max 50 chars)."
msgstr "Il servizio di riduzione degli URL è troppo lungo (max 50 caratteri)."
#: actions/otp.php:69
-#, fuzzy
msgid "No user ID specified."
msgstr "Nessun ID utente specificato."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
msgstr "Nessun token di accesso specificato."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
msgstr "Nessun token di accesso richiesto."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
msgstr "Token di accesso specificato non valido."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
msgstr "Token di accesso scaduto."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Casella posta inviata di %s - pagina %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2391,7 +2514,8 @@ msgstr "Impossibile salvare la nuova password."
msgid "Password saved."
msgstr "Password salvata."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Percorsi"
@@ -2399,132 +2523,147 @@ msgstr "Percorsi"
msgid "Path and server settings for this StatusNet site."
msgstr "Percorso e impostazioni server per questo sito StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Directory del tema non leggibile: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Directory delle immagini degli utenti non scrivibile: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Directory degli sfondi non scrivibile: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Directory delle localizzazioni non leggibile: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Server SSL non valido. La lunghezza massima è di 255 caratteri."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Sito"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Server"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nome host del server"
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Percorso"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Percorso del sito"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Percorso alle localizzazioni"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Percorso della directory alle localizzazioni"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URL semplici"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Usare gli URL semplici (più leggibili e facili da ricordare)?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Tema"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Server del tema"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Percorso del tema"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Directory del tema"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Immagini"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Server dell'immagine"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Percorso dell'immagine"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Directory dell'immagine"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Sfondi"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Server dello sfondo"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Percorso dello sfondo"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Directory dello sfondo"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Qualche volta"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Sempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Usa SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Quando usare SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Server SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Server a cui dirigere le richieste SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Salva percorsi"
@@ -2551,11 +2690,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 ""
@@ -2583,13 +2722,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Pagina web"
@@ -2611,8 +2750,8 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Ubicazione"
@@ -2637,7 +2776,7 @@ msgid ""
msgstr ""
"Le tue etichette (lettere, numeri, -, . e _), separate da virgole o spazi"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2665,7 +2804,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso orario non selezionato"
@@ -2678,23 +2817,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."
@@ -2707,28 +2847,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Feed dell'attività pubblica (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Feed dell'attività pubblica (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Feed dell'attività pubblica (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2737,18 +2877,18 @@ msgstr ""
"Questa è l'attività pubblica di %%site.name%%, ma nessuno ha ancora scritto "
"qualche cosa."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Fallo tu!"
-#: actions/public.php:186
+#: 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:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2761,7 +2901,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2797,7 +2937,7 @@ msgid ""
"one!"
msgstr "Perché non [crei un accout](%%action.register%%) e ne scrivi uno tu!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Insieme delle etichette"
@@ -2938,10 +3078,9 @@ msgstr "Codice di invito non valido."
msgid "Registration successful"
msgstr "Registrazione riuscita"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: 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."
@@ -2982,7 +3121,7 @@ msgid "Same as password above. Required."
msgstr "Stessa password di sopra; richiesta"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3089,7 +3228,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"
@@ -3127,7 +3266,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Ripetuti"
@@ -3135,28 +3274,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:144
+#: 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: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 "
@@ -3165,7 +3309,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 "
@@ -3174,7 +3318,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 "
@@ -3188,6 +3332,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Risposte a %1$s su %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Non puoi revocare i ruoli degli utenti su questo sito."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "L'utente non ricopre questo ruolo."
+
+#: 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 "Non puoi mettere in \"sandbox\" gli utenti su questo sito."
@@ -3196,104 +3352,142 @@ 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:390
+msgid "Sessions"
+msgstr "Sessioni"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Impostazioni di sessione per questo sito di StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gestione sessioni"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Indica se gestire autonomamente le sessioni"
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Debug delle sessioni"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Abilita il debug per le sessioni"
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Salva impostazioni"
+
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Devi eseguire l'accesso per lasciare un gruppo."
+msgstr "Devi eseguire l'accesso per visualizzare un'applicazione."
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "Il messaggio non ha un profilo"
+msgstr "Profilo applicazione"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Icona"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nome"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Paginazione"
+msgstr "Organizzazione"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Descrizione"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiche"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "creata da %1$s - %2$s accessi predefiniti - %3$d utenti"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Azioni applicazione"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "Reimposta chiave e segreto"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Informazioni applicazione"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
-msgstr ""
+msgstr "Chiave consumatore"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
-msgstr ""
+msgstr "Segreto consumatore"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL token di richiesta"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL token di accesso"
-#: actions/showapplication.php:263
-#, fuzzy
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr "Autore"
+msgstr "URL di autorizzazione"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Nota: sono supportate firme HMAC-SHA1, ma non è supportato il metodo di "
+"firma di testo in chiaro."
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ripristinare la chiave e il segreto?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Messaggi preferiti di %1$s, pagina %2$d"
#: actions/showfavorites.php:132
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."
@@ -3301,7 +3495,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 "
@@ -3310,7 +3504,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 "
@@ -3321,76 +3515,81 @@ 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."
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
msgid "%s group"
-msgstr "Gruppi di %s"
+msgstr "Gruppo %s"
+
+#: actions/showgroup.php:84
+#, php-format
+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/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3406,7 +3605,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."
@@ -3418,7 +3617,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"
@@ -3449,6 +3648,11 @@ msgstr "Messaggio eliminato."
msgid " tagged %s"
msgstr " etichettati con %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, pagina %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3474,12 +3678,12 @@ msgstr "Feed dei messaggi per %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF per %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Questa è l'attività di %1$s, ma %2$s non ha ancora scritto nulla."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3487,7 +3691,7 @@ msgstr ""
"Visto niente di interessante? Non hai scritto ancora alcun messaggio, questo "
"potrebbe essere un buon momento per iniziare! :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3496,7 +3700,7 @@ msgstr ""
"Puoi provare a richiamare %1$s o [scrivere qualche cosa che attiri la sua "
"attenzione](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3510,7 +3714,7 @@ msgstr ""
"i messaggi di **%s** e di molti altri! ([Maggiori informazioni](%%%%doc.help%"
"%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3521,7 +3725,7 @@ msgstr ""
"it.wikipedia.org/wiki/Microblogging) basato sul software libero [StatusNet]"
"(http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Ripetizione di %s"
@@ -3535,201 +3739,133 @@ msgid "User is already silenced."
msgstr "L'utente è già stato zittito."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Impostazioni di base per questo sito StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Impostazioni di base per questo sito StatusNet"
-#: actions/siteadminpanel.php:146
+#: 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:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Devi avere un'email di contatto valida."
-#: actions/siteadminpanel.php:172
-#, fuzzy, php-format
+#: actions/siteadminpanel.php:159
+#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" sconosciuta."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "URL di segnalazione snapshot non valido."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Valore di esecuzione dello snapshot non valido."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "La frequenza degli snapshot deve essere un numero."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Il limite minimo del testo è di 140 caratteri."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Generale"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome del sito"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Offerto da"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL per offerto da"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Indirizzo email di contatto per il sito"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Locale"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso orario predefinito"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso orario predefinito; tipicamente UTC"
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Lingua predefinita"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Server"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nome host del server"
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "URL semplici"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Usare gli URL semplici (più leggibili e facili da ricordare)?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Accesso"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privato"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Proibire agli utenti anonimi (che non hanno effettuato l'accesso) di vedere "
-"il sito?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Solo invito"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Rende la registrazione solo su invito"
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Chiuso"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Disabilita la creazione di nuovi account"
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Snapshot"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "A caso quando avviene un web hit"
+"Lingua del sito quando il rilevamento automatico del browser non è "
+"disponibile"
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "In un job pianificato"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Snapshot dei dati"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviare dati statistici a status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frequenza"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Gli snapshot verranno inviati ogni N web hit"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "URL per la segnalazione"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Gli snapshot verranno inviati a questo URL"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limiti"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limiti del testo"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Numero massimo di caratteri per messaggo"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite duplicati"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Salva impostazioni"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Modifica il messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Impossibile salvare il messaggio del sito."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "La dimensione massima del messaggio del sito è di 255 caratteri"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Testo messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Testo messaggio del sito (massimo 255 caratteri, HTML consentito)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Salva messaggio"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3830,19 +3966,87 @@ 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
+msgid "Manage snapshot configuration"
+msgstr "Gestisci configurazione snapshot"
+
+#: 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
+msgid "Save snapshot settings"
+msgstr "Salva impostazioni snapshot"
+
#: 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:69
+#: 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:145
msgid "Subscribed"
msgstr "Abbonati"
@@ -3906,7 +4110,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 "
@@ -3921,30 +4125,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:86
+#: 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: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)"
@@ -3962,7 +4171,8 @@ msgstr "Etichetta %s"
msgid "User profile"
msgstr "Profilo utente"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Fotografia"
@@ -3999,7 +4209,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."
@@ -4023,7 +4233,7 @@ msgstr "Nessun ID di profilo nella richiesta."
msgid "Unsubscribed"
msgstr "Abbonamento annullato"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4031,12 +4241,13 @@ 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
+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."
@@ -4099,26 +4310,6 @@ msgstr "Inviti abilitati"
msgid "Whether to allow users to invite new users."
msgstr "Indica se consentire agli utenti di invitarne di nuovi"
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessioni"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Gestione sessioni"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Indica se gestire autonomamente le sessioni"
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Debug delle sessioni"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Abilita il debug per le sessioni"
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autorizza abbonamento"
@@ -4132,36 +4323,36 @@ msgstr ""
"Controlla i dettagli seguenti per essere sicuro di volerti abbonare ai "
"messaggi di questo utente. Se non hai richiesto ciò, fai clic su \"Rifiuta\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licenza"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Accetta"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Abbonati a questo utente"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Rifiuta"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Rifiuta questo abbonamento"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Nessuna richiesta di autorizzazione!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Abbonamento autorizzato"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4171,11 +4362,11 @@ msgstr ""
"richiamo. Controlla le istruzioni del sito per i dettagli su come "
"autorizzare l'abbonamento. Il tuo token per l'abbonamento è:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abbonamento rifiutato"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4185,37 +4376,37 @@ msgstr ""
"richiamo. Controlla le istruzioni del sito per i dettagli su come rifiutare "
"completamente l'abbonamento."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "URL \"%s\" dell'ascoltatore non trovato qui."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "L'URI \"%s\" di colui che si ascolta è troppo lungo."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "L'URI \"%s\" di colui che si ascolta è un utente locale."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "L'URL \"%s\" del profilo è per un utente locale."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "L'URL \"%s\" dell'immagine non è valido."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Impossibile leggere l'URL \"%s\" dell'immagine."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo di immagine errata per l'URL \"%s\"."
@@ -4236,20 +4427,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Gustati il tuo hotdog!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Gruppi di %1$s, pagina %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4264,10 +4466,6 @@ msgstr ""
"Questo sito esegue il software %1$s versione %2$s, Copyright 2008-2010 "
"StatusNet, Inc. e collaboratori."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Collaboratori"
@@ -4309,7 +4507,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugin"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versione"
@@ -4339,19 +4537,20 @@ msgstr ""
"Un file di questa dimensione supererebbe la tua quota mensile di %d byte."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Profilo del gruppo"
+msgstr "Ingresso nel gruppo non riuscito."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Impossibile aggiornare il gruppo."
+msgstr "Non si fa parte del gruppo."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Profilo del gruppo"
+msgstr "Uscita dal gruppo non riuscita."
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Impossibile aggiornare il gruppo locale."
#: classes/Login_token.php:76
#, php-format
@@ -4370,27 +4569,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Errore del DB nell'inserire un hashtag: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema nel salvare il messaggio. Troppo lungo."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema nel salvare il messaggio. Utente sconosciuto."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4398,37 +4597,72 @@ msgstr ""
"Troppi messaggi duplicati troppo velocemente; fai una pausa e scrivi di "
"nuovo tra qualche minuto."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Errore del DB nell'inserire la risposta: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problema nel salvare la casella della posta del gruppo."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossibile eliminare il token di abbonamento OMB."
+
+#: 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"
@@ -4458,7 +4692,7 @@ msgid "Other options"
msgstr "Altre opzioni"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
msgstr "%1$s - %2$s"
@@ -4466,124 +4700,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Pagina senza nome"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Esplorazione sito primaria"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Home"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personale e attività degli amici"
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr "Personale"
+
+#. TRANS: Tooltip for main menu option "Account"
#: lib/action.php:435
+msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Modifica la tua email, immagine, password o il tuo profilo"
-#: lib/action.php:438
-msgid "Connect"
-msgstr "Connetti"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connettiti con altri servizi"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Connetti"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modifica la configurazione del sito"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invita"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Amministra"
-#: lib/action.php:447 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 "Invita amici e colleghi a seguirti su %s"
-#: lib/action.php:452
-msgid "Logout"
-msgstr "Esci"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invita"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Termina la tua sessione sul sito"
-#: lib/action.php:457
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Esci"
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crea un account"
-#: lib/action.php:460
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr "Registrati"
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Accedi al sito"
-#: lib/action.php:463 lib/action.php:726
-msgid "Help"
-msgstr "Aiuto"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Accedi"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Aiutami!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Cerca"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Aiuto"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cerca persone o del testo"
-#: lib/action.php:487
+#: lib/action.php:491
+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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Viste locali"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Pagina messaggio"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Esplorazione secondaria del sito"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Aiuto"
+
+#: lib/action.php:754
msgid "About"
msgstr "Informazioni"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Sorgenti"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contatti"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licenza del software StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4592,12 +4872,12 @@ msgstr ""
"**%%site.name%%** è un servizio di microblog offerto da [%%site.broughtby%%]"
"(%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** è un servizio di microblog. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4608,141 +4888,219 @@ 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:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licenza del contenuto del sito"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "I contenuti e i dati di %1$s sono privati e confidenziali."
-#: lib/action.php:805
+#: 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:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Tutti "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licenza."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginazione"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Successivi"
-#: lib/action.php:1141
+#: 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
+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 lib/adminpanelaction.php:327
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr "Aspetto"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
+msgid "User configuration"
+msgstr "Configurazione utente"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configurazione percorsi"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Configurazione sessioni"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Modifica messaggio del sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Configurazione snapshot"
+
+#: 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/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+"Tentativo di autorizzazione API non riuscito, soprannome = %1$s, proxy = %2"
+"$s, IP = %3$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Modifica applicazione"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "Icona per questa applicazione"
+
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Descrivi il gruppo o l'argomento in %d caratteri"
+msgstr "Descrivi l'applicazione in %d caratteri"
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "Descrivi il gruppo o l'argomento"
+msgstr "Descrivi l'applicazione"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "Sorgenti"
+msgstr "URL sorgente"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr "URL della pagina web, blog del gruppo o l'argomento"
+msgstr "URL della pagina web di questa applicazione"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Organizzazione responsabile per questa applicazione"
-#: lib/applicationeditform.php:232
-#, fuzzy
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr "URL della pagina web, blog del gruppo o l'argomento"
+msgstr "URL della pagina web dell'organizzazione"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL verso cui redirigere dopo l'autenticazione"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Browser"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Desktop"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Tipo di applicazione, browser o desktop"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Sola lettura"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lettura-scrittura"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Accesso predefinito per questa applicazione, sola lettura o lettura-scrittura"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Rimuovi"
+msgstr "Revoca"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4764,11 +5122,11 @@ msgstr "Messaggi in cui appare questo allegato"
msgid "Tags for this attachment"
msgstr "Etichette per questo allegato"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Modifica della password non riuscita"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "La modifica della password non è permessa"
@@ -4919,82 +5277,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"
@@ -5008,6 +5375,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"
@@ -5046,6 +5414,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 "
@@ -5074,21 +5443,21 @@ msgstr ""
"tracks - non ancora implementato\n"
"tracking - non ancora implementato\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Non è stato trovato alcun file di configurazione. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Vai al programma d'installazione."
@@ -5105,13 +5474,12 @@ msgid "Updates by SMS"
msgstr "Messaggi via SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Connetti"
+msgstr "Connessioni"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Applicazioni collegate autorizzate"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5188,6 +5556,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 "Concedi a questo utente il ruolo \"%s\""
+
#: 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"
@@ -5278,35 +5651,35 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
-#, fuzzy, php-format
+#: lib/jabber.php:400
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "Lingua \"%s\" sconosciuta."
+msgstr "Sorgente casella in arrivo %d sconosciuta."
#: lib/joinform.php:114
msgid "Join"
@@ -5584,7 +5957,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"
@@ -5676,6 +6049,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"
@@ -5694,12 +6072,10 @@ msgid "Attach a file"
msgstr "Allega un file"
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
msgstr "Condividi la mia posizione"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
msgstr "Non condividere la mia posizione"
@@ -5708,49 +6084,51 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Il recupero della tua posizione geografica sta impiegando più tempo del "
+"previsto. Riprova più tardi."
-#: lib/noticelist.php:428
+#: 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:531
+#: lib/noticelist.php:566
msgid "in context"
-msgstr "nel contesto"
+msgstr "in una discussione"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Ripetuto da"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Rispondi a questo messaggio"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Rispondi"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Messaggio ripetuto"
@@ -5782,11 +6160,7 @@ msgstr "Errore nell'inserire il profilo remoto"
msgid "Duplicate notice"
msgstr "Messaggio duplicato"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Non ti è possibile abbonarti."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Impossibile inserire un nuovo abbonamento."
@@ -5802,19 +6176,19 @@ msgstr "Risposte"
msgid "Favorites"
msgstr "Preferiti"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "In arrivo"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "I tuoi messaggi in arrivo"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Inviati"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "I tuoi messaggi inviati"
@@ -5827,7 +6201,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"
@@ -5835,23 +6209,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"
@@ -5891,6 +6265,15 @@ msgstr "Ripetere questo messaggio?"
msgid "Repeat this notice"
msgstr "Ripeti questo messaggio"
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Revoca il ruolo \"%s\" a questo utente"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "Nessun utente singolo definito per la modalità single-user."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Sandbox"
@@ -5907,6 +6290,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"
@@ -5958,33 +6345,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
@@ -6036,67 +6404,81 @@ 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:875
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Ruolo dell'utente"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Amministratore"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderatore"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "circa un anno fa"
@@ -6110,7 +6492,7 @@ msgstr "%s non è un colore valido."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s non è un colore valido. Usa 3 o 6 caratteri esadecimali."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d."
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index 6260ef5ac..95695792b 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -11,23 +11,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:37:57+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:55+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63298); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "アクセス"
+
+#. 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 "登録"
+
+#. 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 "プライベート"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "招待ã®ã¿ç™»éŒ²ã™ã‚‹"
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "招待ã®ã¿"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "æ–°è¦ç™»éŒ²ã‚’無効。"
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "é–‰ã˜ã‚‰ã‚ŒãŸ"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "アクセス設定ã®ä¿å­˜"
+
+#: 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
@@ -36,57 +96,64 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 "ãã®ã‚ˆã†ãªåˆ©ç”¨è€…ã¯ã„ã¾ã›ã‚“。"
+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 "
@@ -95,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 "
@@ -104,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:202
+#: 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 "
@@ -113,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 ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
@@ -128,22 +197,22 @@ msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
@@ -158,7 +227,7 @@ msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã¯ POST ãŒå¿…è¦ã§ã™ã€‚"
@@ -172,16 +241,17 @@ msgstr ""
#: actions/apiaccountupdatedeliverydevice.php:132
msgid "Could not update user."
-msgstr "利用者を更新ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+msgstr "ユーザを更新ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
#: 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/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 "利用者ã¯ãƒ—ロフィールをもã£ã¦ã„ã¾ã›ã‚“。"
+msgstr "ユーザã¯ãƒ—ロフィールをもã£ã¦ã„ã¾ã›ã‚“。"
#: actions/apiaccountupdateprofile.php:147
msgid "Could not save profile."
@@ -189,7 +259,7 @@ msgstr "プロフィールをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -205,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."
@@ -222,11 +292,11 @@ msgstr "自分自身をブロックã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ï¼"
#: actions/apiblockcreate.php:126
msgid "Block user failed."
-msgstr "利用者ã®ãƒ–ロックã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+msgstr "ユーザã®ãƒ–ロックã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
#: actions/apiblockdestroy.php:114
msgid "Unblock user failed."
-msgstr "利用者ã®ãƒ–ロック解除ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+msgstr "ユーザã®ãƒ–ロック解除ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
#: actions/apidirectmessage.php:89
#, php-format
@@ -259,11 +329,11 @@ msgstr "é•·ã™ãŽã¾ã™ã€‚メッセージã¯æœ€å¤§ %d å­—ã¾ã§ã§ã™ã€‚"
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
-msgstr "å—ã‘å–り手ã®åˆ©ç”¨è€…ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgstr "å—ã‘å–り手ã®ãƒ¦ãƒ¼ã‚¶ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
#: actions/apidirectmessagenew.php:150
msgid "Can't send direct messages to users who aren't your friend."
-msgstr "å‹äººã§ãªã„利用者ã«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+msgstr "å‹äººã§ãªã„ユーザã«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
#: actions/apistatusesdestroy.php:113
@@ -288,17 +358,17 @@ msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’å–り消ã™ã“ã¨ãŒã§ãã¾ã›ã‚“。"
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
-msgstr "利用者をフォローã§ãã¾ã›ã‚“ã§ã—ãŸ: 利用者ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザをフォローã§ãã¾ã›ã‚“ã§ã—ãŸ: ユーザãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
#: actions/apifriendshipscreate.php:118
#, php-format
msgid "Could not follow user: %s is already on your list."
msgstr ""
-"利用者をフォローã§ãã¾ã›ã‚“ã§ã—ãŸ: %s ã¯æ—¢ã«ã‚ãªãŸã®ãƒªã‚¹ãƒˆã«å…¥ã£ã¦ã„ã¾ã™ã€‚"
+"ユーザをフォローã§ãã¾ã›ã‚“ã§ã—ãŸ: %s ã¯æ—¢ã«ã‚ãªãŸã®ãƒªã‚¹ãƒˆã«å…¥ã£ã¦ã„ã¾ã™ã€‚"
#: actions/apifriendshipsdestroy.php:109
msgid "Could not unfollow user: User not found."
-msgstr "利用者ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’åœæ­¢ã§ãã¾ã›ã‚“ã§ã—ãŸ: 利用者ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’åœæ­¢ã§ãã¾ã›ã‚“ã§ã—ãŸ: ユーザãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself."
@@ -308,15 +378,15 @@ msgstr "自分自身をフォローåœæ­¢ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
msgid "Two user ids or screen_names must be supplied."
msgstr "ãµãŸã¤ã®ï¼©ï¼¤ã‹ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ãƒãƒ¼ãƒ ãŒå¿…è¦ã§ã™ã€‚"
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "ソースユーザーを決定ã§ãã¾ã›ã‚“。"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -324,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "別åã¯ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã¨åŒã˜ã§ã¯ã„ã‘ã¾ã›ã‚“。"
@@ -390,27 +460,27 @@ 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 ã«å‚加ã§ãã¾ã›ã‚“。"
+msgstr "ユーザ %1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã§ãã¾ã›ã‚“。"
#: actions/apigroupleave.php:114
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 ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。"
+msgstr "ユーザ %1$s をグループ %2$s ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。"
#: actions/apigrouplist.php:95
#, php-format
@@ -427,41 +497,45 @@ msgstr "%s グループ"
msgid "groups on %s"
msgstr "%s 上ã®ã‚°ãƒ«ãƒ¼ãƒ—"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "悪ã„è¦æ±‚。"
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "oauth_token パラメータã¯æä¾›ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "ã‚ãªãŸã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã€‚å†åº¦ãŠè©¦ã—ãã ã•ã„。"
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "ä¸æ­£ãªãƒ¦ãƒ¼ã‚¶åã¾ãŸã¯ãƒ‘スワード。"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
-msgstr "OAuth アプリユーザã®å‰Šé™¤æ™‚DBエラー。"
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "OAuth アプリケーションユーザã®å‰Šé™¤æ™‚DBエラー。"
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
-msgstr "OAuth アプリユーザã®è¿½åŠ æ™‚DBエラー。"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "OAuth アプリケーションユーザã®è¿½åŠ æ™‚DBエラー。"
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
@@ -470,53 +544,62 @@ msgstr ""
"リクエストトークン %s ã¯æ‰¿èªã•ã‚Œã¾ã—ãŸã€‚ アクセストークンã¨ãれを交æ›ã—ã¦ãã "
"ã•ã„。"
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "リクエストトークン%sã¯å¦å®šã•ã‚Œã¾ã—ãŸã€‚"
+msgid "The request token %s has been denied and revoked."
+msgstr "リクエストトークン%sã¯ã€æ‹’å¦ã•ã‚Œã¦ã€å–り消ã•ã‚Œã¾ã—ãŸã€‚"
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "予期ã›ã¬ãƒ•ã‚©ãƒ¼ãƒ é€ä¿¡ã§ã™ã€‚"
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "アプリケーションã¯ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«æŽ¥ç¶šã—ãŸã„ã§ã™"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "アクセスを許å¯ã¾ãŸã¯æ‹’絶"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "アカウント"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "ニックãƒãƒ¼ãƒ "
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "パスワード"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "拒絶"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "許å¯"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "アカウント情報ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ã‹ã€ã¾ãŸã¯æ‹’絶ã—ã¦ãã ã•ã„。"
@@ -526,7 +609,7 @@ msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã¯ POST ã‹ DELETE ãŒå¿…è¦ã§ã™ã€‚"
#: actions/apistatusesdestroy.php:130
msgid "You may not delete another user's status."
-msgstr "ä»–ã®åˆ©ç”¨è€…ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’消ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+msgstr "ä»–ã®ãƒ¦ãƒ¼ã‚¶ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’消ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
#: actions/deletenotice.php:52 actions/shownotice.php:92
@@ -549,17 +632,17 @@ msgstr "ステータスを削除ã—ã¾ã—ãŸã€‚"
msgid "No status with that ID found."
msgstr "ãã®ï¼©ï¼¤ã§ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "é•·ã™ãŽã¾ã™ã€‚ã¤ã¶ã‚„ãã¯æœ€å¤§ 140 å­—ã¾ã§ã§ã™ã€‚"
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "ã¿ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "ã¤ã¶ã‚„ã㯠URL ã‚’å«ã‚ã¦æœ€å¤§ %d å­—ã¾ã§ã§ã™ã€‚"
@@ -573,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"
@@ -610,27 +681,22 @@ msgstr "%s ã®ãƒ‘ブリックタイムライン"
msgid "%s updates from everyone!"
msgstr "皆ã‹ã‚‰ã® %s アップデート!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "%s ã«ã‚ˆã‚‹ç¹°ã‚Šè¿”ã—"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ã«ã‚ˆã‚‹æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
@@ -646,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 "ニックãƒãƒ¼ãƒ ãŒã‚ã‚Šã¾ã›ã‚“。"
@@ -659,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 "ã‚¢ãƒã‚¿ãƒ¼"
@@ -673,33 +738,33 @@ msgstr "自分ã®ã‚¢ãƒã‚¿ãƒ¼ã‚’アップロードã§ãã¾ã™ã€‚最大サイズ
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
#: actions/userrss.php:103
msgid "User without matching profile"
-msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„利用者"
+msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„ユーザ"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
-#: actions/grouplogo.php:251
+#: 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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "切りå–ã‚Š"
@@ -707,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 "ファイルデータを紛失ã—ã¾ã—ãŸã€‚"
@@ -725,11 +790,11 @@ msgstr "ã‚¢ãƒã‚¿ãƒ¼ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚"
#: actions/block.php:69
msgid "You already blocked that user."
-msgstr "ãã®åˆ©ç”¨è€…ã¯ã™ã§ã«ãƒ–ロック済ã¿ã§ã™ã€‚"
+msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ã¯ã™ã§ã«ãƒ–ロック済ã¿ã§ã™ã€‚"
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
-msgstr "ブロック利用者"
+msgstr "ユーザをブロック"
#: actions/block.php:130
#, fuzzy
@@ -742,22 +807,23 @@ msgstr ""
"ãŸã‹ã‚‰ãƒ•ã‚©ãƒ­ãƒ¼ã‚’外ã•ã‚Œã‚‹ã§ã—ょã†ã€å°†æ¥ã€ã‚ãªãŸã«ãƒ•ã‚©ãƒ­ãƒ¼ã§ããªã„ã§ã€ã‚ãªãŸã¯"
"ã©ã‚“㪠@-返信 ã«ã¤ã„ã¦ã‚‚ãれらã‹ã‚‰é€šçŸ¥ã•ã‚Œãªã„ã§ã—ょã†ã€‚"
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Yes"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã™ã‚‹"
@@ -765,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 "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®å‚加をブロックã•ã‚ŒãŸåˆ©ç”¨è€…ã®ãƒªã‚¹ãƒˆã€‚"
+msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®å‚加をブロックã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ã®ãƒªã‚¹ãƒˆã€‚"
-#: actions/blockedfromgroup.php:281
+#: actions/blockedfromgroup.php:288
msgid "Unblock user from group"
-msgstr "グループã‹ã‚‰ã®ã‚¢ãƒ³ãƒ–ロック利用者"
+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 "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’アンブロックã™ã‚‹"
@@ -853,16 +923,58 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "アプリケーションを削除ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "アプリケーションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: 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 "アプリケーション削除"
+
+#: actions/deleteapplication.php:149
+#, fuzzy
+msgid ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+msgstr ""
+"ã‚ãªãŸã¯æœ¬å½“ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除ã—ãŸã„ã§ã™ã‹? ã“ã‚Œã¯ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãªã—ã§ãƒ‡ãƒ¼ã‚¿"
+"ベースã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ã«é–¢ã™ã‚‹ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’クリアã—ã¾ã™ã€‚"
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "ã“ã®ã‚¢ãƒ—リケーションを削除ã—ãªã„ã§ãã ã•ã„"
+
+#: actions/deleteapplication.php:160
+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 "ログインã—ã¦ã„ã¾ã›ã‚“。"
@@ -891,36 +1003,36 @@ msgstr "本当ã«ã“ã®ã¤ã¶ã‚„ãを削除ã—ã¾ã™ã‹ï¼Ÿ"
msgid "Do not delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除ã§ãã¾ã›ã‚“。"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除"
#: actions/deleteuser.php:67
msgid "You cannot delete users."
-msgstr "利用者を削除ã§ãã¾ã›ã‚“"
+msgstr "ユーザを削除ã§ãã¾ã›ã‚“"
#: actions/deleteuser.php:74
msgid "You can only delete local users."
-msgstr "ローカル利用者ã®ã¿å‰Šé™¤ã§ãã¾ã™ã€‚"
+msgstr "ローカルユーザã®ã¿å‰Šé™¤ã§ãã¾ã™ã€‚"
#: actions/deleteuser.php:110 actions/deleteuser.php:133
msgid "Delete user"
-msgstr "利用者削除"
+msgstr "ユーザ削除"
-#: actions/deleteuser.php:135
+#: 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 "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’削除"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’削除"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr "デザイン"
@@ -1025,12 +1137,13 @@ msgstr "デフォルトã¸ãƒªã‚»ãƒƒãƒˆã™ã‚‹"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "ä¿å­˜"
@@ -1046,32 +1159,24 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã¯ãŠæ°—ã«å…¥ã‚Šã§ã¯ã‚ã‚Šã¾ã›ã‚“!"
msgid "Add to favorites"
msgstr "ãŠæ°—ã«å…¥ã‚Šã«åŠ ãˆã‚‹"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "ãã®ã‚ˆã†ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“。"
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "ãã®ã‚ˆã†ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“。\"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "アプリケーション編集"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "アプリケーションを編集ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "ãã®ã‚ˆã†ãªã‚¢ãƒ—リケーションã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "ã‚ãªãŸã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã€‚"
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã‚¢ãƒ—リケーションを編集ã—ã¾ã™ã€‚"
@@ -1080,43 +1185,47 @@ msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã‚¢ãƒ—リケーションを編集ã—ã¾ã™
msgid "Name is required."
msgstr "åå‰ã¯å¿…é ˆã§ã™ã€‚"
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "åå‰ãŒé•·ã™ãŽã¾ã™ã€‚(最大255å­—ã¾ã§ï¼‰"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "ãã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã¯æ—¢ã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚ä»–ã®ã‚‚ã®ã‚’試ã—ã¦ã¿ã¦ä¸‹ã•ã„。"
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "概è¦ãŒå¿…è¦ã§ã™ã€‚"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "ソースURLãŒé•·ã™ãŽã¾ã™ã€‚"
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "ソースURLãŒä¸æ­£ã§ã™ã€‚"
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "組織ãŒå¿…è¦ã§ã™ã€‚"
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "組織ãŒé•·ã™ãŽã¾ã™ã€‚(最大255字)"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "組織ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ãŒå¿…è¦ã§ã™ã€‚"
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "コールãƒãƒƒã‚¯ãŒé•·ã™ãŽã¾ã™ã€‚"
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "コールãƒãƒƒã‚¯URLãŒä¸æ­£ã§ã™ã€‚"
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "アプリケーションを更新ã§ãã¾ã›ã‚“。"
@@ -1129,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 "オプションãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
@@ -1188,8 +1297,8 @@ msgstr ""
"ã‹ã‚ŒãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå±Šã„ã¦ã„ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。"
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "中止"
@@ -1272,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’æ­£è¦åŒ–ã§ãã¾ã›ã‚“"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -1284,7 +1393,7 @@ msgstr "ã“ã‚Œã¯ã™ã§ã«ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚"
msgid "That email address already belongs to another user."
msgstr "ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã¯æ—¢ã«ä»–ã®äººãŒä½¿ã£ã¦ã„ã¾ã™ã€‚"
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "承èªã‚³ãƒ¼ãƒ‰ã‚’追加ã§ãã¾ã›ã‚“"
@@ -1328,7 +1437,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."
@@ -1346,7 +1455,7 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã¯ã™ã§ã«ãŠæ°—ã«å…¥ã‚Šã§ã™!"
msgid "Disfavor favorite"
msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’ã‚„ã‚ã‚‹"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "人気ã®ã¤ã¶ã‚„ã"
@@ -1397,17 +1506,17 @@ msgstr "%1$s ã«ã‚ˆã‚‹ %2$s 上ã®ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
msgid "Featured users"
-msgstr "フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸåˆ©ç”¨è€…"
+msgstr "フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶"
#: actions/featured.php:71
#, php-format
msgid "Featured users, page %d"
-msgstr "フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸåˆ©ç”¨è€…ã€ãƒšãƒ¼ã‚¸ %d"
+msgstr "フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ã€ãƒšãƒ¼ã‚¸ %d"
#: actions/featured.php:99
#, php-format
msgid "A selection of some great users on %s"
-msgstr "%s 上ã®å„ªã‚ŒãŸåˆ©ç”¨è€…ã®é›†ã¾ã‚Š"
+msgstr "%s 上ã®å„ªã‚ŒãŸãƒ¦ãƒ¼ã‚¶ã®é›†ã¾ã‚Š"
#: actions/file.php:34
msgid "No notice ID."
@@ -1439,7 +1548,7 @@ msgstr "ローカルサブスクリプションを使用å¯èƒ½ã§ã™ï¼"
#: actions/finishremotesubscribe.php:99
msgid "That user has blocked you from subscribing."
-msgstr "ã“ã®åˆ©ç”¨è€…ã¯ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ブロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã¯ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ブロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
#: actions/finishremotesubscribe.php:110
msgid "You are not authorized."
@@ -1466,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
@@ -1489,15 +1617,15 @@ msgstr "管ç†è€…ã ã‘ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’ブロックã§ãã¾ã™ã€‚
#: actions/groupblock.php:95
msgid "User is already blocked from group."
-msgstr "利用者ã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
+msgstr "ユーザã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
#: actions/groupblock.php:100
msgid "User is not a member of group."
-msgstr "利用者ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
-msgstr "グループã‹ã‚‰ãƒ–ロックã•ã‚ŒãŸåˆ©ç”¨è€…"
+msgstr "グループã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
#: actions/groupblock.php:162
#, php-format
@@ -1506,12 +1634,12 @@ msgid ""
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
-"本当ã«åˆ©ç”¨è€… %1$s をグループ %2$s ã‹ã‚‰ãƒ–ロックã—ã¾ã™ã‹? 彼らã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Š"
+"本当ã«ãƒ¦ãƒ¼ã‚¶ %1$s をグループ %2$s ã‹ã‚‰ãƒ–ロックã—ã¾ã™ã‹? 彼らã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Š"
"除ã•ã‚Œã‚‹ã€æŠ•ç¨¿ã§ããªã„ã€ã‚°ãƒ«ãƒ¼ãƒ—をフォローã§ããªããªã‚Šã¾ã™ã€‚"
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
-msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®åˆ©ç”¨è€…をブロックã—ãªã„"
+msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã—ãªã„"
#: actions/groupblock.php:179
msgid "Block this user from this group"
@@ -1519,7 +1647,7 @@ msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
-msgstr "グループã‹ã‚‰åˆ©ç”¨è€…ブロックã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¨ãƒ©ãƒ¼"
+msgstr "グループã‹ã‚‰ã®ãƒ–ロックユーザã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¨ãƒ©ãƒ¼"
#: actions/groupbyid.php:74 actions/userbyid.php:70
msgid "No ID."
@@ -1529,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."
@@ -1541,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."
@@ -1562,62 +1690,68 @@ msgstr ""
"ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—用ã«ãƒ­ã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’アップロードã§ãã¾ã™ã€‚最大ファイルサイズ㯠"
"%s。"
-#: actions/grouplogo.php:178
+#: actions/grouplogo.php:181
msgid "User without matching profile."
-msgstr "åˆã£ã¦ã„るプロフィールã®ãªã„利用者"
+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 "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®åˆ©ç”¨è€…ã®ãƒªã‚¹ãƒˆã€‚"
+msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¦ãƒ¼ã‚¶ã®ãƒªã‚¹ãƒˆã€‚"
-#: actions/groupmembers.php:175 lib/action.php:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "管ç†è€…"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "ブロック"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr "利用者をグループã®ç®¡ç†è€…ã«ã™ã‚‹"
+msgstr "ユーザをグループã®ç®¡ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "管ç†è€…ã«ã™ã‚‹"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make this user an admin"
-msgstr "ã“ã®åˆ©ç”¨è€…を管ç†è€…ã«ã™ã‚‹"
+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 "グループ"
@@ -1688,7 +1822,7 @@ msgstr "管ç†è€…ã ã‘ãŒã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’アンブロックã§ãã¾
#: actions/groupunblock.php:95
msgid "User is not blocked from group."
-msgstr "利用者ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+msgstr "ユーザã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã›ã‚“。"
#: actions/groupunblock.php:128 actions/unblock.php:86
msgid "Error removing the block."
@@ -1788,6 +1922,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "ãã® Jabber ID ã¯ã‚ãªãŸã®ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "%1$s ã®å—ä¿¡ç®± - ページ %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1818,11 +1957,11 @@ msgstr "招待をé€ã‚Šã¾ã—ãŸã€‚"
#: actions/invite.php:112
msgid "Invite new users"
-msgstr "æ–°ã—ã„利用者を招待"
+msgstr "æ–°ã—ã„ユーザを招待"
#: actions/invite.php:128
msgid "You are already subscribed to these users:"
-msgstr "ã™ã§ã«ã“れらã®åˆ©ç”¨è€…をフォローã—ã¦ã„ã¾ã™:"
+msgstr "ã™ã§ã«ã“れらã®ãƒ¦ãƒ¼ã‚¶ã‚’フォローã—ã¦ã„ã¾ã™:"
#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
#, php-format
@@ -1870,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 "é€ã‚‹"
+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"
@@ -1940,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 ã«å‚加ã—ã¾ã—ãŸ"
@@ -1949,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 ã«æ®‹ã‚Šã¾ã—ãŸã€‚"
@@ -1970,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "ログイン"
@@ -2008,21 +2154,21 @@ msgstr ""
"ユーザåã¨ãƒ‘スワードã§ã€ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 ã¾ã ãƒ¦ãƒ¼ã‚¶åã‚’æŒã£ã¦ã„ã¾ã›ã‚“"
"ã‹? æ–°ã—ã„アカウントを [登録](%%action.register%%)。"
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "管ç†è€…ã ã‘ãŒåˆ¥ã®ãƒ¦ãƒ¼ã‚¶ã‚’管ç†è€…ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s ã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ— \"%2$s\" ã®ç®¡ç†è€…ã§ã™ã€‚"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "%1$s ã®ä¼šå“¡è³‡æ ¼è¨˜éŒ²ã‚’グループ %2$s 中ã‹ã‚‰å–å¾—ã§ãã¾ã›ã‚“。"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "%1$s をグループ %2$s ã®ç®¡ç†è€…ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
@@ -2032,7 +2178,7 @@ msgid "No current status"
msgstr "ç¾åœ¨ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚ã‚Šã¾ã›ã‚“"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "æ–°ã—ã„アプリケーション"
#: actions/newapplication.php:64
@@ -2043,11 +2189,11 @@ msgstr "アプリケーションを登録ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘
msgid "Use this form to register a new application."
msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦æ–°ã—ã„アプリケーションを登録ã—ã¾ã™ã€‚"
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "ソースURLãŒå¿…è¦ã§ã™ã€‚"
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "アプリケーションを作æˆã§ãã¾ã›ã‚“。"
@@ -2065,7 +2211,7 @@ msgstr "æ–°ã—ã„メッセージ"
#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
msgid "You can't send a message to this user."
-msgstr "ã“ã®åˆ©ç”¨è€…ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
#: lib/command.php:475
@@ -2152,7 +2298,7 @@ msgstr "\"%2$s\" 上ã®æ¤œç´¢èªž \"$1$s\" ã«ä¸€è‡´ã™ã‚‹ã™ã¹ã¦ã®æ›´æ–°"
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
msgstr ""
-"ã“ã®åˆ©ç”¨è€…ã¯ã€åˆå›³ã‚’許å¯ã—ã¦ã„ãªã„ã‹ã€ç¢ºèªã•ã‚Œã¦ã„ãŸçŠ¶æ…‹ã§ãªã„ã‹ã€ãƒ¡ãƒ¼ãƒ«è¨­å®š"
+"ã“ã®ãƒ¦ãƒ¼ã‚¶ã¯ã€åˆå›³ã‚’許å¯ã—ã¦ã„ãªã„ã‹ã€ç¢ºèªã•ã‚Œã¦ã„ãŸçŠ¶æ…‹ã§ãªã„ã‹ã€ãƒ¡ãƒ¼ãƒ«è¨­å®š"
"ã‚’ã—ã¦ã„ã¾ã›ã‚“。"
#: actions/nudge.php:94
@@ -2180,30 +2326,30 @@ msgstr "ã‚ãªãŸãŒç™»éŒ²ã—ãŸã‚¢ãƒ—リケーション"
msgid "You have not registered any applications yet."
msgstr "ã‚ãªãŸã¯ã¾ã ãªã‚“ã®ã‚¢ãƒ—リケーションも登録ã—ã¦ã„ã¾ã›ã‚“。"
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "接続ã•ã‚ŒãŸã‚¢ãƒ—リケーション"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr "ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ä»¥ä¸‹ã®ã‚¢ãƒ—リケーションを許å¯ã—ã¾ã—ãŸã€‚"
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "ã‚ãªãŸã¯ãã®ã‚¢ãƒ—リケーションã®åˆ©ç”¨è€…ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ã‚ãªãŸã¯ãã®ã‚¢ãƒ—リケーションã®ãƒ¦ãƒ¼ã‚¶ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "アプリケーションã®ãŸã‚ã®å–消ã—アクセスãŒã§ãã¾ã›ã‚“: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
"ã‚ãªãŸã¯ã€ã©ã‚“ãªã‚¢ãƒ—リケーションもã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã™ã‚‹ã®ã‚’èªå¯ã—ã¦ã„"
"ã¾ã›ã‚“。"
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr "開発者ã¯å½¼ã‚‰ã®ã‚¢ãƒ—リケーションã®ãŸã‚ã«ç™»éŒ²è¨­å®šã‚’編集ã§ãã¾ã™ "
@@ -2224,8 +2370,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr "ã ã‘ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„データ形å¼ã€‚"
@@ -2271,7 +2417,7 @@ msgstr "URL 短縮サービスãŒé•·ã™ãŽã¾ã™ã€‚(最大50字)"
#: actions/otp.php:69
msgid "No user ID specified."
-msgstr "利用者IDã®è¨˜è¿°ãŒã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザIDã®è¨˜è¿°ãŒã‚ã‚Šã¾ã›ã‚“。"
#: actions/otp.php:83
msgid "No login token specified."
@@ -2289,6 +2435,11 @@ msgstr "ä¸æ­£ãªãƒ­ã‚°ã‚¤ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚"
msgid "Login token expired."
msgstr "ログイントークンãŒæœŸé™åˆ‡ã‚Œã§ã™ãƒ»"
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "%1$s ã®é€ä¿¡ç®± - ページ %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2361,7 +2512,8 @@ msgstr "æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“。"
msgid "Password saved."
msgstr "パスワードãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "パス"
@@ -2369,132 +2521,147 @@ msgstr "パス"
msgid "Path and server settings for this StatusNet site."
msgstr "パス㨠StatusNet サイトã®ã‚µãƒ¼ãƒãƒ¼è¨­å®š"
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "テーマディレクトリãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“ : %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "場所ディレクトリãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "ä¸æ­£ãª SSL サーãƒãƒ¼ã€‚最大 255 文字ã¾ã§ã€‚"
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "サイト"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "サーãƒãƒ¼"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "サイトã®ã‚µãƒ¼ãƒãƒ¼ãƒ›ã‚¹ãƒˆå"
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "パス"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "サイトパス"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "ロケールã®ãƒ‘ス"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "ロケールã¸ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ‘ス"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Fancy URL (読ã¿ã‚„ã™ã忘れã«ãã„) を使用ã—ã¾ã™ã‹?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "テーマ"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "テーマサーãƒãƒ¼"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "テーマパス"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "テーマディレクトリ"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "ã‚¢ãƒã‚¿ãƒ¼"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚µãƒ¼ãƒãƒ¼"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ãƒ‘ス"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚µãƒ¼ãƒãƒ¼"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ‘ス"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "ã¨ãã©ã"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "ã„ã¤ã‚‚"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "SSL 使用"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "SSL 使用時"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSLサーãƒ"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "ダイレクト SSL リクエストをå‘ã‘るサーãƒ"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "ä¿å­˜ãƒ‘ス"
@@ -2521,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 ""
@@ -2551,13 +2718,13 @@ 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 "フルãƒãƒ¼ãƒ "
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "ホームページ"
@@ -2579,8 +2746,8 @@ msgid "Bio"
msgstr "自己紹介"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "場所"
@@ -2606,7 +2773,7 @@ msgstr ""
"自分自身ã«ã¤ã„ã¦ã®ã‚¿ã‚° (アルファベットã€æ•°å­—ã€-ã€.ã€_)ã€ã‚«ãƒ³ãƒžã¾ãŸã¯ç©ºç™½åŒºåˆ‡"
"ã‚Šã§"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "言語"
@@ -2632,7 +2799,7 @@ msgstr "自分をフォローã—ã¦ã„る者を自動的ã«ãƒ•ã‚©ãƒ­ãƒ¼ã™ã‚‹ (B
msgid "Bio is too long (max %d chars)."
msgstr "自己紹介ãŒé•·ã™ãŽã¾ã™ (最長140文字)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "タイムゾーンãŒé¸ã°ã‚Œã¦ã„ã¾ã›ã‚“。"
@@ -2645,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 "自動フォローã®ãŸã‚ã®åˆ©ç”¨è€…ã‚’æ›´æ–°ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+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,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "パブリックストリームフィード (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "パブリックストリームフィード (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "パブリックストリームフィード (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2704,11 +2872,11 @@ msgstr ""
"ã“れ㯠%%site.name%% ã®ãƒ‘ブリックタイムラインã§ã™ã€ã—ã‹ã—ã¾ã èª°ã‚‚投稿ã—ã¦ã„ã¾"
"ã›ã‚“。"
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "投稿ã™ã‚‹1番目ã«ãªã£ã¦ãã ã•ã„!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2716,7 +2884,7 @@ msgstr ""
"ãªãœ [アカウント登録](%%action.register%%) ã—ãªã„ã®ã§ã™ã‹ã€ãã—ã¦æœ€åˆã®æŠ•ç¨¿ã‚’"
"ã—ã¦ãã ã•ã„!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2730,7 +2898,7 @@ msgstr ""
"æ—ãã—ã¦åŒåƒšãªã©ã«ã¤ã„ã¦ã®ã¤ã¶ã‚„ãを共有ã—ã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%doc.help%"
"%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2769,7 +2937,7 @@ msgstr ""
"ãªãœ [アカウント登録](%%action.register%%) ã—ãªã„ã®ã§ã™ã‹ã€‚ãã—ã¦æœ€åˆã®æŠ•ç¨¿ã‚’"
"ã—ã¦ãã ã•ã„!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "タグクラウド"
@@ -2799,7 +2967,7 @@ msgstr "確èªã‚³ãƒ¼ãƒ‰ãŒå¤ã™ãŽã¾ã™ã€‚ã‚‚ã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•
#: actions/recoverpassword.php:111
msgid "Could not update user with confirmed email address."
-msgstr "確èªã•ã‚ŒãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§åˆ©ç”¨è€…ã‚’æ›´æ–°ã§ãã¾ã›ã‚“。"
+msgstr "確èªã•ã‚ŒãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ãƒ¦ãƒ¼ã‚¶ã‚’æ›´æ–°ã§ãã¾ã›ã‚“。"
#: actions/recoverpassword.php:152
msgid ""
@@ -2859,11 +3027,11 @@ msgstr "ニックãƒãƒ¼ãƒ ã‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。
#: actions/recoverpassword.php:272
msgid "No user with that email address or username."
-msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ãƒ¦ãƒ¼ã‚¶åã‚’ã‚‚ã£ã¦ã„る利用者ãŒã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ãƒ¦ãƒ¼ã‚¶åã‚’ã‚‚ã£ã¦ã„るユーザãŒã‚ã‚Šã¾ã›ã‚“。"
#: actions/recoverpassword.php:287
msgid "No registered email address for that user."
-msgstr "ãã®åˆ©ç”¨è€…ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç™»éŒ²ãŒã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç™»éŒ²ãŒã‚ã‚Šã¾ã›ã‚“。"
#: actions/recoverpassword.php:301
msgid "Error saving address confirmation."
@@ -2907,8 +3075,7 @@ msgstr "ã™ã¿ã¾ã›ã‚“ã€ä¸æ­£ãªæ‹›å¾…コード。"
msgid "Registration successful"
msgstr "登録æˆåŠŸ"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "登録"
@@ -2950,7 +3117,7 @@ msgid "Same as password above. Required."
msgstr "上ã®ãƒ‘スワードã¨åŒã˜ã§ã™ã€‚ 必須。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "メール"
@@ -2977,7 +3144,7 @@ msgid ""
msgstr "個人情報を除ã: パスワードã€ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€IMアドレスã€é›»è©±ç•ªå·"
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -2994,15 +3161,15 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"%1$s ã•ã‚“ã€ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼%%%%site.name%%%% ã¸ã‚ˆã†ã“ã。以下ã®ã‚ˆã†ã«ã—"
-"ã¦å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
+"%1$s ã•ã‚“ã€ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼%%%%site.name%%%% ã¸ã‚ˆã†ã“ã。次ã®ã‚ˆã†ã«ã—ã¦"
+"始ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
"\n"
"* [ã‚ãªãŸã®ãƒ—ロファイル](%2$s) ã‚’å‚ç…§ã—ã¦æœ€åˆã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’投稿ã™ã‚‹\n"
"* [Jabber ã‚„ GTalk ã®ã‚¢ãƒ‰ãƒ¬ã‚¹](%%%%action.imsettings%%%%) を追加ã—ã¦ã€ã‚¤ãƒ³ã‚¹"
"タントメッセージを通ã—ã¦ã¤ã¶ã‚„ãã‚’é€ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹\n"
"* ã‚ãªãŸãŒçŸ¥ã£ã¦ã„る人やã‚ãªãŸã¨åŒã˜èˆˆå‘³ã‚’ã‚‚ã£ã¦ã„る人を[検索](%%%%action."
"peoplesearch%%%%) ã™ã‚‹\n"
-"* [プロファイル設定](%%%%action.profilesettings%%%%) ã‚’æ›´æ–°ã—ã¦ä»–ã®åˆ©ç”¨è€…ã«ã‚"
+"* [プロファイル設定](%%%%action.profilesettings%%%%) ã‚’æ›´æ–°ã—ã¦ä»–ã®ãƒ¦ãƒ¼ã‚¶ã«ã‚"
"ãªãŸã®ã“ã¨ã‚’より詳ã—ã知らã›ã‚‹\n"
"* 探ã—ã¦ã„る機能ã«ã¤ã„ã¦[オンライン文書](%%%%doc.help%%%%) を読む\n"
"\n"
@@ -3039,7 +3206,7 @@ msgstr "リモートユーザーをフォロー"
#: actions/remotesubscribe.php:129
msgid "User nickname"
-msgstr "利用者ã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ "
+msgstr "ユーザã®ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ "
#: actions/remotesubscribe.php:130
msgid "Nickname of the user you want to follow"
@@ -3054,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 "フォロー"
@@ -3093,7 +3260,7 @@ msgstr "自分ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã›ã¾ã›ã‚“。"
msgid "You already repeated that notice."
msgstr "ã™ã§ã«ãã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¦ã„ã¾ã™ã€‚"
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "ç¹°ã‚Šè¿”ã•ã‚ŒãŸ"
@@ -3101,28 +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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "%1$s ã¸ã®è¿”ä¿¡ã€ãƒšãƒ¼ã‚¸ %2$s"
+
+#: 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 "
@@ -3131,16 +3303,16 @@ 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 "
"[join groups](%%action.groups%%)."
msgstr ""
"ã‚ãªãŸã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ã‚’会話をã™ã‚‹ã‹ã€å¤šãã®äººã€…をフォローã™ã‚‹ã‹ã€ã¾ãŸã¯ [ã‚°"
-"ループã«åŠ ã‚ã‚‹] (%%action.groups%%)ã“ã¨ãŒã§ãã¾ã™ã€‚"
+"ループã«åŠ ã‚ã‚‹](%%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 "
@@ -3154,83 +3326,128 @@ 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"
+
#: 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 "利用者ã¯ã™ã§ã«ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚"
+msgstr "ユーザã¯ã™ã§ã«ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚"
+
+#. TRANS: Menu item for site administration
+#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
+msgid "Sessions"
+msgstr "セッション"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "ã“ã® StatusNet サイトã®ã‚»ãƒƒã‚·ãƒ§ãƒ³è¨­å®šã€‚"
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "セッションã®æ‰±ã„"
+
+#: 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:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "アプリケーションプロファイル"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "アイコン"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "åå‰"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "組織"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "概è¦"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "統計データ"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "アプリケーションアクション"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "key 㨠secret ã®ãƒªã‚»ãƒƒãƒˆ"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "アプリケーション情報"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "リクエストトークンURL"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "アクセストークンURL"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "承èªURL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3238,26 +3455,36 @@ msgstr ""
"注æ„: ç§ãŸã¡ã¯HMAC-SHA1ç½²åをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ ç§ãŸã¡ã¯å¹³æ–‡ç½²åメソッドをサ"
"ãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。"
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "本当ã«ã“ã®ã¤ã¶ã‚„ãを削除ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%1$s ã®ãŠæ°—ã«å…¥ã‚Šã®ã¤ã¶ã‚„ãã€ãƒšãƒ¼ã‚¸ %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3266,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 "
@@ -3275,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 "
@@ -3286,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 "ã“ã‚Œã¯ã€ã‚ãªãŸãŒå¥½ããªã“ã¨ã‚’共有ã™ã‚‹æ–¹æ³•ã§ã™ã€‚"
@@ -3295,67 +3522,72 @@ msgstr "ã“ã‚Œã¯ã€ã‚ãªãŸãŒå¥½ããªã“ã¨ã‚’共有ã™ã‚‹æ–¹æ³•ã§ã™ã€‚"
msgid "%s group"
msgstr "%s グループ"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "グループプロファイル"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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 "作æˆã•ã‚Œã¾ã—ãŸ"
+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."
@@ -3365,12 +3597,12 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
"**%s** 㯠%%site.name%% 上ã®ãƒ¦ãƒ¼ã‚¶ã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚フリーソフトウェアツール"
-"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング] (http://en."
+"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング](http://en."
"wikipedia.org/wiki/Micro-blogging) サービス。メンãƒãƒ¼ã¯å½¼ã‚‰ã®æš®ã‚‰ã—ã¨èˆˆå‘³ã«é–¢"
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚[今ã™ãå‚加](%%%%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."
@@ -3383,7 +3615,7 @@ msgstr ""
"wikipedia.org/wiki/Micro-blogging) サービス。メンãƒãƒ¼ã¯å½¼ã‚‰ã®æš®ã‚‰ã—ã¨èˆˆå‘³ã«é–¢"
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚"
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "管ç†è€…"
@@ -3414,6 +3646,11 @@ msgstr "ã¤ã¶ã‚„ãを削除ã—ã¾ã—ãŸã€‚"
msgid " tagged %s"
msgstr "タグ付ã‘ã•ã‚ŒãŸ %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$sã€ãƒšãƒ¼ã‚¸ %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3439,12 +3676,12 @@ msgstr "%sã®ã¤ã¶ã‚„ãフィード (Atom)"
msgid "FOAF for %s"
msgstr "%s ã® FOAF"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "ã“れ㯠%1$s ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã§ã™ãŒã€%2$s ã¯ã¾ã ãªã«ã‚‚投稿ã—ã¦ã„ã¾ã›ã‚“。"
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3452,7 +3689,7 @@ msgstr ""
"最近ãŠã‚‚ã—ã‚ã„ã‚‚ã®ã¯ä½•ã§ã—ょã†? ã‚ãªãŸã¯å°‘ã—ã®ã¤ã¶ã‚„ãも投稿ã—ã¦ã„ã¾ã›ã‚“ãŒã€"
"ã„ã¾ã¯å§‹ã‚る良ã„時ã§ã—ょã†:)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3461,7 +3698,7 @@ msgstr ""
"ã‚ãªãŸã¯ã€%1$s ã«åˆå›³ã™ã‚‹ã‹ã€[ã¾ãŸã¯ãã®äººå®›ã«ä½•ã‹ã‚’投稿](%%%%action."
"newnotice%%%%?status_textarea=%2$s) ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3469,13 +3706,13 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-"**%s** 㯠%%site.name%% 上ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚フリーソフトウェアツール"
-"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング] (http://en."
+"**%s** 㯠%%%%site.name%%%% 上ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚フリーソフトウェアツール"
+"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング](http://en."
"wikipedia.org/wiki/Micro-blogging) サービス。[今ã™ãå‚加](%%%%action.register"
"%%%%)ã—ã¦ã€**%s** ã®ã¤ã¶ã‚„ããªã©ã‚’フォローã—ã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%%%doc."
"help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3483,10 +3720,10 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
"**%s** 㯠%%site.name%% 上ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚フリーソフトウェアツール"
-"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング] (http://en."
+"[StatusNet](http://status.net/)を基ã«ã—ãŸ[マイクロブロギング](http://en."
"wikipedia.org/wiki/Micro-blogging) サービス。"
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "%s ã®ç¹°ã‚Šè¿”ã—"
@@ -3497,205 +3734,144 @@ msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ãƒ¦ãƒ¼ã‚¶ã‚’黙らã›ã‚‹ã“ã¨ãŒã§ãã¾
#: actions/silence.php:72
msgid "User is already silenced."
-msgstr "利用者ã¯æ—¢ã«é»™ã£ã¦ã„ã¾ã™ã€‚"
+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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "サイトåã¯é•·ã•0ã§ã¯ã„ã‘ã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "有効ãªé€£çµ¡ç”¨ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "ä¸æ˜Žãªè¨€èªž \"%s\""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットレãƒãƒ¼ãƒˆURL。"
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "ä¸æ­£ãªã‚¹ãƒŠãƒƒãƒ—ショットランãƒãƒªãƒ¥ãƒ¼"
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "スナップショット頻度ã¯æ•°ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "最å°ã®ãƒ†ã‚­ã‚¹ãƒˆåˆ¶é™ã¯140å­—ã§ã™ã€‚"
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "デュープ制é™ã¯1秒以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "一般"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "サイトå"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "ã‚ãªãŸã®ã‚µã‚¤ãƒˆã®åå‰ã€\"Yourcompany Microblog\"ã®ã‚ˆã†ãªã€‚"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "æŒã£ã¦æ¥ã‚‰ã‚Œã¾ã™"
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"クレジットã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ†ã‚­ã‚¹ãƒˆã¯ã€ãã‚Œãžã‚Œã®ãƒšãƒ¼ã‚¸ã®ãƒ•ãƒƒã‚¿ãƒ¼ã§ãƒªãƒ³ã‚¯ã•ã‚Œã¾"
"ã™ã€‚"
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URLã§ã€æŒã£ã¦æ¥ã‚‰ã‚Œã¾ã™"
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"クレジットã«ä½¿ç”¨ã•ã‚Œã‚‹URLã¯ã€ãã‚Œãžã‚Œã®ãƒšãƒ¼ã‚¸ã®ãƒ•ãƒƒã‚¿ãƒ¼ã§ãƒªãƒ³ã‚¯ã•ã‚Œã¾ã™ã€‚"
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "ã‚ãªãŸã®ã‚µã‚¤ãƒˆã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã™ã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "ローカル"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "デフォルトタイムゾーン"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "サイトã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³; 通常UTC。"
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "デフォルトサイト言語"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "サーãƒãƒ¼"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "サイトã®ã‚µãƒ¼ãƒãƒ¼ãƒ›ã‚¹ãƒˆå"
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Fancy URL (読ã¿ã‚„ã™ã忘れã«ãã„) を使用ã—ã¾ã™ã‹?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "アクセス"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "プライベート"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "匿åユーザー(ログインã—ã¦ã„ã¾ã›ã‚“)ãŒã‚µã‚¤ãƒˆã‚’見るã®ã‚’ç¦æ­¢ã—ã¾ã™ã‹?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "招待ã®ã¿"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "招待ã®ã¿ç™»éŒ²ã™ã‚‹"
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "é–‰ã˜ã‚‰ã‚ŒãŸ"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "æ–°è¦ç™»éŒ²ã‚’無効。"
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "スナップショット"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "予定ã•ã‚Œã¦ã„るジョブã§"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "データスナップショット"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "ã„㤠status.net サーãƒã«çµ±è¨ˆãƒ‡ãƒ¼ã‚¿ã‚’é€ã‚Šã¾ã™ã‹"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "頻度"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "レãƒãƒ¼ãƒˆ URL"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "レãƒãƒ¼ãƒˆ URL"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "ã“ã®URLã«ã‚¹ãƒŠãƒƒãƒ—ショットをé€ã‚‹ã§ã—ょã†"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "制é™"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "テキスト制é™"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "ã¤ã¶ã‚„ãã®æ–‡å­—ã®æœ€å¤§æ•°"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "デュープ制é™"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"ã©ã‚Œãらã„é•·ã„é–“(秒)ã€ãƒ¦ãƒ¼ã‚¶ã¯ã€å†ã³åŒã˜ã‚‚ã®ã‚’投稿ã™ã‚‹ã®ã‚’å¾…ãŸãªã‘ã‚Œã°ãªã‚‰ãª"
"ã„ã‹ã€‚"
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-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"
@@ -3757,7 +3933,7 @@ msgstr "ã“ã‚Œã¯ã™ã§ã«ã‚ãªãŸã®é›»è©±ç•ªå·ã§ã™ã€‚"
#: actions/smssettings.php:321
msgid "That phone number already belongs to another user."
-msgstr "ã“ã®é›»è©±ç•ªå·ã¯ã™ã§ã«ä»–ã®åˆ©ç”¨è€…ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚"
+msgstr "ã“ã®é›»è©±ç•ªå·ã¯ã™ã§ã«ä»–ã®ãƒ¦ãƒ¼ã‚¶ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚"
#: actions/smssettings.php:347
msgid ""
@@ -3797,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: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 "フォローã—ã¦ã„ã‚‹"
@@ -3873,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 "
@@ -3884,35 +4131,40 @@ msgid ""
msgstr ""
"今ã€ã ã‚Œã®ã¤ã¶ã‚„ãã‚‚èžã„ã¦ã„ãªã„ãªã‚‰ã€ã‚ãªãŸãŒçŸ¥ã£ã¦ã„る人々をフォローã—ã¦ã¿"
"ã¦ãã ã•ã„。[ピープル検索](%%action.peoplesearch%%)を試ã—ã¦ãã ã•ã„。ãã—ã¦ã€"
-"ã‚ãªãŸãŒèˆˆå‘³ã‚’æŒã£ã¦ã„るグループã¨ç§ãŸã¡ã®[フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸåˆ©ç”¨è€…](%%"
+"ã‚ãªãŸãŒèˆˆå‘³ã‚’æŒã£ã¦ã„るグループã¨ç§ãŸã¡ã®[フィーãƒãƒ£ãƒ¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶](%%"
"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 "SMS"
-#: actions/tag.php:86
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "%1$s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ãã€ãƒšãƒ¼ã‚¸ %2$d"
+
+#: 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)"
@@ -3928,22 +4180,23 @@ msgstr "ã‚¿ã‚° %s"
#: actions/tagother.php:77 lib/userprofile.php:75
msgid "User profile"
-msgstr "利用者プロファイル"
+msgstr "ユーザプロファイル"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "写真"
#: actions/tagother.php:141
msgid "Tag user"
-msgstr "タグ利用者"
+msgstr "タグユーザ"
#: actions/tagother.php:151
msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
msgstr ""
-"ã“ã®åˆ©ç”¨è€…ã®ã‚¿ã‚° (アルファベットã€æ•°å­—ã€-ã€.ã€_)ã€ã‚«ãƒ³ãƒžã‹ã‚¹ãƒšãƒ¼ã‚¹åŒºåˆ‡ã‚Š"
+"ã“ã®ãƒ¦ãƒ¼ã‚¶ã®ã‚¿ã‚° (アルファベットã€æ•°å­—ã€-ã€.ã€_)ã€ã‚«ãƒ³ãƒžã‹ã‚¹ãƒšãƒ¼ã‚¹åŒºåˆ‡ã‚Š"
#: actions/tagother.php:193
msgid ""
@@ -3964,7 +4217,7 @@ msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使用ã—ã¦ã€ãƒ•ã‚©ãƒ­ãƒ¼è€…ã‹ãƒ•ã‚©ãƒ­ãƒ¼ã«ã‚¿
msgid "No such tag."
msgstr "ãã®ã‚ˆã†ãªã‚¿ã‚°ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API メソッドãŒå·¥äº‹ä¸­ã§ã™ã€‚"
@@ -3974,11 +4227,11 @@ msgstr "ã‚ãªãŸã¯ãã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロックã—ã¦ã„ã¾ã›ã‚“。"
#: actions/unsandbox.php:72
msgid "User is not sandboxed."
-msgstr "利用者ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/unsilence.php:72
msgid "User is not silenced."
-msgstr "利用者ã¯ã‚µã‚¤ãƒ¬ãƒ³ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ユーザã¯ã‚µã‚¤ãƒ¬ãƒ³ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/unsubscribe.php:77
msgid "No profile id in request."
@@ -3988,7 +4241,7 @@ msgstr "リクエスト内ã«ãƒ—ロファイルIDãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Unsubscribed"
msgstr "フォロー解除済ã¿"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3996,14 +4249,16 @@ 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 "利用者"
+msgstr "ユーザ"
-#: actions/useradminpanel.php:69
+#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
-msgstr "ã“ã® StatusNet サイトã®åˆ©ç”¨è€…設定。"
+msgstr "ã“ã® StatusNet サイトã®ãƒ¦ãƒ¼ã‚¶è¨­å®šã€‚"
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
@@ -4016,7 +4271,7 @@ msgstr "ä¸æ­£ãªã‚¦ã‚§ãƒ«ã‚«ãƒ ãƒ†ã‚­ã‚¹ãƒˆã€‚最大長ã¯255å­—ã§ã™ã€‚"
#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr "ä¸æ­£ãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ•ã‚©ãƒ­ãƒ¼ã§ã™: '%1$s' ã¯åˆ©ç”¨è€…ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+msgstr "ä¸æ­£ãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ•ã‚©ãƒ­ãƒ¼ã§ã™: '%1$s' ã¯ãƒ¦ãƒ¼ã‚¶ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -4033,15 +4288,15 @@ msgstr "プロファイル自己紹介ã®æœ€å¤§æ–‡å­—長。"
#: actions/useradminpanel.php:231
msgid "New users"
-msgstr "æ–°ã—ã„利用者"
+msgstr "æ–°ã—ã„ユーザ"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr "æ–°ã—ã„利用者を歓迎"
+msgstr "æ–°ã—ã„ユーザを歓迎"
#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr "æ–°ã—ã„利用者ã¸ã®ã‚¦ã‚§ãƒ«ã‚«ãƒ ãƒ†ã‚­ã‚¹ãƒˆ (最大255å­—)。"
+msgstr "æ–°ã—ã„ユーザã¸ã®ã‚¦ã‚§ãƒ«ã‚«ãƒ ãƒ†ã‚­ã‚¹ãƒˆ (最大255å­—)。"
#: actions/useradminpanel.php:241
msgid "Default subscription"
@@ -4049,7 +4304,7 @@ msgstr "デフォルトフォロー"
#: actions/useradminpanel.php:242
msgid "Automatically subscribe new users to this user."
-msgstr "自動的ã«ã“ã®åˆ©ç”¨è€…ã«æ–°ã—ã„利用者をフォローã—ã¦ãã ã•ã„。"
+msgstr "自動的ã«ã“ã®ãƒ¦ãƒ¼ã‚¶ã«æ–°ã—ã„ユーザをフォローã—ã¦ãã ã•ã„。"
#: actions/useradminpanel.php:251
msgid "Invitations"
@@ -4061,27 +4316,7 @@ msgstr "招待ãŒå¯èƒ½"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr "利用者ãŒæ–°ã—ã„利用者を招待ã™ã‚‹ã®ã‚’許容ã™ã‚‹ã‹ã©ã†ã‹ã€‚"
-
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "セッション"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "セッションã®æ‰±ã„"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "自分é”ã§ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’扱ã†ã®ã§ã‚ã‚‹ã‹ã©ã†ã‹ã€‚"
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "セッションデãƒãƒƒã‚°"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "セッションã®ãŸã‚ã®ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã‚’オン。"
+msgstr "ユーザãŒæ–°ã—ã„ユーザを招待ã™ã‚‹ã®ã‚’許容ã™ã‚‹ã‹ã©ã†ã‹ã€‚"
#: actions/userauthorization.php:105
msgid "Authorize subscription"
@@ -4096,36 +4331,36 @@ msgstr ""
"ユーザã®ã¤ã¶ã‚„ãをフォローã™ã‚‹ã«ã¯è©³ç´°ã‚’確èªã—ã¦ä¸‹ã•ã„。ã ã‚Œã‹ã®ã¤ã¶ã‚„ãã‚’"
"フォローã™ã‚‹ãŸã‚ã«å°‹ã­ãªã„å ´åˆã¯ã€\"Reject\" をクリックã—ã¦ä¸‹ã•ã„。"
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "ライセンス"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "承èª"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’フォロー"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "æ‹’å¦"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "ã“ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’æ‹’å¦"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "èªè¨¼ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚ã‚Šã¾ã›ã‚“。"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "フォローãŒæ‰¿èªã•ã‚Œã¾ã—ãŸ"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4135,11 +4370,11 @@ msgstr ""
"フォローを承èªã™ã‚‹ã‹ã«é–¢ã™ã‚‹è©³ç´°ã®ãŸã‚ã®ã‚µã‚¤ãƒˆã®æŒ‡ç¤ºã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。"
"ã‚ãªãŸã®ãƒ•ã‚©ãƒ­ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ã¯:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "フォローãŒæ‹’å¦"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4149,37 +4384,37 @@ msgstr ""
"フォローを完全ã«æ‹’絶ã™ã‚‹ã‹ã«é–¢ã™ã‚‹è©³ç´°ã®ãŸã‚ã®ã‚µã‚¤ãƒˆã®æŒ‡ç¤ºã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã "
"ã•ã„。"
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "リスナー URI ‘%s’ ã¯ã“ã“ã§ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "リスニー URI ‘%s’ ãŒé•·ã™ãŽã¾ã™ã€‚"
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "リスニー URI ‘%s’ ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "プロファイル URL ‘%s’ ã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "ã‚¢ãƒã‚¿ãƒ¼ URL ‘%s’ ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。"
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "ã‚¢ãƒã‚¿ãƒ¼URL を読ã¿å–ã‚Œã¾ã›ã‚“ '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "ã‚¢ãƒã‚¿ãƒ¼ URL '%s' ã¯ä¸æ­£ãªç”»åƒå½¢å¼ã€‚"
@@ -4201,20 +4436,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "ã‚ãªãŸã®hotdogを楽ã—ã‚“ã§ãã ã•ã„!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4229,10 +4475,6 @@ msgstr ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "コントリビュータ"
@@ -4264,7 +4506,7 @@ msgstr ""
msgid "Plugins"
msgstr "プラグイン"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
@@ -4306,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"
@@ -4323,26 +4570,26 @@ msgstr "メッセージを追加ã§ãã¾ã›ã‚“。"
msgid "Could not update message with new URI."
msgstr "æ–°ã—ã„URIã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’アップデートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°è¿½åŠ  DB エラー: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚é•·ã™ãŽã§ã™ã€‚"
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
-msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ä¸æ˜Žãªåˆ©ç”¨è€…ã§ã™ã€‚"
+msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ã§ã™ã€‚"
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"多ã™ãŽã‚‹ã¤ã¶ã‚„ããŒé€Ÿã™ãŽã¾ã™; 数分間ã®ä¼‘ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†æŠ•ç¨¿ã—ã¦ãã ã•ã„。"
-#: classes/Notice.php:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4350,37 +4597,75 @@ msgstr ""
"多ã™ãŽã‚‹é‡è¤‡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé€Ÿã™ãŽã¾ã™; 数分間休ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†åº¦æŠ•ç¨¿ã—ã¦ãã ã•"
"ã„。"
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã®ãŒç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "返信を追加ã™ã‚‹éš›ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¨ãƒ©ãƒ¼ : %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "グループå—信箱をä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 "プロファイル設定ã®å¤‰æ›´"
@@ -4418,124 +4703,187 @@ msgstr ""
msgid "Untitled page"
msgstr "å称未設定ページ"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "プライマリサイトナビゲーション"
-#: lib/action.php:433
-msgid "Home"
-msgstr "ホーム"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "パーソナルプロファイルã¨å‹äººã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³"
+#: 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:438
-msgid "Connect"
-msgstr "接続"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "サービスã¸æŽ¥ç¶š"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "接続"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "サイト設定ã®å¤‰æ›´"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "招待"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "管ç†è€…"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "ログアウト"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "招待"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "サイトã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "ヘルプ"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "ログイン"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "助ã‘ã¦ï¼"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "検索"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "ヘルプ"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "人々ã‹ãƒ†ã‚­ã‚¹ãƒˆã‚’検索"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "ローカルビュー"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "ページã¤ã¶ã‚„ã"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "セカンダリサイトナビゲーション"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "ヘルプ"
+
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "よãã‚る質å•"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "プライãƒã‚·ãƒ¼"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "ソース"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "連絡先"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "ãƒãƒƒã‚¸"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet ソフトウェアライセンス"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4544,12 +4892,12 @@ msgstr ""
"**%%site.name%%** 㯠[%%site.broughtby%%](%%site.broughtbyurl%%) ãŒæä¾›ã™ã‚‹ãƒž"
"イクロブログサービスã§ã™ã€‚ "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ログサービスã§ã™ã€‚ "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4560,133 +4908,211 @@ msgstr ""
"ã„ã¦ã„ã¾ã™ã€‚ ライセンス [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)。"
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "サイト内容ライセンス"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "全㦠"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "ライセンス。"
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "ページ化"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "<<後"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "ユーザ設定"
+
+#. 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 "アクセス設定"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "パス設定"
-#: lib/applicationeditform.php:186
+#. 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 "サイトã¤ã¶ã‚„ã"
+
+#. 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: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 "アプリケーション編集"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚¢ã‚¤ã‚³ãƒ³"
-#: lib/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "グループやトピックを %d 字以内記述"
+msgstr "ã‚ãªãŸã®ã‚¢ãƒ—リケーションを %d 字以内記述"
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "グループやトピックを記述"
+msgstr "ã‚ãªãŸã®ã‚¢ãƒ—リケーションを記述"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "ソース"
+msgstr "ソース URL"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr "グループやトピックã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã‚„ブログ㮠URL"
+msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã® URL"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "ã“ã®ã‚¢ãƒ—リケーションã«è²¬ä»»ãŒã‚る組織"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "組織ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã®URL"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "èªè¨¼ã®å¾Œã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹URL"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "ブラウザ"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "デスクトップ"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "アプリケーションã€ãƒ–ラウザã€ã¾ãŸã¯ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã®ã‚¿ã‚¤ãƒ—"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "リードオンリー"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "リードライト"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"ã“ã®ã‚¢ãƒ—リケーションã®ãŸã‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚¢ã‚¯ã‚»ã‚¹: リードオンリーã€ã¾ãŸã¯ãƒªãƒ¼ãƒ‰"
@@ -4716,11 +5142,11 @@ msgstr "ã“ã®æ·»ä»˜ãŒç¾ã‚Œã‚‹ã¤ã¶ã‚„ã"
msgid "Tags for this attachment"
msgstr "ã“ã®æ·»ä»˜ã®ã‚¿ã‚°"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "パスワード変更ã«å¤±æ•—ã—ã¾ã—ãŸ"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "パスワード変更ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
@@ -4772,7 +5198,7 @@ msgstr "ãã® ID ã«ã‚ˆã‚‹ã¤ã¶ã‚„ãã¯å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“"
#: lib/command.php:168 lib/command.php:406 lib/command.php:467
#: lib/command.php:523
msgid "User has no last notice"
-msgstr "利用者ã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“"
+msgstr "ユーザã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“"
#: lib/command.php:190
msgid "Notice marked as fave."
@@ -4785,7 +5211,7 @@ msgstr "ã‚ãªãŸã¯æ—¢ã«ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã—ã¦ã„ã¾ã™ã€‚"
#: lib/command.php:231
#, php-format
msgid "Could not join user %s to group %s"
-msgstr "利用者 %s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã§ãã¾ã›ã‚“"
+msgstr "ユーザ %s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã§ãã¾ã›ã‚“"
#: lib/command.php:236
#, php-format
@@ -4795,7 +5221,7 @@ msgstr "%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã—ã¾ã—ãŸ"
#: lib/command.php:275
#, php-format
msgid "Could not remove user %s to group %s"
-msgstr "利用者 %s をグループ %s ã‹ã‚‰å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
+msgstr "ユーザ %s をグループ %s ã‹ã‚‰å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
#: lib/command.php:280
#, php-format
@@ -4869,79 +5295,89 @@ msgstr "ã¤ã¶ã‚„ãä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚"
#: lib/command.php:547
msgid "Specify the name of the user to subscribe to"
-msgstr "フォローã™ã‚‹åˆ©ç”¨è€…ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„"
+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"
@@ -4955,6 +5391,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"
@@ -4982,21 +5419,21 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "コンフィギュレーションファイルãŒã‚ã‚Šã¾ã›ã‚“。 "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "ç§ã¯ä»¥ä¸‹ã®å ´æ‰€ã§ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã—ã¾ã—ãŸ: "
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
"ã‚ãªãŸã¯ã€ã“れを修ç†ã™ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’å‹•ã‹ã—ãŸãŒã£ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›"
"ん。"
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "インストーラã¸ã€‚"
@@ -5095,6 +5532,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"
@@ -5129,7 +5571,7 @@ msgstr "ブロック"
#: lib/groupnav.php:102
#, php-format
msgid "%s blocked users"
-msgstr "%s ブロック利用者"
+msgstr "%s ブロックユーザ"
#: lib/groupnav.php:108
#, php-format
@@ -5161,7 +5603,7 @@ msgstr "投稿ãŒå¤šã„グループ"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr "%s グループã®é€šçŸ¥ã«ã‚ã‚‹ã‚¿ã‚°"
+msgstr "%s グループã®ã¤ã¶ã‚„ãã«ã‚ã‚‹ã‚¿ã‚°"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
@@ -5184,32 +5626,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "ä¸æ˜Žãªå—ä¿¡ç®±ã®ã‚½ãƒ¼ã‚¹ %d。"
@@ -5478,18 +5920,18 @@ msgstr ""
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
-msgstr "利用者ã ã‘ãŒãれら自身ã®ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ã‚’読むã“ã¨ãŒã§ãã¾ã™ã€‚"
+msgstr "ユーザã ã‘ãŒã‹ã‚Œã‚‰è‡ªèº«ã®ãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ã‚’読むã“ã¨ãŒã§ãã¾ã™ã€‚"
#: lib/mailbox.php:139
msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-"ã‚ãªãŸã«ã¯ã€ãƒ—ライベートメッセージãŒå…¨ãã‚ã‚Šã¾ã›ã‚“。ã‚ãªãŸã¯ä»–ã®åˆ©ç”¨è€…を会話"
+"ã‚ãªãŸã«ã¯ã€ãƒ—ライベートメッセージãŒå…¨ãã‚ã‚Šã¾ã›ã‚“。ã‚ãªãŸã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ã‚’会話"
"ã«å¼•ã込むプライベートメッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚人々ã¯ã‚ãªãŸã ã‘ã¸ã®"
"メッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "from"
@@ -5584,6 +6026,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 "ã¤ã¶ã‚„ãã‚’é€ã‚‹"
@@ -5614,53 +6062,55 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"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
#, 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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãã¸è¿”ä¿¡"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "返信"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ãŸ"
@@ -5692,11 +6142,7 @@ msgstr "リモートプロファイル追加エラー"
msgid "Duplicate notice"
msgstr "é‡è¤‡ã—ãŸã¤ã¶ã‚„ã"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "ã‚ãªãŸã¯ãƒ•ã‚©ãƒ­ãƒ¼ãŒç¦æ­¢ã•ã‚Œã¾ã—ãŸã€‚"
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "サブスクリプションを追加ã§ãã¾ã›ã‚“"
@@ -5712,19 +6158,19 @@ msgstr "返信"
msgid "Favorites"
msgstr "ãŠæ°—ã«å…¥ã‚Š"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "å—ä¿¡ç®±"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "ã‚ãªãŸã®å…¥ã£ã¦ãるメッセージ"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "é€ä¿¡ç®±"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "ã‚ãªãŸãŒé€ã£ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
@@ -5737,7 +6183,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 "フォロー"
@@ -5745,23 +6191,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"
+msgstr "ユーザID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
-msgstr "ã‹ã‚‰ã®ãƒ¡ãƒ³ãƒãƒ¼"
+msgstr "利用開始日"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "å…¨ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—"
@@ -5801,6 +6247,15 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã‹?"
msgid "Repeat this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™"
+#: 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 モードã®ãŸã‚ã®ã‚·ãƒ³ã‚°ãƒ«ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "サンドボックス"
@@ -5817,6 +6272,10 @@ msgstr "サイト検索"
msgid "Keyword(s)"
msgstr "キーワード"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "検索"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "ヘルプ検索"
@@ -5868,33 +6327,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
@@ -5932,7 +6372,7 @@ msgstr "ã“ã®åˆ©ç”¨è€…をアンサイレンス"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
-msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’解除ã™ã‚‹"
+msgstr "ã“ã®åˆ©ç”¨è€…ã‹ã‚‰ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’解除ã™ã‚‹"
#: lib/unsubscribeform.php:137
msgid "Unsubscribe"
@@ -5946,68 +6386,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 "å¸ä¼š"
+msgstr "管ç†"
+
+#: 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:875
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "数秒å‰"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ç´„ 1 分å‰"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "ç´„ %d 分å‰"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ç´„ 1 時間å‰"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "ç´„ %d 時間å‰"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ç´„ 1 æ—¥å‰"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "ç´„ %d æ—¥å‰"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ç´„ 1 ヵ月å‰"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "ç´„ %d ヵ月å‰"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ç´„ 1 å¹´å‰"
@@ -6021,7 +6478,7 @@ msgstr "%sã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s ã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“! 3ã‹6ã®16進数を使ã£ã¦ãã ã•ã„。"
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "メッセージãŒé•·ã™ãŽã¾ã™ - 最大 %1$d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %2$d。"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index b8197af3e..09af2e6f0 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,24 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:00+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:35:58+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "수ë½"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "아바타 설정"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "회ì›ê°€ìž…"
+
+#. 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 "ê°œì¸ì •ë³´ 취급방침"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "초대"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "차단하기"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "아바타 설정"
+
+#: 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
@@ -33,84 +99,93 @@ msgstr "그러한 태그가 없습니다."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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ì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
@@ -120,22 +195,22 @@ msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +226,7 @@ msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "ì´ ë©”ì„œë“œëŠ” 등ë¡ì„ 요구합니다."
@@ -170,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 "ì´ìš©ìžê°€ í”„ë¡œí•„ì„ ê°€ì§€ê³  있지 않습니다."
@@ -182,7 +258,7 @@ msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í•  수 없습니다."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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
@@ -305,17 +381,17 @@ msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
msgid "Two user ids or screen_names must be supplied."
msgstr "ë‘ ê°œì˜ ì‚¬ìš©ìž ID나 ëŒ€í™”ëª…ì„ ìž…ë ¥í•´ì•¼ 합니다."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "공개 streamì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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."
@@ -323,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -390,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는 가입할 수 없습니다."
@@ -409,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 사용ìžë¥¼ 제거할 수 없습니다."
@@ -429,98 +505,112 @@ msgstr "%s 그룹"
msgid "groups on %s"
msgstr "그룹 í–‰ë™"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "세션토í°ì— 문제가 있습니다. 다시 ì‹œë„해주세요."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "ì‚¬ìš©ìž ì´ë¦„ì´ë‚˜ 비밀 번호가 틀렸습니다."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "ì‚¬ìš©ìž ì„¸íŒ… 오류"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "해쉬테그를 추가 í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "ìž˜ëª»ëœ í¼ ì œì¶œ"
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "계정"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "별명"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "비밀 번호"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "모든 것"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -556,17 +646,17 @@ msgstr "아바타가 ì—…ë°ì´íŠ¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid "No status with that ID found."
msgstr "ë°œê²¬ëœ IDì˜ ìƒíƒœê°€ 없습니다."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "너무 ê¹ë‹ˆë‹¤. í†µì§€ì˜ ìµœëŒ€ 길ì´ëŠ” 140ê¸€ìž ìž…ë‹ˆë‹¤."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "찾지 못함"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -581,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"
@@ -618,27 +696,22 @@ msgstr "%s 공개 타임ë¼ì¸"
msgid "%s updates from everyone!"
msgstr "모ë‘ë¡œë¶€í„°ì˜ ì—…ë°ì´íŠ¸ %sê°œ!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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ì˜ ì—…ë°ì´íŠ¸!"
@@ -655,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 "ë³„ëª…ì´ ì—†ìŠµë‹ˆë‹¤."
@@ -668,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 "아바타"
@@ -685,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "ìžë¥´ê¸°"
@@ -716,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 "íŒŒì¼ ë°ì´í„°ë¥¼ 잃어버렸습니다."
@@ -749,23 +821,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "네, 맞습니다."
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "ì´ ì‚¬ìš©ìž ì°¨ë‹¨í•˜ê¸°"
@@ -773,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 "ì´ ì‚¬ìš©ìžë¥¼ 차단해제합니다."
@@ -866,16 +943,61 @@ 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 "ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "í†µì§€ì— í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "그러한 통지는 없습니다."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "로그ì¸í•˜ê³  있지 않습니다."
@@ -905,7 +1027,7 @@ msgstr "ì •ë§ë¡œ 통지를 삭제하시겠습니까?"
msgid "Do not delete this notice"
msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다."
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
@@ -924,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 ""
@@ -1049,12 +1171,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "저장"
@@ -1070,35 +1193,27 @@ msgstr "ì´ ë©”ì‹œì§€ëŠ” favoriteì´ ì•„ë‹™ë‹ˆë‹¤."
msgid "Add to favorites"
msgstr "좋아하는 게시글로 추가하기"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "그러한 문서는 없습니다."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "다른 옵션들"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "그러한 통지는 없습니다."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "ë‹¹ì‹ ì˜ ì„¸ì…˜í† í°ê´€ë ¨ 문제가 있습니다."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1109,47 +1224,52 @@ msgstr "ë‹¤ìŒ ì–‘ì‹ì„ ì´ìš©í•´ ê·¸ë£¹ì„ íŽ¸ì§‘í•˜ì‹­ì‹œì˜¤."
msgid "Name is required."
msgstr "위와 ê°™ì€ ë¹„ë°€ 번호. 필수 사항."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "ì‹¤ëª…ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤. (최대 255글ìž)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "ë³„ëª…ì´ ì´ë¯¸ 사용중 입니다. 다른 ë³„ëª…ì„ ì‹œë„í•´ 보십시오."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "설명"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "홈페ì´ì§€ 주소형ì‹ì´ 올바르지 않습니다."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "위치가 너무 ê¹ë‹ˆë‹¤. (최대 255글ìž)"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다."
@@ -1163,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 "ì˜µì…˜ë“¤ì´ ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -1225,8 +1345,8 @@ msgstr ""
"주시기 ë°”ëžë‹ˆë‹¤."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "취소"
@@ -1308,7 +1428,7 @@ msgid "Cannot normalize that email address"
msgstr "ê·¸ ì´ë©”ì¼ ì£¼ì†Œë¥¼ 정규화 í•  수 없습니다."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "유효한 ì´ë©”ì¼ ì£¼ì†Œê°€ 아닙니다."
@@ -1320,7 +1440,7 @@ msgstr "ê·¸ ì´ë©”ì¼ ì£¼ì†ŒëŠ” ì´ë¯¸ ê·€í•˜ì˜ ê²ƒìž…ë‹ˆë‹¤."
msgid "That email address already belongs to another user."
msgstr "ê·¸ ì´ë©”ì¼ ì£¼ì†ŒëŠ” ì´ë¯¸ 다른 사용ìžì˜ 소유입니다."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "í™•ì¸ ì½”ë“œë¥¼ 추가 í•  수 없습니다."
@@ -1381,7 +1501,7 @@ msgstr "ì´ ê²Œì‹œê¸€ì€ ì´ë¯¸ 좋아하는 게시글입니다."
msgid "Disfavor favorite"
msgstr "좋아하는글 취소"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "ì¸ê¸°ìžˆëŠ” 게시글"
@@ -1504,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
@@ -1536,7 +1675,7 @@ msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
msgid "User is not a member of group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "사용ìžë¥¼ 차단합니다."
@@ -1573,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "차단하기"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "관리ìž"
-#: actions/groupmembers.php:473
+#: 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 "그룹"
@@ -1830,6 +1975,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "ê·¸ Jabber ID는 ê·€í•˜ì˜ ê²ƒì´ ì•„ë‹™ë‹ˆë‹¤."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "%sì˜ ë°›ì€ìª½ì§€í•¨"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1908,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"
@@ -1973,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ì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤."
@@ -1982,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를 떠났습니다."
@@ -2004,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "로그ì¸"
@@ -2042,21 +2199,21 @@ msgstr ""
"action.register%%) 새 ê³„ì •ì„ ìƒì„± ë˜ëŠ” [OpenID](%%action.openidlogin%%)를 사"
"용해 보세요."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "회ì›ì´ ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ìŠµë‹ˆë‹¤."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "관리ìžë§Œ ê·¸ë£¹ì„ íŽ¸ì§‘í•  수 있습니다."
@@ -2066,8 +2223,9 @@ msgid "No current status"
msgstr "현재 ìƒíƒœê°€ 없습니다."
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "그러한 통지는 없습니다."
#: actions/newapplication.php:64
#, fuzzy
@@ -2079,11 +2237,11 @@ msgstr "ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
msgid "Use this form to register a new application."
msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해 ì´ ì–‘ì‹ì„ 사용하세요."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다."
@@ -2216,29 +2374,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2260,8 +2418,8 @@ msgstr "ì—°ê²°"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다."
@@ -2332,6 +2490,11 @@ msgstr "옳지 ì•Šì€ í†µì§€ ë‚´ìš©"
msgid "Login token expired."
msgstr "사ì´íŠ¸ì— 로그ì¸í•˜ì„¸ìš”."
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "%sì˜ ë³´ë‚¸ìª½ì§€í•¨"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2402,7 +2565,8 @@ msgstr "새 비밀번호를 저장 할 수 없습니다."
msgid "Password saved."
msgstr "비밀 번호 저장"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2410,142 +2574,158 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "ì´ íŽ˜ì´ì§€ëŠ” 귀하가 승ì¸í•œ 미디어 타입ì—서는 ì´ìš©í•  수 없습니다."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "초대"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "복구"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "사ì´íŠ¸ 공지"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "아바타"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "아바타 설정"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "아바타가 ì—…ë°ì´íŠ¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "아바타가 ì—…ë°ì´íŠ¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "복구"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "통지"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "복구"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "사ì´íŠ¸ 공지"
@@ -2573,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 ""
@@ -2602,13 +2782,13 @@ 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 "실명"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "홈페ì´ì§€"
@@ -2631,8 +2811,8 @@ msgid "Bio"
msgstr "ìžê¸°ì†Œê°œ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "위치"
@@ -2656,7 +2836,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "ë‹¹ì‹ ì„ ìœ„í•œ 태그, (문ìž,숫ìž,-, ., _ë¡œ 구성) 콤마 í˜¹ì€ ê³µë°±ìœ¼ë¡œ 구분."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "언어"
@@ -2682,7 +2862,7 @@ msgstr "나ì—게 구ë…하는 사람ì—게 ìžë™ êµ¬ë… ì‹ ì²­"
msgid "Bio is too long (max %d chars)."
msgstr "ìžê¸°ì†Œê°œê°€ 너무 ê¹ë‹ˆë‹¤. (최대 140글ìž)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "íƒ€ìž„ì¡´ì´ ì„¤ì • ë˜ì§€ 않았습니다."
@@ -2695,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 "설정 저장"
@@ -2725,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "í¼ë¸”릭 스트림 피드"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2775,7 +2956,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2810,7 +2991,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "태그 í´ë¼ìš°ë“œ"
@@ -2948,8 +3129,7 @@ msgstr "í™•ì¸ ì½”ë“œ 오류"
msgid "Registration successful"
msgstr "íšŒì› ê°€ìž…ì´ ì„±ê³µì ìž…니다."
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "회ì›ê°€ìž…"
@@ -2990,7 +3170,7 @@ msgid "Same as password above. Required."
msgstr "위와 ê°™ì€ ë¹„ë°€ 번호. 필수 사항."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "ì´ë©”ì¼"
@@ -3095,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 "구ë…"
@@ -3138,7 +3318,7 @@ msgstr "ë¼ì´ì„ ìŠ¤ì— ë™ì˜í•˜ì§€ 않는다면 등ë¡í•  수 없습니다."
msgid "You already repeated that notice."
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ì‚¬ìš©ìžë¥¼ 차단하고 있습니다."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "ìƒì„±"
@@ -3148,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "%2$sì—ì„œ %1$s까지 메시지"
+
+#: 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 "
@@ -3195,6 +3380,21 @@ 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"
+msgstr "아바타가 ì—…ë°ì´íŠ¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3205,117 +3405,159 @@ msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
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 ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "아바타 설정"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "ê·¸ë£¹ì„ ë– ë‚˜ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "í†µì§€ì— í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤."
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "별명"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "페ì´ì§€ìˆ˜"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "설명"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "통계"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "ì •ë§ë¡œ 통지를 삭제하시겠습니까?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s ë‹˜ì˜ ì¢‹ì•„í•˜ëŠ” 글들"
+
#: actions/showfavorites.php:132
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 "
@@ -3323,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 ""
@@ -3332,68 +3574,73 @@ msgstr ""
msgid "%s group"
msgstr "%s 그룹"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%s 그룹 회ì›, %d페ì´ì§€"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "그룹 프로필"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3403,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."
@@ -3414,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 "관리ìž"
@@ -3447,6 +3694,11 @@ msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤."
msgid " tagged %s"
msgstr "%s íƒœê·¸ëœ í†µì§€"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s 와 친구들, %d 페ì´ì§€"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3472,25 +3724,25 @@ msgstr "%sì˜ í†µì§€ 피드"
msgid "FOAF for %s"
msgstr "%sì˜ ë³´ë‚¸ìª½ì§€í•¨"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3499,7 +3751,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3509,7 +3761,7 @@ msgstr ""
"**%s**는 %%%%site.name%%%% [마ì´í¬ë¡œë¸”로깅](http://en.wikipedia.org/wiki/"
"Micro-blogging) ì„œë¹„ìŠ¤ì— ê³„ì •ì„ ê°–ê³  있습니다."
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "%sì— ë‹µì‹ "
@@ -3525,209 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "유효한 ì´ë©”ì¼ ì£¼ì†Œê°€ 아닙니다."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "%sì— í¬ìŠ¤íŒ… í•  새로운 ì´ë©”ì¼ ì£¼ì†Œ"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "로컬 뷰"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "언어 설정"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "복구"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "수ë½"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "ê°œì¸ì •ë³´ 취급방침"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "초대"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-#, fuzzy
-msgid "Closed"
-msgstr "차단하기"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "새로운 메시지입니다."
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "트위터 í™˜ê²½ì„¤ì •ì„ ì €ìž¥í•  수 없습니다."
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "사ì´íŠ¸ 공지"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "아바타 설정"
+msgid "Save site notice"
+msgstr "사ì´íŠ¸ 공지"
#: actions/smssettings.php:58
#, fuzzy
@@ -3830,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 "구ë…하였습니다."
@@ -3902,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 "
@@ -3912,30 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "ì´ìš©ìž 셀프 í…Œí¬ %s - %d 페ì´ì§€"
+
+#: 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ì˜ í†µì§€ 피드"
@@ -3954,7 +4212,8 @@ msgstr "태그 %s"
msgid "User profile"
msgstr "ì´ìš©ìž 프로필"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "사진"
@@ -3988,7 +4247,7 @@ msgstr "ë‹¹ì‹ ì˜ êµ¬ë…ìžë‚˜ 구ë…하는 ì‚¬ëžŒì— íƒœê¹…ì„ ìœ„í•´ ì´ ì–‘ì‹
msgid "No such tag."
msgstr "그러한 태그가 없습니다."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API 메서드를 구성중 입니다."
@@ -4015,18 +4274,20 @@ msgstr "요청한 프로필id가 없습니다."
msgid "Unsubscribed"
msgstr "구ë…취소 ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4093,26 +4354,6 @@ msgstr "ì´ˆëŒ€ê¶Œì„ ë³´ëƒˆìŠµë‹ˆë‹¤"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "구ë…ì„ í—ˆê°€"
@@ -4127,38 +4368,38 @@ msgstr ""
"사용ìžì˜ 통지를 구ë…하려면 ìƒì„¸ë¥¼ 확ì¸í•´ 주세요. 구ë…하지 않는 경우는, \"취소"
"\"를 í´ë¦­í•´ 주세요."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
#, fuzzy
msgid "License"
msgstr "ë¼ì´ì„ ìŠ¤"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "수ë½"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "ì´ íšŒì›ì„ 구ë…합니다."
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "거부"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "%s 구ë…"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "허용ë˜ì§€ 않는 요청입니다."
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "êµ¬ë… í—ˆê°€"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4168,11 +4409,11 @@ msgstr ""
"구ë…ì´ ìŠ¹ì¸ ë˜ì—ˆìŠµë‹ˆë‹¤. 하지만 콜백 URLì´ í†µê³¼ ë˜ì§€ 않았습니다. 웹사ì´íŠ¸ì˜ 지"
"시를 찾아 êµ¬ë… ìŠ¹ì¸ ë°©ë²•ì— ëŒ€í•˜ì—¬ ì½ì–´ë³´ì‹­ì‹œì˜¤. ê·€í•˜ì˜ êµ¬ë… í† í°ì€ : "
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "êµ¬ë… ê±°ë¶€"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4182,37 +4423,37 @@ msgstr ""
"구ë…ì´ í•´ì§€ ë˜ì—ˆìŠµë‹ˆë‹¤. 하지만 콜백 URLì´ í†µê³¼ ë˜ì§€ 않았습니다. 웹사ì´íŠ¸ì˜ 지"
"시를 찾아 êµ¬ë… í•´ì§€ ë°©ë²•ì— ëŒ€í•˜ì—¬ ì½ì–´ë³´ì‹­ì‹œì˜¤."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "아바타 URL '%s'ì„(를) ì½ì–´ë‚¼ 수 없습니다."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "%S ìž˜ëª»ëœ ê·¸ë¦¼ íŒŒì¼ íƒ€ìž…ìž…ë‹ˆë‹¤. "
@@ -4232,21 +4473,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%s 그룹 회ì›, %d페ì´ì§€"
+
#: actions/usergroups.php:130
#, fuzzy
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"
@@ -4259,11 +4511,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "아바타가 ì—…ë°ì´íŠ¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4295,7 +4542,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "ê°œì¸ì ì¸"
@@ -4336,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"
@@ -4354,28 +4606,28 @@ msgstr "메시지를 삽입할 수 없습니다."
msgid "Could not update message with new URI."
msgstr "새 URI와 함께 메시지를 ì—…ë°ì´íŠ¸í•  수 없습니다."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "해쉬테그를 추가 í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "게시글 저장문제. ì•Œë ¤ì§€ì§€ì•Šì€ íšŒì›"
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4384,37 +4636,79 @@ msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "ì´ ì‚¬ì´íŠ¸ì— 게시글 í¬ìŠ¤íŒ…으로부터 ë‹¹ì‹ ì€ ê¸ˆì§€ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "ë‹µì‹ ì„ ì¶”ê°€ í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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 "프로필 세팅 바꾸기"
@@ -4453,127 +4747,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "제목없는 페ì´ì§€"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "주 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:433
-msgid "Home"
-msgstr "홈"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "ê°œì¸ í”„ë¡œí•„ê³¼ 친구 타임ë¼ì¸"
+#: 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:438
-msgid "Connect"
-msgstr "ì—°ê²°"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "ì„œë²„ì— ìž¬ì ‘ì† í•  수 없습니다 : %s"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "ì—°ê²°"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "주 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "초대"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "관리ìž"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "로그아웃"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "초대"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "ì´ ì‚¬ì´íŠ¸ë¡œë¶€í„° 로그아웃"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "ë„움ë§"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "로그ì¸"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ë„ì›€ì´ í•„ìš”í•´!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "검색"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "ë„움ë§"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "프로필ì´ë‚˜ í…스트 검색"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "로컬 뷰"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "페ì´ì§€ 공지"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ë³´ì¡° 사ì´íŠ¸ 네비게ì´ì…˜"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "ë„움ë§"
+
+#: lib/action.php:754
msgid "About"
msgstr "ì •ë³´"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "ìžì£¼ 묻는 질문"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "ê°œì¸ì •ë³´ 취급방침"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "소스 코드"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "ì—°ë½í•˜ê¸°"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "찔러 보기"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4582,12 +4937,12 @@ msgstr ""
"**%%site.name%%** 는 [%%site.broughtby%%](%%site.broughtbyurl%%)가 제공하는 "
"마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 는 마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4598,143 +4953,225 @@ msgstr ""
"ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. StatusNet는 [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html) ë¼ì´ì„ ìŠ¤ì— ë”°ë¼ ì‚¬ìš©í•  수 있습니다."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "모든 것"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "페ì´ì§€ìˆ˜"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "ë’· 페ì´ì§€"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 ì¸ì¦"
+
+#. 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 ì¸ì¦"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS ì¸ì¦"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS ì¸ì¦"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "140글ìžë¡œ 그룹ì´ë‚˜ 토픽 설명하기"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "140글ìžë¡œ 그룹ì´ë‚˜ 토픽 설명하기"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "소스 코드"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "그룹 í˜¹ì€ í† í”½ì˜ í™ˆíŽ˜ì´ì§€ë‚˜ 블로그 URL"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "그룹 í˜¹ì€ í† í”½ì˜ í™ˆíŽ˜ì´ì§€ë‚˜ 블로그 URL"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4764,12 +5201,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "비밀번호 변경"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "비밀번호 변경"
@@ -4923,80 +5360,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"
@@ -5010,6 +5456,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"
@@ -5037,20 +5484,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "í™•ì¸ ì½”ë“œê°€ 없습니다."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "ì´ ì‚¬ì´íŠ¸ 로그ì¸"
@@ -5152,6 +5599,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"
@@ -5243,32 +5695,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5471,7 +5923,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 "다ìŒì—ì„œ:"
@@ -5562,6 +6014,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 "게시글 보내기"
@@ -5595,51 +6053,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "ìƒì„±"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "답장하기"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -5673,12 +6131,7 @@ msgstr "리모트 프로필 추가 오류"
msgid "Duplicate notice"
msgstr "통지 삭제"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "ì´ íšŒì›ì€ 구ë…으로부터 ë‹¹ì‹ ì„ ì°¨ë‹¨í•´ì™”ë‹¤."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "예약 구ë…ì„ ì¶”ê°€ í•  수 없습니다."
@@ -5694,19 +6147,19 @@ msgstr "답신"
msgid "Favorites"
msgstr "좋아하는 글들"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "ë°›ì€ ìª½ì§€í•¨"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "ë‹¹ì‹ ì˜ ë°›ì€ ë©”ì‹œì§€ë“¤"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "보낸 쪽지함"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "ë‹¹ì‹ ì˜ ë³´ë‚¸ 메시지들"
@@ -5720,7 +6173,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 "구ë…"
@@ -5728,24 +6181,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 "모든 그룹"
@@ -5788,6 +6241,15 @@ msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
msgid "Repeat this notice"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5807,6 +6269,10 @@ msgstr "검색"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "검색"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5861,35 +6327,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
@@ -5944,68 +6389,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%dì¼ ì „"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1ë…„ ì „"
@@ -6019,7 +6480,7 @@ msgstr "홈페ì´ì§€ 주소형ì‹ì´ 올바르지 않습니다."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다."
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 95eaff943..a5736795f 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -9,23 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:03+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:01+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "ПриÑтап"
+
+#. 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 "РегиÑтрација"
+
+#. 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 "Приватно"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "РегиÑтрирање Ñамо Ñо покана."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Само Ñо покана"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Оневозможи нови региÑтрации."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Затворен"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Зачувај нагодувања на приÑтап"
+
+#: 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
@@ -34,58 +94,65 @@ msgstr "Ðема таква Ñтраница"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 "
@@ -94,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 "
@@ -104,7 +172,7 @@ msgstr ""
"на кориÑникот или да [објавите нешто што Ñакате тој да го прочита](%%%%"
"action.newnotice%%%%?status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -114,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!"
@@ -129,22 +198,22 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API методот не е пронајден."
@@ -159,7 +228,7 @@ msgstr "API методот не е пронајден."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Овој метод бара POST."
@@ -179,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 "КориÑникот нема профил."
@@ -190,7 +260,7 @@ msgstr "Ðе може да Ñе зачува профил."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -206,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."
@@ -311,76 +381,76 @@ msgid "Two user ids or screen_names must be supplied."
msgstr ""
"Мора да бидат наведени два кориÑнички идентификатора (ID) или две имиња."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Ðе можев да го утврдам целниот кориÑник."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "ÐлијаÑот не може да биде иÑÑ‚ како прекарот."
@@ -391,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."
@@ -408,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."
@@ -428,96 +498,112 @@ msgstr "%s групи"
msgid "groups on %s"
msgstr "групи на %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Лошо барање."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Ðема наведено oauth_token параметар."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Се поајви проблем Ñо Вашиот ÑеÑиÑки жетон. Обидете Ñе повторно."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Погрешен прекар / лозинка!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr "Грешка при бришењето на кориÑникот на OAuth-програмот."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr ""
"Грешка во базата на податоци при вметнувањето на кориÑникот на OAuth-"
"програмот."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr "Жетонот на барањето %s е одобрен. Заменете го Ñо жетон за приÑтап."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "Жетонот на барањето %s е одбиен."
+msgid "The request token %s has been denied and revoked."
+msgstr "Жетонот на барањето %s е одбиен и поништен."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Ðеочекувано поднеÑување на образец."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "Има програм кој Ñака да Ñе поврзе Ñо Вашата Ñметка"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Дозволи или одбиј приÑтап"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"Програмот <strong>%1$s</strong> од <strong>%2$s</strong> би Ñакал да може да "
+"<strong>%3$s</strong> податоците за Вашата %4$s Ñметка. Треба да дозволувате "
+"приÑтап до Вашата %4$s Ñметка Ñамо на трети Ñтрани на кои им верувате."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Сметка"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Прекар"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Лозинка"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Одбиј"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Дозволи"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Дозволете или одбијте приÑтап до податоците за Вашата Ñметка."
@@ -550,17 +636,17 @@ msgstr "СтатуÑот е избришан."
msgid "No status with that ID found."
msgstr "Ðема пронајдено ÑÑ‚Ð°Ñ‚ÑƒÑ Ñо тој ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Ова е предолго. МакÑималната дозволена должина изнеÑува %d знаци."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Ðе е пронајдено"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -576,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"
@@ -613,27 +687,22 @@ msgstr "Јавна иÑторија на %s"
msgid "%s updates from everyone!"
msgstr "%s подновуввања од Ñите!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Повторено од %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -649,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 "Ðема прекар."
@@ -662,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 "Ðватар"
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "ОтÑечи"
@@ -712,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 "Податоците за податотеката Ñе изгубени."
@@ -747,22 +815,23 @@ msgstr ""
"претплати на Ð’Ð°Ñ Ð²Ð¾ иднина, и нема да бидете извеÑтени ако имате @-одговори "
"од кориÑникот."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокирај го кориÑников"
@@ -770,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 "Одблокирај го овој корÑник"
@@ -858,16 +931,58 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "Мора да Ñте најавени за да можете да избришете програм."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Програмот не е пронајден."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "Ðе Ñте ÑопÑтвеник на овој програм."
+
+#: 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 "Избриши програм"
+
+#: 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 "Ðе го бриши овој програм"
+
+#: actions/deleteapplication.php:160
+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 "Ðе Ñте најавени."
@@ -896,7 +1011,7 @@ msgstr "Дали Ñте Ñигурни дека Ñакате да ја избрÐ
msgid "Do not delete this notice"
msgstr "Ðе ја бриши оваа забелешка"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Бриши ја оваа забелешка"
@@ -912,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."
@@ -920,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 "Изглед"
@@ -1030,12 +1145,13 @@ msgstr "Врати по оÑновно"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "Зачувај"
@@ -1051,32 +1167,24 @@ msgstr "Оваа забелешка не Ви е омилена!"
msgid "Add to favorites"
msgstr "Додај во омилени"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Ðема таков документ."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Ðема документ Ñо наÑлов „%s“"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Уреди програм"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Мора да Ñте најавени за да можете да уредувате програми."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Ðе Ñте ÑопÑтвеник на овој програм."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Ðема таков програм."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Се појави проблем Ñо Вашиот ÑеÑиÑки жетон."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Образецов Ñлужи за уредување на програмот."
@@ -1085,43 +1193,47 @@ msgstr "Образецов Ñлужи за уредување на програÐ
msgid "Name is required."
msgstr "Треба име."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Името е предолго (макÑимум 255 знаци)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Тоа име е во употреба. Одберете друго."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Треба опиÑ."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "Изворната URL-адреÑа е предолга."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "Изворната URL-адреÑа е неважечка."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "Треба организација."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "Организацијата е предолга (макÑимумот е 255 знаци)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "Треба домашна Ñтраница на организацијата."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "Повикувањето е предолго."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "URL-адреÑата за повикување е неважечка."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Ðе можев да го подновам програмот."
@@ -1134,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 "Ðагодувањата Ñе зачувани."
@@ -1193,8 +1305,8 @@ msgstr ""
"Ñандачето за Ñпам!). Во пиÑмото ќе Ñледат понатамошни напатÑтвија."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Откажи"
@@ -1277,7 +1389,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðеможам да ја нормализирам таа е-поштенÑка адреÑа"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеправилна адреÑа за е-пошта."
@@ -1289,7 +1401,7 @@ msgstr "Оваа е-поштенÑка адреÑа е веќе Ваша."
msgid "That email address already belongs to another user."
msgstr "Таа е-поштенÑка адреÑа е веќе зафатена од друг кориÑник."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Кодот за потврда не може да Ñе внеÑе."
@@ -1351,7 +1463,7 @@ msgstr "Оваа белешка е веќе омилена!"
msgid "Disfavor favorite"
msgstr "Тргни од омилени"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Популарни забелешки"
@@ -1470,6 +1582,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
@@ -1499,7 +1627,7 @@ msgstr "КориÑникот е веќе блокиран од оваа груп
msgid "User is not a member of group."
msgstr "КориÑникот не членува во групата."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Блокирај кориÑник од група"
@@ -1536,11 +1664,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."
@@ -1548,20 +1676,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."
@@ -1569,62 +1697,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐдминиÑтратор"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокирај"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Ðаправи го кориÑникот админиÑтратор на групата"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Ðаправи го/ја админиÑтратор"
-#: actions/groupmembers.php:473
+#: 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 "Групи"
@@ -1796,6 +1930,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Ова не е Вашиот Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Приемно Ñандаче за %1$s - ÑÑ‚Ñ€. %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1880,16 +2019,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"
@@ -1950,7 +2091,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"
@@ -1959,11 +2104,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"
@@ -1980,8 +2125,7 @@ msgstr "Ðеточно кориÑничко име или лозинка"
msgid "Error setting user. You are probably not authorized."
msgstr "Грешка при поÑтавувањето на кориÑникот. Веројатно не Ñе заверени."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Ðајава"
@@ -1996,7 +2140,8 @@ msgstr "Запамети ме"
#: actions/login.php:237 actions/register.php:480
msgid "Automatically login in the future; not for shared computers!"
msgstr ""
-"Следниот пат најавете Ñе автоматÑки; не за компјутери кои ги делите Ñо други!"
+"Следниот пат најавете Ñе автоматÑки; не е за компјутери кои ги делите Ñо "
+"други!"
#: actions/login.php:247
msgid "Lost or forgotten password?"
@@ -2019,21 +2164,21 @@ msgstr ""
"Ðајавете Ñе Ñо Вашето кориÑничко име и лозинка. Сè уште немате кориÑничко "
"име? [РегиÑтрирајте](%%action.register%%) нова Ñметка."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Само админиÑтратор може да направи друг кориÑник админиÑтратор."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s веќе е админиÑтратор на групата „%2$s“."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе можам да добијам евиденција за членÑтво на %1$s во групата %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðе можам да го направам кориÑникот %1$s админиÑтратор на групата %2$s."
@@ -2043,7 +2188,7 @@ msgid "No current status"
msgstr "Ðема тековен ÑтатуÑ"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Ðов програм"
#: actions/newapplication.php:64
@@ -2054,11 +2199,11 @@ msgstr "Мора да Ñте најавени за да можете да рег
msgid "Use this form to register a new application."
msgstr "Овој образец Ñлужи за региÑтрирање на нов програм."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "Треба изворна URL-адреÑа."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Ðе можеше да Ñе Ñоздаде програмот."
@@ -2194,28 +2339,28 @@ msgstr "Програми што ги имате региÑтрирано"
msgid "You have not registered any applications yet."
msgstr "Сè уште немате региÑтрирано ниеден програм,"
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Поврзани програми"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr "Им имате дозволено приÑтап до Вашата Ñметка на Ñледните програми."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Ðе Ñте кориÑник на тој програм."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "Ðе можам да му го одземам приÑтапот на програмот: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr "Му немате дозволено приÑтап до Вашата Ñметка на ниеден програм."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
"Развивачите можат да ги нагодат региÑтрациÑките поÑтавки за нивните програми "
@@ -2237,8 +2382,8 @@ msgstr "тип на Ñодржини "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "Ова не е поддржан формат на податотека."
@@ -2302,6 +2447,11 @@ msgstr "Ðазначен е неважечки најавен жетон."
msgid "Login token expired."
msgstr "Ðајавниот жетон е иÑтечен."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Излезно Ñандаче за %1$s - ÑÑ‚Ñ€. %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2374,7 +2524,8 @@ msgstr "Ðе можам да ја зачувам новата лозинка."
msgid "Password saved."
msgstr "Лозинката е зачувана."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Патеки"
@@ -2382,132 +2533,147 @@ msgstr "Патеки"
msgid "Path and server settings for this StatusNet site."
msgstr "Ðагодувања за патеки и Ñервери за оваа StatusNet веб-Ñтраница."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Директориумот на темата е нечитлив: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Директориумот на аватарот е недоÑтапен за пишување: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Директориумот на позадината е нечитлив: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Директориумот на локалите е нечитлив: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ðеважечки SSL-Ñервер. Дозволени Ñе најмногу 255 знаци"
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Веб-Ñтраница"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "ОпÑлужувач"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Име на домаќинот на Ñерверот на веб-Ñтраницата"
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Патека"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Патека на веб-Ñтраницата"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Патека до локалите"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Патека до директориумот на локалите"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "ИнтереÑни URL-адреÑи"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Да кориÑтам интереÑни (почитливи и повпечатливи) URL-адреÑи?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Тема"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Сервер на темата"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Патека до темата"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Директориум на темата"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ðватари"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Сервер на аватарот"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Патека на аватарот"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Директориум на аватарот"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Позадини"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Сервер на позаднината"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Патека до позадината"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Директориум на позадината"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикогаш"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Понекогаш"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Секогаш"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "КориÑти SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Кога Ñе кориÑти SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-Ñервер"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Сервер, кому ќе му Ñе иÑпраќаат SSL-барања"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Зачувај патеки"
@@ -2535,11 +2701,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 ""
@@ -2566,13 +2732,13 @@ 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 "Цело име"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Домашна Ñтраница"
@@ -2594,8 +2760,8 @@ msgid "Bio"
msgstr "Биографија"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Локација"
@@ -2621,7 +2787,7 @@ msgstr ""
"Ознаки за Ð’Ð°Ñ Ñамите (букви, бројки, -, . и _), одделени Ñо запирка или "
"празно меÑто"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Јазик"
@@ -2649,7 +2815,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Биографијата е преголема (највеќе до %d знаци)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Ðе е избрана чаÑовна зона."
@@ -2662,23 +2828,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 "Ðагодувањата Ñе зачувани"
@@ -2691,28 +2858,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Канал на јавниот поток (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Канал на јавниот поток (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Канал на јавниот поток (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2720,11 +2887,11 @@ msgid ""
msgstr ""
"Ова е јавната иÑторија за %%site.name%%, но доÑега никој ништо нема објавено."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Создајте ја првата забелешка!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2732,7 +2899,7 @@ msgstr ""
"Зошто не [региÑтрирате Ñметка](%%action.register%%) и Ñтанете првиот "
"објавувач!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2746,7 +2913,7 @@ msgstr ""
"Ñподелувате забелешки за Ñебе Ñо приајтелите, ÑемејÑтвото и колегите! "
"([Прочитајте повеќе](%%doc.help%%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2784,7 +2951,7 @@ msgstr ""
"Зошто не [региÑтрирате Ñметка](%%action.register%%) и Ñтанете прв што ќе "
"објави!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Облак од ознаки"
@@ -2926,8 +3093,7 @@ msgstr "Жалиме, неважечки код за поканата."
msgid "Registration successful"
msgstr "РегиÑтрацијата е уÑпешна"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтрирај Ñе"
@@ -2970,7 +3136,7 @@ msgid "Same as password above. Required."
msgstr "ИÑто што и лозинката погоре. Задолжително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-пошта"
@@ -3077,7 +3243,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 "Претплати Ñе"
@@ -3115,7 +3281,7 @@ msgstr "Ðе можете да повторувате ÑопÑтвена забÐ
msgid "You already repeated that notice."
msgstr "Веќе ја имате повторено таа забелешка."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3123,28 +3289,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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Одговори на %1$s, ÑÑ‚Ñ€. %2$d"
+
+#: 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 "
@@ -3153,7 +3324,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 "
@@ -3162,7 +3333,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 "
@@ -3176,6 +3347,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Одговори на %1$s на %2$s!"
+#: 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 "StatusNet"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Ðе можете да Ñтавате кориÑници во пеÑочен режим на оваа веб-Ñтраница."
@@ -3184,75 +3367,106 @@ msgstr "Ðе можете да Ñтавате кориÑници во пеÑоч
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 "СеÑии"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Ðагодувања на ÑеÑиите за оваа StatusNet веб-Ñтраница."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Раководење Ñо ÑеÑии"
+
+#: 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:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Профил на програмот"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Икона"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Име"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Организација"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "Ñоздал: %1$s - оÑновен приÑтап: %2$s - %3$d кориÑници"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Создадено од %1$s - оÑновен приÑтап: %2$s - %3$d кориÑници"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "ДејÑтва на програмот"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Клуч за промена и тајна"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Инфо за програмот"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Потрошувачки клуч"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Потрошувачка тајна"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "URL на жетонот на барањето"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "URL на приÑтапниот жетон"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Одобри URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3260,26 +3474,37 @@ msgstr ""
"Ðапомена: Поддржуваме HMAC-SHA1 потпиÑи. Ðе поддржуваме потпишување Ñо проÑÑ‚ "
"текÑÑ‚."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Дали Ñте Ñигурни дека Ñакате да го Ñмените вашиот кориÑнички клуч и тајната "
+"фраза?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Омилени забелешки на %1$s, ÑÑ‚Ñ€. %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3288,7 +3513,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 "
@@ -3297,7 +3522,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 "
@@ -3308,7 +3533,7 @@ msgstr ""
"%%action.register%%%%) и потоа објавите нешто интереÑно што кориÑникот би го "
"додал како омилено :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Ова е начин да го Ñподелите она што Ви Ñе допаѓа."
@@ -3317,67 +3542,72 @@ msgstr "Ова е начин да го Ñподелите она што Ви ÑÐ
msgid "%s group"
msgstr "Група %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Група %1$s, ÑÑ‚Ñ€. %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профил на група"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3393,7 +3623,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."
@@ -3406,7 +3636,7 @@ msgstr ""
"Ñлободната програмÑка алатка [StatusNet](http://status.net/). Ðејзините "
"членови Ñи разменуваат кратки пораки за нивниот живот и интереÑи. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -3437,6 +3667,11 @@ msgstr "Избришана забелешка"
msgid " tagged %s"
msgstr " означено Ñо %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, ÑÑ‚Ñ€. %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3462,12 +3697,12 @@ msgstr "Канал Ñо забелешки за %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF за %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Ова е иÑторијата за %1$s, но %2$s Ñè уште нема објавено ништо."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3475,7 +3710,7 @@ msgstr ""
"Имате видено нешто интереÑно во поÑледно време? Сè уште немате објавено "
"ниедна забелешка, но Ñега е добро време за да почнете :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3484,7 +3719,7 @@ msgstr ""
"Можете да го подбуцнете кориÑникот %1$s или [да објавите нешто што Ñакате да "
"го прочита](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3498,7 +3733,7 @@ msgstr ""
"register%%%%) за да можете да ги Ñледите забелешките на **%s** и многу "
"повеќе! ([Прочитајте повеќе](%%%%doc.help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3509,7 +3744,7 @@ msgstr ""
"(http://mk.wikipedia.org/wiki/Микроблогирање) базирана на Ñлободната "
"програмÑка алатка [StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Повторувања на %s"
@@ -3523,205 +3758,137 @@ msgid "User is already silenced."
msgstr "КориÑникот е веќе замолчен."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "ОÑновни нагодувања за оваа StatusNet веб-Ñтраница."
+msgid "Basic settings for this StatusNet site"
+msgstr "ОÑновни поÑтавки за оваа StatusNet веб-Ñтраница."
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Должината на името на веб-Ñтраницата не може да изнеÑува нула."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Мора да имате важечка контактна е-поштенÑка адреÑа."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Ðепознат јазик „%s“"
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Ðеважечки URL за извештај од Ñнимката."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Ðеважечка вредноÑÑ‚ на пуштањето на Ñнимката."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "ЧеÑтотата на Ñнимките мора да биде бројка."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничување на текÑтот изнеÑува 140 знаци."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничувањето на дуплирањето мора да изнеÑува барем 1 Ñекунда."
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Општи"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на веб-Ñтраницата"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Името на Вашата веб-Ñтраница, како на пр. „Микроблог на Вашафирма“"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Овозможено од"
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"ТекÑÑ‚ за врÑката за наведување на авторите во долната колонцифра на Ñекоја "
"Ñтраница"
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-адреÑа на овозможувачот на уÑлугите"
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL-адреÑата која е кориÑти за врÑки за автори во долната колоцифра на "
"Ñекоја Ñтраница"
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна е-пошта за Вашата веб-Ñтраница"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локално"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ОÑновна чаÑовна зона"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Матична чаÑовна зона за веб-Ñтраницата; обично UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "ОÑновен јазик"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL-адреÑи"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr "Јазик на веб-Ñтраницата ако прелиÑтувачот не може да го препознае Ñам"
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "ОпÑлужувач"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Име на домаќинот на Ñерверот на веб-Ñтраницата"
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "ИнтереÑни URL-адреÑи"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Да кориÑтам интереÑни (почитливи и повпечатливи) URL-адреÑи?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "ПриÑтап"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Приватен"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-"Да им забранам на анонимните (ненајавени) кориÑници да ја гледаат веб-"
-"Ñтраницата?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Само Ñо покана"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "РегиÑтрирање Ñамо Ñо покана."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Затворен"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Оневозможи нови региÑтрации."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "По ÑлучајноÑÑ‚ во текот на поÑета"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Во зададена задача"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Снимки од податоци"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Кога да им Ñе иÑпраќаат ÑтатиÑтички податоци на status.net Ñерверите"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "ЧеÑтота"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ќе Ñе иÑпраќаат Ñнимки на Ñекои N поÑети"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "URL на извештајот"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимките ќе Ñе иÑпраќаат на оваа URL-адреÑа"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ограничувања"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ограничување на текÑтот"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимален број на знаци за забелешки."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ограничување на дуплирањето"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Колку долго треба да почекаат кориÑниците (во Ñекунди) за да можат повторно "
"да го објават иÑтото."
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Зачувај нагодувања на веб-Ñтраницата"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Објава на Ñтраница"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Уреди објава за цела веб-Ñтраница"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Ðе можам да ја зачувам објавата за веб-Ñтраницата."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Објавата за цела веб-Ñтраница не треба да има повеќе од 255 знаци"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "ТекÑÑ‚ на објавата за веб-Ñтраницата"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"ТекÑÑ‚ за главна објава по цела веб-Ñтраница (највеќе до 255 знаци; дозволено "
+"и HTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Зачувај ја објавава"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3822,19 +3989,87 @@ 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 "Ðеважечки 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
+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 "Претплатено"
@@ -3898,7 +4133,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 "
@@ -3913,30 +4148,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:86
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Забелешки означени Ñо %1$s, ÑÑ‚Ñ€. %2$d"
+
+#: 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)"
@@ -3954,7 +4194,8 @@ msgstr "Означи %s"
msgid "User profile"
msgstr "КориÑнички профил"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Фото"
@@ -3989,7 +4230,7 @@ msgstr "Со овој образец додавајте ознаки во Ваш
msgid "No such tag."
msgstr "Ðема таква ознака."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API-методот е во изработка."
@@ -4013,7 +4254,7 @@ msgstr "Во барањето нема id на профилот."
msgid "Unsubscribed"
msgstr "Претплатата е откажана"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4021,12 +4262,13 @@ 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 веб-Ñтраница."
@@ -4088,26 +4330,6 @@ msgstr "Поканите Ñе овозможени"
msgid "Whether to allow users to invite new users."
msgstr "Дали да им е дозволено на кориÑниците да канат други кориÑници."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "СеÑии"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Раководење Ñо ÑеÑии"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Дали Ñамите да Ñи раководиме Ñо ÑеÑиите."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Поправка на грешки во ÑеÑија"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Вклучи извод од поправка на грешки за ÑеÑии."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Одобрете ја претплатата"
@@ -4122,36 +4344,36 @@ msgstr ""
"за забелешките на овој кориÑник. Ðко не Ñакате да Ñе претплатите, едноÑтавно "
"кликнете на „Одбиј“"
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Лиценца"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Прифати"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Претплати Ñе на кориÑников"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Одбиј"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Одбиј ја оваа претплата"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ðема барање за проверка!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Претплатата е одобрена"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4161,11 +4383,11 @@ msgstr ""
"инÑтрукциите на веб-Ñтраницата за да дознаете како Ñе одобрува претплата. "
"Жетонот на Вашата претплата е:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Претплатата е одбиена"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4175,37 +4397,37 @@ msgstr ""
"инÑтрукциите на веб-Ñтраницата за да дознаете како Ñе одбива претплата во "
"потполноÑÑ‚."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "URI-то на Ñледачот „%s“ не е пронајдено тука."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "Следениот URI „%s“ е предолг."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "Следеното URI „%s“ е за локален кориÑник."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "Профилната URL-адреÑа „%s“ е за локален кориÑник."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "URL-адреÑата „%s“ за аватар е неважечка."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Ðе можам да ја прочитам URL на аватарот „%s“."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Погрешен тип на Ñлика за URL на аватарот „%s“."
@@ -4226,22 +4448,33 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Добар апетит!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Групи %1$s, ÑÑ‚Ñ€. %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4256,10 +4489,6 @@ msgstr ""
"Оваа веб-Ñтраница работи на %1$s верзија %2$s, ÐвторÑки права 2008-2010 "
"StatusNet, Inc. и учеÑници."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "УчеÑници"
@@ -4301,7 +4530,7 @@ msgstr ""
msgid "Plugins"
msgstr "Приклучоци"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Верзија"
@@ -4341,6 +4570,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"
@@ -4358,27 +4591,27 @@ msgstr "Ðе можев да ја иÑпратам пораката."
msgid "Could not update message with new URI."
msgstr "Ðе можев да ја подновам пораката Ñо нов URI."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознака: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблем Ñо зачувувањето на белешката. Премногу долго."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблем Ñо зачувувањето на белешката. Ðепознат кориÑник."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Премногу забелњшки за прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4386,37 +4619,73 @@ msgstr ""
"Премногу дуплирани пораки во прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забрането Ви е да објавувате забелешки на оваа веб-Ñтраница."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем во зачувувањето на белешката."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Одговор од внеÑот во базата: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Проблем при зачувувањето на групното приемно Ñандаче."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ðе можете да го избришете OMB-жетонот за претплата."
+
+#: 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 "Смени профилни нагодувања"
@@ -4454,124 +4723,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Страница без наÑлов"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Главна навигација"
-#: lib/action.php:433
-msgid "Home"
-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
-msgid "Personal profile and friends timeline"
-msgstr "Личен профил и иÑторија на пријатели"
+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:438
-msgid "Connect"
-msgstr "Поврзи Ñе"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Поврзи Ñе Ñо уÑлуги"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Поврзи Ñе"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Промена на конфигурацијата на веб-Ñтраницата"
+msgstr "Промена на поÑтавките на веб-Ñтраницата"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Покани"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ðдмин"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Одјави Ñе"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Покани"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Одјава"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Помош"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Ðајава"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ðапомош!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Барај"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помош"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пребарајте луѓе или текÑÑ‚"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Локални прегледи"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Ðапомена за Ñтраницата"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Споредна навигација"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помош"
+
+#: lib/action.php:754
msgid "About"
msgstr "За"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧПП"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "УÑлови"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПриватноÑÑ‚"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Изворен код"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Значка"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценца на програмот StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4580,12 +4895,12 @@ msgstr ""
"**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање што ви го овозможува [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4596,130 +4911,211 @@ msgstr ""
"верзија %s, доÑтапен пд [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценца на Ñодржините на веб-Ñтраницата"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Содржината и податоците на %1$s Ñе лични и доверливи."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
+"ÐвторÑките права на Ñодржината и податоците Ñе во ÑопÑтвеноÑÑ‚ на %1$s. Сите "
+"права задржани."
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"ÐвторÑките права на Ñодржината и податоците им припаѓаат на учеÑниците. Сите "
+"права задржани."
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Сите "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "лиценца."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Прелом на Ñтраници"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "По"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "КориÑник"
+
+#. 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 "Конфигурација на патеки"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Конфигурација на ÑеÑиите"
+
+#. 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 ""
+"API-реÑурÑот бара да може и да чита и да запишува, а вие можете Ñамо да "
+"читате."
+
+#: 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"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Уреди програм"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Икона за овој програм"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Опишете го програмот Ñо %d знаци"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Опишете го Вашиот програм"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "Изворна URL-адреÑа"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "URL на Ñтраницата на програмот"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "Организацијата одговорна за овој програм"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "URL на Ñтраницата на организацијата"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "URL за пренаÑочување по заверката"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "ПрелиÑтувач"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "Работна површина"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Тип на програм, прелиÑтувач или работна површина"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Само читање"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Читање-пишување"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"ОÑновно-зададен приÑтап за овој програм: Ñамо читање, или читање-пишување"
@@ -4748,11 +5144,11 @@ msgstr "Забелешки кадешто Ñе јавува овој прилоÐ
msgid "Tags for this attachment"
msgstr "Ознаки за овој прилог"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Менувањето на лозинката не уÑпеа"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Менувањето на лозинка не е дозволено"
@@ -4906,80 +5302,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"
@@ -4993,6 +5398,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"
@@ -5057,19 +5463,19 @@ msgstr ""
"tracks - Ñè уште не е имплементирано.\n"
"tracking - Ñè уште не е имплементирано.\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ðема пронајдено конфигурациÑка податотека. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Побарав конфигурациони податотеки на Ñледниве меÑта: "
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Препорачуваме да го пуштите инÑталатерот за да го поправите ова."
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Оди на инÑталаторот."
@@ -5105,8 +5511,8 @@ msgstr "Подигни податотека"
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-"Ðе можете да подигнете личната позадинÑка Ñлика. МакÑималната дозволена "
-"големина изнеÑува 2МБ."
+"Можете да подигнете лична позадинÑка Ñлика. МакÑималната дозволена големина "
+"изнеÑува 2МБ."
#: lib/designsettings.php:418
msgid "Design defaults restored."
@@ -5168,6 +5574,11 @@ msgstr "Одберете ознака за да ја уточните лиÑта
msgid "Go"
msgstr "Оди"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Додели улога „%s“ на кориÑников"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL на Ñтраницата или блогот на групата или темата"
@@ -5259,32 +5670,32 @@ 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 "кб"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Ðепознат извор на приемна пошта %d."
@@ -5567,7 +5978,7 @@ msgstr ""
"впуштите во разговор Ñо други кориÑници. Луѓето можат да ви иÑпраќаат пораки "
"што ќе можете да ги видите Ñамо Вие."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "од"
@@ -5662,6 +6073,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 "ИÑпрати забелешка"
@@ -5695,48 +6111,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "во контекÑÑ‚"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено од"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Одговори на забелешкава"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Одговор"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Забелешката е повторена"
@@ -5768,11 +6184,7 @@ msgstr "Грешка во внеÑувањето на оддалечениот Ð
msgid "Duplicate notice"
msgstr "Дуплирај забелешка"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Блокирани Ñте од претплаќање."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе може да Ñе внеÑе нова претплата."
@@ -5788,19 +6200,19 @@ msgstr "Одговори"
msgid "Favorites"
msgstr "Омилени"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Примени"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Ваши приемни пораки"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "За праќање"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Ваши иÑпратени пораки"
@@ -5813,7 +6225,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 "Претплати"
@@ -5821,23 +6233,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 "Сите групи"
@@ -5877,6 +6289,15 @@ msgstr "Да ја повторам белешкава?"
msgid "Repeat this notice"
msgstr "Повтори ја забелешкава"
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Одземи му ја улогата „%s“ на кориÑников"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "Ðе е зададен кориÑник за еднокориÑничкиот режим."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "ПеÑок"
@@ -5893,6 +6314,10 @@ msgstr "Пребарај по веб-Ñтраницата"
msgid "Keyword(s)"
msgstr "Клучен збор"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Барај"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Помош Ñо пребарување"
@@ -5944,34 +6369,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
@@ -6023,67 +6428,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "пред еден чаÑ"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "пред %d чаÑа"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "пред еден меÑец"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "пред %d меÑеца"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "пред една година"
@@ -6097,7 +6516,7 @@ msgstr "%s не е важечка боја!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s не е важечка боја! КориÑтете 3 или 6 шеÑнаеÑетни (hex) знаци."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index 697fda7b0..61e5cfdcd 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,23 +9,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:06+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:06+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Tilgang"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Innstillinger for nettstedstilgang"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registrering"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
+
+#. 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."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Kun invitasjon"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Deaktiver nye registreringer."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Lukket"
+
+#. 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/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
@@ -33,57 +94,64 @@ msgstr "Ingen slik side"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 og venner"
+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 "
@@ -92,17 +160,18 @@ msgstr ""
"Prøv å abbonere på flere personer, [bli med i en gruppe](%%action.groups%%) "
"eller post noe selv."
-#: actions/all.php:134
-#, fuzzy, php-format
+#. 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 ""
-"Du kan prøve å [knuffe %s](../%s) fra dennes profil eller [post noe for å få "
-"hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%"
-"s)."
+"Du kan prøve å [knuffe %1$s](../%2$s) fra dennes profil eller [poste noe for "
+"å få hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?"
+"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -111,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!"
@@ -126,22 +196,22 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -157,7 +227,7 @@ msgstr "API-metode ikke funnet!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Denne metoden krever en POST."
@@ -176,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."
@@ -188,7 +259,7 @@ msgstr "Klarte ikke å lagre profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -204,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."
@@ -271,18 +342,16 @@ msgid "No status found with that ID."
msgstr "Fant ingen status med den ID-en."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite."
-msgstr "Denne statusen er allerede en favoritt!"
+msgstr "Denne statusen er allerede en favoritt."
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "Kunne ikke opprette favoritt."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite."
-msgstr "Den statusen er ikke en favoritt!"
+msgstr "Den statusen er ikke en favoritt."
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -302,119 +371,114 @@ msgid "Could not unfollow user: User not found."
msgstr "Kunne ikke slutte å følge brukeren: Fant ikke brukeren."
#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
msgid "You cannot unfollow yourself."
-msgstr "Du kan ikke slutte å følge deg selv!"
+msgstr "Du kan ikke slutte å følge deg selv."
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "To bruker ID-er eller kallenavn må oppgis."
-#: actions/apifriendshipsshow.php:135
-#, fuzzy
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke bestemme kildebruker."
-#: actions/apifriendshipsshow.php:143
-#, fuzzy
+#: actions/apifriendshipsshow.php:142
msgid "Could not find target user."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke finne målbruker."
-#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
+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
-#, fuzzy, php-format
+#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Ugyldig hjemmeside '%s'"
+msgstr "Ugyldig alias: «%s»"
-#: actions/apigroupcreate.php:273 actions/editgroup.php:228
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Det nicket er allerede i bruk. Prøv et annet."
+msgstr "Aliaset «%s» er allerede i bruk. Prøv et annet."
-#: actions/apigroupcreate.php:286 actions/editgroup.php:234
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "Alias kan ikke være det samme som kallenavn."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
-#, fuzzy
msgid "Group not found!"
-msgstr "API-metode ikke funnet!"
+msgstr "Gruppe ikke funnet!"
-#: actions/apigroupjoin.php:110 actions/joingroup.php:90
+#: 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 ""
+msgstr "Du har blitt blokkert fra den gruppen av administratoren."
-#: actions/apigroupjoin.php:138 actions/joingroup.php:124
-#, fuzzy, php-format
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
+#, php-format
msgid "Could not join user %1$s to group %2$s."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
#: actions/apigroupleave.php:114
-#, fuzzy
msgid "You are not a member of this group."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er ikke et medlem av denne gruppen."
-#: actions/apigroupleave.php:124 actions/leavegroup.php:119
-#, fuzzy, php-format
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
+#, php-format
msgid "Could not remove user %1$s from group %2$s."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s."
#: actions/apigrouplist.php:95
#, php-format
@@ -424,182 +488,182 @@ msgstr "%s sine grupper"
#: actions/apigrouplistall.php:90 actions/usergroups.php:62
#, php-format
msgid "%s groups"
-msgstr ""
+msgstr "%s grupper"
#: actions/apigrouplistall.php:94
#, php-format
msgid "groups on %s"
-msgstr ""
+msgstr "grupper på %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Ingen verdi for oauth_token er oppgitt."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Ugyldig symbol."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "Ugyldig brukernavn eller passord"
+msgstr "Ugyldig kallenavn / passord!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
-msgstr ""
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "Databasefeil ved sletting av bruker fra programmet OAuth."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
-msgstr ""
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Databasefeil ved innsetting av bruker i programmet OAuth."
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: 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:273
+#: 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:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
+msgstr "Tillat eller nekt tilgang"
+
+#: 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 ""
+"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:320 lib/action.php:435
-#, fuzzy
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
-msgstr "Om"
+msgstr "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Nick"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Passord"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr ""
+msgstr "Nekt"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
-msgstr ""
+msgstr "Tillat"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Tillat eller nekt tilgang til din kontoinformasjon."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
-msgstr ""
+msgstr "Denne metoden krever en POST eller DELETE."
#: actions/apistatusesdestroy.php:130
msgid "You may not delete another user's status."
-msgstr ""
+msgstr "Du kan ikke slette statusen til en annen bruker."
#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
#: actions/deletenotice.php:52 actions/shownotice.php:92
msgid "No such notice."
-msgstr ""
+msgstr "Ingen slik notis."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "Kan ikke slette notisen."
+msgstr "Kan ikke gjenta din egen notis."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "Kan ikke slette notisen."
+msgstr "Allerede gjentatt den notisen."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
-msgstr ""
+msgstr "Status slettet."
#: actions/apistatusesshow.php:144
msgid "No status with that ID found."
-msgstr ""
+msgstr "Ingen status med den ID-en funnet."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
+msgstr "Det er for langt. Maks notisstørrelse er %d tegn."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
-msgstr ""
+msgstr "Ikke funnet"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: 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
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%1$s / Oppdateringer som svarer til %2$s"
-
-#: actions/apitimelinefavorites.php:120
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%1$s oppdateringer som svarer på oppdateringer fra %2$s / %3$s."
-
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:131 actions/userrss.php:90
#, php-format
-msgid "%s timeline"
-msgstr "%s tidslinje"
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Favoritter fra %2$s"
-#: actions/apitimelinegroup.php:117 actions/apitimelineuser.php:126
-#: actions/userrss.php:92
+#: actions/apitimelinefavorites.php:117
#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
#: actions/apitimelinementions.php:117
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Oppdateringer som svarer til %2$s"
+msgstr "%1$s / Oppdateringer som nevner %2$s"
#: actions/apitimelinementions.php:127
#, php-format
@@ -616,57 +680,50 @@ msgstr "%s offentlig tidslinje"
msgid "%s updates from everyone!"
msgstr "%s oppdateringer fra alle sammen!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
-msgstr "Svar til %s"
+msgstr "Gjentatt til %s"
-#: actions/apitimelineretweetsofme.php:112
-#, fuzzy, php-format
+#: 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 ""
+msgstr "Notiser merket med %s"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
-#, fuzzy, php-format
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#, php-format
msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Mikroblogg av %s"
+msgstr "Oppdateringer merket med %1$s på %2$s!"
#: actions/apiusershow.php:96
-#, fuzzy
msgid "Not found."
-msgstr "Ingen id."
+msgstr "Ikke funnet."
#: actions/attachment.php:73
msgid "No such attachment."
-msgstr ""
+msgstr "Ingen slike vedlegg."
#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
#: 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 ""
+msgstr "Ingen kallenavn."
#: actions/avatarbynickname.php:64
msgid "No size."
-msgstr ""
+msgstr "Ingen størrelse."
#: actions/avatarbynickname.php:69
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"
@@ -674,51 +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 ""
+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 ""
+msgstr "Forhåndsvis"
-#: actions/avatarsettings.php:149 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
-#, fuzzy
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
msgid "Delete"
-msgstr "slett"
+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 ""
+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."
@@ -726,21 +781,19 @@ 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
-#, fuzzy
msgid "You already blocked that user."
-msgstr "Du er allerede logget inn!"
+msgstr "Du har allerede blokkert den brukeren."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
-msgstr ""
+msgstr "Blokker brukeren"
#: actions/block.php:130
msgid ""
@@ -748,75 +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/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
+#: actions/groupblock.php:178
msgid "No"
-msgstr ""
+msgstr "Nei"
-#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
+#: actions/block.php:143 actions/deleteuser.php:150
msgid "Do not block this user"
-msgstr "Kan ikke slette notisen."
+msgstr "Ikke blokker denne brukeren"
-#: actions/block.php:144 actions/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
-msgstr ""
+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
-#, fuzzy
+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 "Klarte ikke å lagre profil."
+msgstr "Ingen slik gruppe."
-#: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:97
+#, php-format
msgid "%s blocked profiles"
-msgstr "Klarte ikke å lagre profil."
+msgstr "%s blokkerte profiler"
-#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#: actions/blockedfromgroup.php:100
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s og venner"
+msgstr "%1$s blokkerte profiler, side %2$d"
-#: actions/blockedfromgroup.php:108
+#: 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."
@@ -824,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
@@ -846,34 +905,74 @@ 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
-#, fuzzy
msgid "Confirm address"
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
-#, fuzzy
msgid "Conversation"
-msgstr "Bekreftelseskode"
+msgstr "Samtale"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
+msgstr "Notiser"
+
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Du må være innlogget for å slette et program."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Program ikke funnet."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
msgstr ""
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Slett program"
+
+#: 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 ""
+"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
+msgid "Do not delete this application"
+msgstr "Ikke slett dette programmet"
+
+#: actions/deleteapplication.php:160
+msgid "Delete this application"
+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."
@@ -887,52 +986,51 @@ 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"
-msgstr ""
+msgstr "Slett notis"
#: actions/deletenotice.php:144
msgid "Are you sure you want to delete this notice?"
msgstr "Er du sikker på at du vil slette denne notisen?"
#: actions/deletenotice.php:145
-#, fuzzy
msgid "Do not delete this notice"
-msgstr "Kan ikke slette notisen."
+msgstr "Ikke slett denne notisen"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
-msgstr ""
+msgstr "Slett denne notisen"
#: actions/deleteuser.php:67
-#, fuzzy
msgid "You cannot delete users."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Du kan ikke slette brukere."
#: actions/deleteuser.php:74
-#, fuzzy
msgid "You can only delete local users."
-msgstr "Ugyldig OpenID"
+msgstr "Du kan bare slette lokale brukere."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
msgid "Delete user"
-msgstr "slett"
+msgstr "Slett bruker"
-#: actions/deleteuser.php:135
+#: 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
-#, fuzzy
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
-msgstr "Kan ikke slette notisen."
+msgstr "Slett denne brukeren"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
-#: lib/adminpanelaction.php:316 lib/groupnav.php:119
+#: lib/groupnav.php:119
msgid "Design"
msgstr ""
@@ -941,46 +1039,42 @@ 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
-#, fuzzy
msgid "Change logo"
-msgstr "Endre passordet ditt"
+msgstr "Endre logo"
#: actions/designadminpanel.php:380
msgid "Site logo"
-msgstr ""
+msgstr "Nettstedslogo"
#: actions/designadminpanel.php:387
-#, fuzzy
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"
-msgstr ""
+msgstr "Endre bakgrunnsbilde"
#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Bakgrunn"
#: actions/designadminpanel.php:427
#, php-format
@@ -988,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"
@@ -1010,9 +1105,8 @@ msgid "Change colours"
msgstr "Endre farger"
#: actions/designadminpanel.php:510 lib/designsettings.php:191
-#, fuzzy
msgid "Content"
-msgstr "Koble til"
+msgstr "Innhold"
#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
@@ -1029,7 +1123,7 @@ msgstr "Lenker"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Bruk standard"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
@@ -1037,16 +1131,17 @@ 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:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1056,90 +1151,79 @@ 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"
-msgstr ""
+msgstr "Legg til i favoritter"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr ""
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Inget slikt dokument «%s»"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+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"
-
-#: 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 må være innlogget for å redigere et program."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Ingen slik side"
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
+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."
-msgstr ""
+msgstr "Navn kreves."
-#: actions/editapplication.php:180 actions/newapplication.php:162
-#, fuzzy
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
-msgstr "Beklager, navnet er for langt (max 250 tegn)."
+msgstr "Navn er for langt (maks 250 tegn)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
-#, fuzzy
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Navn allerede i bruk. Prøv et annet."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
-msgstr "Alle abonnementer"
+msgstr "Beskrivelse kreves."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "Kilde-URL er for lang."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "Hjemmesiden er ikke en gyldig URL."
+msgstr "Kilde-URL er ikke gyldig."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "Organisasjon kreves."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Beskrivelsen er for lang (maks %d tegn)."
+msgstr "Organisasjon er for lang (maks 255 tegn)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Klarte ikke å oppdatere bruker."
@@ -1147,50 +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 ""
+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
-#, fuzzy, php-format
+#: actions/editgroup.php:205 actions/newgroup.php:145
+#, php-format
msgid "description is too long (max %d chars)."
-msgstr "Bioen er for lang (max 140 tegn)"
+msgstr "beskrivelse er for lang (maks %d tegn)"
-#: actions/editgroup.php:253
-#, fuzzy
+#: actions/editgroup.php:258
msgid "Could not update group."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke oppdatere gruppe."
-#: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+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
@@ -1216,19 +1296,18 @@ msgstr ""
"melding med videre veiledning."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Avbryt"
#: actions/emailsettings.php:121
-#, fuzzy
msgid "Email address"
msgstr "E-postadresse"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
-msgstr ""
+msgstr "E-postadresse («brukernavn@eksempel.org»)"
#: actions/emailsettings.php:126 actions/imsettings.php:133
#: actions/smssettings.php:145
@@ -1254,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."
@@ -1287,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."
@@ -1298,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ugyldig e-postadresse."
@@ -1310,7 +1389,7 @@ msgstr "Det er allerede din e-postadresse."
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr ""
@@ -1344,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."
@@ -1371,15 +1450,15 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr ""
+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."
@@ -1440,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!"
@@ -1463,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."
@@ -1480,14 +1558,31 @@ msgid "Error updating remote profile"
msgstr ""
#: actions/getfile.php:79
-#, fuzzy
msgid "No such file."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Ingen slik fil."
#: actions/getfile.php:83
-#, fuzzy
msgid "Cannot read file."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Kan ikke lese fil."
+
+#: actions/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
@@ -1519,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1544,102 +1639,106 @@ msgid "Database error blocking user from group."
msgstr ""
#: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
-msgstr "Ingen id."
+msgstr "Ingen ID."
#: actions/groupdesignsettings.php:68
msgid "You must be logged in to edit a group."
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 ""
+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
-#, fuzzy
+#: actions/grouplogo.php:399
msgid "Logo updated."
-msgstr "Avataren har blitt oppdatert."
+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 ""
+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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Gjør brukeren til en administrator for gruppen"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Gjør til administrator"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1647,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
@@ -1660,9 +1759,8 @@ msgid ""
msgstr ""
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
-#, fuzzy
msgid "Create a new group"
-msgstr "Opprett en ny konto"
+msgstr "Opprett en ny gruppe"
#: actions/groupsearch.php:52
#, php-format
@@ -1672,14 +1770,13 @@ msgid ""
msgstr ""
#: actions/groupsearch.php:58
-#, fuzzy
msgid "Group search"
-msgstr "Tekst-søk"
+msgstr "Gruppesøk"
#: actions/groupsearch.php:79 actions/noticesearch.php:117
#: actions/peoplesearch.php:83
msgid "No results."
-msgstr ""
+msgstr "Ingen resultat."
#: actions/groupsearch.php:82
#, php-format
@@ -1705,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
@@ -1797,10 +1894,15 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Det er ikke din Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Innboks for %1$s - side %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
-msgstr ""
+msgstr "Innboks for %s"
#: actions/inbox.php:115
msgid "This is your inbox, which lists your incoming private messages."
@@ -1808,7 +1910,7 @@ msgstr ""
#: actions/invite.php:39
msgid "Invites have been disabled."
-msgstr ""
+msgstr "Invitasjoner har blitt deaktivert."
#: actions/invite.php:41
#, php-format
@@ -1818,15 +1920,15 @@ msgstr ""
#: actions/invite.php:72
#, php-format
msgid "Invalid email address: %s"
-msgstr ""
+msgstr "Ugyldig e-postadresse: %s"
#: actions/invite.php:110
msgid "Invitation(s) sent"
-msgstr ""
+msgstr "Invitasjon(er) sendt"
#: actions/invite.php:112
msgid "Invite new users"
-msgstr ""
+msgstr "Inviter nye brukere"
#: actions/invite.php:128
msgid "You are already subscribed to these users:"
@@ -1835,7 +1937,7 @@ msgstr ""
#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
#, php-format
msgid "%1$s (%2$s)"
-msgstr ""
+msgstr "%1$s (%2$s)"
#: actions/invite.php:136
msgid ""
@@ -1844,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 ""
@@ -1859,7 +1961,7 @@ msgstr ""
#: actions/invite.php:187
msgid "Email addresses"
-msgstr ""
+msgstr "E-postadresser"
#: actions/invite.php:189
msgid "Addresses of friends to invite (one per line)"
@@ -1867,22 +1969,25 @@ msgstr "Adresser til venner som skal inviteres (én per linje)"
#: actions/invite.php:192
msgid "Personal message"
-msgstr ""
+msgstr "Personlig melding"
#: actions/invite.php:194
msgid "Optionally add a personal message to the invitation."
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"
@@ -1936,9 +2041,14 @@ msgstr ""
#: actions/joingroup.php:60
msgid "You must be logged in to join a group."
-msgstr ""
+msgstr "Du må være innlogget for å bli med i en gruppe."
+
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+#, fuzzy
+msgid "No nickname or ID."
+msgstr "Ingen kallenavn."
-#: actions/joingroup.php:131
+#: actions/joingroup.php:141
#, php-format
msgid "%1$s joined group %2$s"
msgstr ""
@@ -1947,14 +2057,14 @@ 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
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%1$s sin status på %2$s"
+msgstr "%1$s forlot gruppe %2$s"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -1969,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logg inn"
@@ -2004,32 +2113,33 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Du er allerede logget inn!"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Klarte ikke å oppdatere bruker."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Gjør brukeren til en administrator for gruppen"
#: actions/microsummary.php:69
msgid "No current status"
-msgstr ""
+msgstr "Ingen nåværende status"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Ingen slik side"
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2039,11 +2149,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Klarte ikke å lagre avatar-informasjonen"
@@ -2146,11 +2256,11 @@ msgstr ""
#: actions/nudge.php:94
msgid "Nudge sent"
-msgstr ""
+msgstr "Knuff sendt"
#: actions/nudge.php:97
msgid "Nudge sent!"
-msgstr ""
+msgstr "Knuff sendt!"
#: actions/oauthappssettings.php:59
msgid "You must be logged in to list your applications."
@@ -2169,29 +2279,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Du er allerede logget inn!"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2206,14 +2316,14 @@ msgstr "%1$s sin status på %2$s"
#: actions/oembed.php:157
msgid "content type "
-msgstr ""
+msgstr "innholdstype "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Bare "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2226,9 +2336,8 @@ msgid "Notice Search"
msgstr ""
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
-msgstr "Innstillinger for IM"
+msgstr "Andre innstillinger"
#: actions/othersettings.php:71
msgid "Manage various other options."
@@ -2282,28 +2391,31 @@ msgstr "Nytt nick"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Utboks for %1$s - side %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
-msgstr ""
+msgstr "Utboks for %s"
#: actions/outbox.php:116
msgid "This is your outbox, which lists private messages you have sent."
-msgstr ""
+msgstr "Dette er utboksen din som viser alle private meldinger du har sendt."
#: actions/passwordsettings.php:58
msgid "Change password"
msgstr "Endre passord"
#: actions/passwordsettings.php:69
-#, fuzzy
msgid "Change your password."
-msgstr "Endre passord"
+msgstr "Endre passordet ditt."
#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
msgid "Password change"
-msgstr "Passordet ble lagret"
+msgstr "Endre passord"
#: actions/passwordsettings.php:104
msgid "Old password"
@@ -2324,7 +2436,7 @@ msgstr "Bekreft"
#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
msgid "Same as password above"
-msgstr ""
+msgstr "Samme som passord ovenfor"
#: actions/passwordsettings.php:117
msgid "Change"
@@ -2332,11 +2444,11 @@ msgstr "Endre"
#: actions/passwordsettings.php:154 actions/register.php:230
msgid "Password must be 6 or more characters."
-msgstr ""
+msgstr "Passord må være minst 6 tegn."
#: actions/passwordsettings.php:157 actions/register.php:233
msgid "Passwords don't match."
-msgstr ""
+msgstr "Passordene var ikke like."
#: actions/passwordsettings.php:165
msgid "Incorrect old password"
@@ -2354,7 +2466,8 @@ msgstr "Klarer ikke å lagre nytt passord."
msgid "Password saved."
msgstr "Passordet ble lagret"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2362,138 +2475,152 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Tjener"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Brukerbilde"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Innstillinger for IM"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Brukerbildet har blitt oppdatert."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Brukerbildet har blitt oppdatert."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
-msgstr ""
+msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
-#, fuzzy
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
-msgstr "Gjenopprett"
+msgstr "Aldri"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
-msgstr ""
+msgstr "Noen ganger"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
-msgstr ""
+msgstr "Alltid"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
-msgstr ""
+msgstr "Bruk SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Gjenopprett"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr ""
@@ -2518,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 ""
@@ -2545,13 +2672,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Hjemmesiden"
@@ -2574,8 +2701,8 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr ""
@@ -2599,13 +2726,13 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
#: actions/profilesettings.php:152
msgid "Preferred language"
-msgstr ""
+msgstr "Foretrukket språk"
#: actions/profilesettings.php:161
msgid "Timezone"
@@ -2613,7 +2740,7 @@ msgstr "Tidssone"
#: actions/profilesettings.php:162
msgid "What timezone are you normally in?"
-msgstr ""
+msgstr "Hvilken tidssone er du vanligvis i?"
#: actions/profilesettings.php:167
msgid ""
@@ -2622,42 +2749,43 @@ msgstr ""
"Abonner automatisk på de som abonnerer på meg (best for ikke-mennesker)"
#: actions/profilesettings.php:228 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
msgid "Bio is too long (max %d chars)."
-msgstr "«Om meg» er for lang (maks 140 tegn)."
+msgstr "«Om meg» er for lang (maks %d tegn)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
-msgstr ""
+msgstr "Tidssone ikke valgt."
#: actions/profilesettings.php:241
msgid "Language is too long (max 50 chars)."
-msgstr ""
+msgstr "Språk er for langt (maks 50 tegn)."
#: actions/profilesettings.php:253 actions/tagother.php:178
#, fuzzy, php-format
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 ""
@@ -2670,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "%s offentlig strøm"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2718,7 +2846,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2751,7 +2879,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2889,8 +3017,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -2904,7 +3031,7 @@ msgstr ""
#: actions/register.php:212
msgid "Email address already exists."
-msgstr ""
+msgstr "E-postadressen finnes allerede."
#: actions/register.php:243 actions/register.php:265
msgid "Invalid username or password."
@@ -2927,10 +3054,10 @@ msgstr "6 eller flere tegn. PÃ¥krevd."
#: actions/register.php:434
msgid "Same as password above. Required."
-msgstr ""
+msgstr "Samme som passord over. Kreves."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -2944,23 +3071,22 @@ msgstr "Lengre navn, helst ditt \"ekte\" navn"
#: actions/register.php:494
msgid "My text and files are available under "
-msgstr ""
+msgstr "Teksten og filene mine er tilgjengelig under "
#: actions/register.php:496
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Navngivelse 3.0"
#: actions/register.php:497
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-"utenom disse private dataene: passord, epost, adresse, lynmeldingsadresse og "
-"telefonnummer."
+" utenom disse private dataene: passord, e-postadresse, lynmeldingsadresse "
+"og telefonnummer."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -2977,20 +3103,20 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Gratulerer, %s! Og velkommen til %%%%site.name%%%%. Herfra vil du "
+"Gratulerer, %1$s! Og velkommen til %%%%site.name%%%%. Herfra vil du "
"kanskje...\n"
"\n"
-"* Gå til [din profil](%s) og sende din første notis.\n"
-"* Legge til en [Jabber/GTalk addresse](%%%%action.imsettings%%%%) så du kan "
-"sende notiser fra lynmeldinger.\n"
-"* [Søke etter brukere](%%%%action.peoplesearch%%%%) that you may know or "
-"that share your interests. \n"
-"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
-"others more about you. \n"
-"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
-"missed. \n"
+"* Gå til [din profil](%2$s) og sende din første melding.\n"
+"* Legge til en [Jabber/GTalk-addresse](%%%%action.imsettings%%%%) så du kan "
+"sende notiser gjennom lynmeldinger.\n"
+"* [Søke etter brukere](%%%%action.peoplesearch%%%%) som du kanskje kjenner "
+"eller deler dine interesser.\n"
+"* Oppdater dine [profilinnstillinger](%%%%action.profilesettings%%%%) for å "
+"fortelle mer om deg til andre.\n"
+"* Les over [hjelpetekstene](%%%%doc.help%%%%) for funksjoner du kan ha gått "
+"glipp av.\n"
"\n"
-"Thanks for signing up and we hope you enjoy using this service."
+"Takk for at du registrerte deg og vi håper du kommer til å like tjenesten."
#: actions/register.php:562
msgid ""
@@ -3033,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 ""
@@ -3071,52 +3197,55 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Du er allerede logget inn!"
-#: actions/repeat.php:114 lib/noticelist.php:629
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "Opprett"
+msgstr "Gjentatt"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Opprett"
+msgstr "Gjentatt!"
-#: actions/replies.php:125 actions/repliesrss.php:68
+#: 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:144
+#: 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:145
#, php-format
msgid "Replies feed for %s (RSS 1.0)"
-msgstr ""
+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 ""
+msgstr "Svarstrøm for %s (RSS 2.0)"
-#: actions/replies.php:158
-#, fuzzy, php-format
+#: actions/replies.php:159
+#, php-format
msgid "Replies feed for %s (Atom)"
-msgstr "Svar til %s"
+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 "
@@ -3127,9 +3256,23 @@ msgstr ""
"s)."
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "Svar til %s"
+msgstr "Svar til %1$s på %2$s!"
+
+#: actions/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"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -3141,116 +3284,155 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Innstillinger for IM"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Ikon"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
-#, fuzzy
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
-msgstr "Nick"
+msgstr "Navn"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
-#, fuzzy
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
-msgstr "Bekreftelseskode"
+msgstr "Organisasjon"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
-#, fuzzy
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
-msgstr "Alle abonnementer"
+msgstr "Beskrivelse"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Opprettet av %1$s - %2$s standardtilgang - %3$d brukere"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Er du sikker på at du vil slette denne notisen?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s og venner"
+
#: actions/showfavorites.php:132
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 "
@@ -3258,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 ""
@@ -3267,70 +3449,75 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Alle abonnementer"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Klarte ikke å lagre profil."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3340,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."
@@ -3349,7 +3536,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3380,6 +3567,11 @@ msgstr ""
msgid " tagged %s"
msgstr "Tagger"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s og venner"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3405,18 +3597,18 @@ msgstr ""
msgid "FOAF for %s"
msgstr "Feed for taggen %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Dette er tidslinjen for %s og venner, men ingen har postet noe enda."
-#: actions/showstream.php:196
+#: 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:198
+#: actions/showstream.php:207
#, fuzzy, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3426,7 +3618,7 @@ msgstr ""
"hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%"
"s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3435,7 +3627,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3443,7 +3635,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Svar til %s"
@@ -3458,200 +3650,134 @@ 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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ugyldig e-postadresse"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Gjenopprett"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Access"
-msgstr "Godta"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr ""
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr ""
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr ""
+msgid "Default language"
+msgstr "Foretrukket språk"
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Notiser"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Kunne ikke lagre dine innstillinger for utseende."
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Slett notis"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
+msgid "Save site notice"
msgstr "Innstillinger for IM"
#: actions/smssettings.php:58
@@ -3751,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 ""
@@ -3825,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 "
@@ -3835,31 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Mikroblogg av %s"
+
+#: 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"
@@ -3878,7 +4077,8 @@ msgstr "Tagger"
msgid "User profile"
msgstr "Klarte ikke å lagre profil."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3911,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."
@@ -3936,18 +4136,19 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4014,26 +4215,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autoriser abonnementet"
@@ -4045,85 +4226,85 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Godta"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr ""
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr ""
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Alle abonnementer"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr ""
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Kan ikke lese brukerbilde-URL «%s»"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -4143,20 +4324,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Alle abonnementer"
+
#: actions/usergroups.php:130
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"
@@ -4169,11 +4361,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Statistikk"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4205,7 +4392,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personlig"
@@ -4246,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"
@@ -4263,63 +4455,103 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 "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"
@@ -4358,126 +4590,184 @@ msgstr "%1$s sin status på %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Hjem"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-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:438
-msgid "Connect to services"
-msgstr ""
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Koble til"
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Logg ut"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Kun invitasjon"
-#: lib/action.php:452
+#. 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:465
+#, fuzzy
+msgctxt "MENU"
+msgid "Logout"
+msgstr "Logg ut"
-#: lib/action.php:457
+#. 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Hjelp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logg inn"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjelp"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Søk"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjelp"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjelp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS/FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Kilde"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4486,12 +4776,12 @@ msgstr ""
"**%%site.name%%** er en mikrobloggingtjeneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er en mikrobloggingtjeneste. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4499,135 +4789,213 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 ""
+
+#. 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 ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#: lib/applicationeditform.php:186
+#. 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 "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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Beskriv degselv og dine interesser med 140 tegn"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Beskriv degselv og dine interesser med 140 tegn"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Kilde"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL til din hjemmeside, blogg, eller profil på annen nettside."
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL til din hjemmeside, blogg, eller profil på annen nettside."
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4657,12 +5025,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Passordet ble lagret"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Passordet ble lagret"
@@ -4814,83 +5182,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"
@@ -4904,6 +5282,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"
@@ -4931,20 +5310,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Fant ikke bekreftelseskode."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5045,6 +5424,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"
@@ -5137,33 +5521,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5368,7 +5752,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"
@@ -5460,6 +5844,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 ""
@@ -5493,50 +5883,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Opprett"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "svar"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Nytt nick"
@@ -5569,11 +5959,7 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5589,19 +5975,19 @@ msgstr "Svar"
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5614,7 +6000,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 ""
@@ -5622,24 +6008,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 ""
@@ -5683,6 +6069,15 @@ msgstr "Kan ikke slette notisen."
msgid "Repeat this notice"
msgstr "Kan ikke slette notisen."
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5701,6 +6096,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"
@@ -5754,34 +6153,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
@@ -5837,68 +6215,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent ett år siden"
@@ -5912,7 +6305,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index 935117671..2b1b48ade 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -10,23 +10,81 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:12+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:21+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Toegang"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Instellingen voor sitetoegang"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registratie"
+
+#. 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
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Geen anonieme toegang"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Registratie alleen op uitnodiging."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Alleen op uitnodiging"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Nieuwe registraties uitschakelen."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Gesloten"
+
+#. 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/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
@@ -35,51 +93,58 @@ msgstr "Deze pagina bestaat niet"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -87,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 "
@@ -96,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 "
@@ -106,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:202
+#: 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 "
@@ -115,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."
@@ -130,22 +197,22 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -160,7 +227,7 @@ msgstr "De API-functie is niet aangetroffen."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Deze methode vereist een POST."
@@ -180,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."
@@ -191,7 +259,7 @@ msgstr "Het was niet mogelijk het profiel op te slaan."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -207,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."
@@ -314,15 +382,15 @@ msgstr "U kunt het abonnement op uzelf niet opzeggen."
msgid "Two user ids or screen_names must be supplied."
msgstr "Er moeten twee gebruikersnamen of ID's opgegeven worden."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Het was niet mogelijk de brongebruiker te bepalen."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -330,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -397,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."
@@ -414,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."
@@ -434,23 +502,27 @@ msgstr "%s groepen"
msgid "groups on %s"
msgstr "groepen op %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Ongeldig verzoek."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Er is geen oauth_token parameter opgegeven."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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."
@@ -458,23 +530,23 @@ msgstr ""
"Er is een probleem ontstaan met uw sessie. Probeer het nog een keer, "
"alstublieft."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Ongeldige gebruikersnaam of wachtwoord."
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr ""
"Er is een databasefout opgetreden tijdens het verwijderen van de OAuth "
"applicatiegebruiker."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr ""
"Er is een databasefout opgetreden tijdens het toevoegen van de OAuth "
"applicatiegebruiker."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
@@ -483,53 +555,65 @@ msgstr ""
"Het verzoektoken %s is geautoriseerd. Wissel het alstublieft uit voor een "
"toegangstoken."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "Het verzoektoken %s is geweigerd."
+msgid "The request token %s has been denied and revoked."
+msgstr "Het verzoektoken %s is geweigerd en ingetrokken."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Het formulier is onverwacht ingezonden."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "Een applicatie vraagt toegang tot uw gebruikersgegevens"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Toegang toestaan of ontzeggen"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"De <strong>applicatie %1$s</strong> van <strong>%2$s</strong> vraagt toegang "
+"van het type \"<strong>%3$s</strong> tot uw gebruikersgegevens. Geef alleen "
+"toegang tot uw gebruiker bij %4$s aan derde partijen die u vertrouwt."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Gebruiker"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Gebruikersnaam"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Wachtwoord"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Ontzeggen"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Toestaan"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Toegang tot uw gebruikersgegevens toestaan of ontzeggen."
@@ -562,17 +646,17 @@ msgstr "De status is verwijderd."
msgid "No status with that ID found."
msgstr "Er is geen status gevonden met dit ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "De mededeling is te lang. Gebruik maximaal %d tekens."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Niet gevonden"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -588,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"
@@ -625,27 +697,22 @@ msgstr "%s publieke tijdlijn"
msgid "%s updates from everyone!"
msgstr "%s updates van iedereen"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Herhaald door %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -661,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."
@@ -674,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"
@@ -692,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -724,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."
@@ -758,22 +824,23 @@ msgstr ""
"niet meer volgen en u wordt niet op de hoogte gebracht van \"@\"-antwoorden "
"van deze gebruiker."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Deze gebruiker blokkeren"
@@ -781,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."
@@ -869,16 +940,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "U moet aangemeld zijn om een applicatie te kunnen verwijderen."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "De applicatie is niet gevonden."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Er is een probleem met uw sessietoken."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Applicatie verwijderen"
+
+#: 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 ""
+"Weet u zeker dat u deze applicatie wilt verwijderen? Door deze handeling "
+"worden alle gegevens van deze applicatie uit de database verwijderd, "
+"inclusief alle bestaande gebruikersverbindingen."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Deze applicatie niet verwijderen"
+
+#: actions/deleteapplication.php:160
+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."
@@ -907,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Deze mededeling verwijderen"
@@ -923,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."
@@ -932,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"
@@ -1042,12 +1155,13 @@ msgstr "Standaardinstellingen toepassen"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1063,32 +1177,24 @@ msgstr "Deze mededeling staats niet op uw favorietenlijst."
msgid "Add to favorites"
msgstr "Aan favorieten toevoegen"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Onbekend document."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Onbekend document \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Applicatie bewerken"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "U moet aangemeld zijn om een applicatie te kunnen bewerken."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "U bent niet de eigenaar van deze applicatie."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "De applicatie bestaat niet."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Er is een probleem met uw sessietoken."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Gebruik dit formulier om uw applicatiegegevens te bewerken."
@@ -1097,43 +1203,47 @@ msgstr "Gebruik dit formulier om uw applicatiegegevens te bewerken."
msgid "Name is required."
msgstr "Een naam is verplicht."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "De naam is te lang (maximaal 255 tekens)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Deze naam wordt al gebruikt. Kies een andere."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Een beschrijving is verplicht"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "De bron-URL is te lang."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "De bron-URL is niet geldig."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "Organisatie is verplicht."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "De organisatienaam is te lang (maximaal 255 tekens)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "De homepage voor een organisatie is verplicht."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "De callback is te lang."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "De callback-URL is niet geldig."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Het was niet mogelijk de applicatie bij te werken."
@@ -1146,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."
@@ -1205,14 +1315,14 @@ msgstr ""
"ongewenste berichten/spam) voor een bericht met nadere instructies."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Annuleren"
#: actions/emailsettings.php:121
msgid "Email address"
-msgstr "E-mailadressen"
+msgstr "E-mailadres"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
@@ -1288,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geen geldig e-mailadres."
@@ -1300,7 +1410,7 @@ msgstr "U hebt dit e-mailadres als ingesteld als uw e-mailadres."
msgid "That email address already belongs to another user."
msgstr "Dit e-mailadres is al geregistreerd door een andere gebruiker."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "De bevestigingscode kon niet ingevoegd worden."
@@ -1362,7 +1472,7 @@ msgstr "Deze mededeling staat al in uw favorietenlijst."
msgid "Disfavor favorite"
msgstr "Van favotietenlijst verwijderen"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Populaire mededelingen"
@@ -1486,6 +1596,22 @@ msgstr "Het bestand bestaat niet."
msgid "Cannot read file."
msgstr "Het bestand kon niet gelezen worden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ongeldige rol."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Deze rol is gereserveerd en kan niet ingesteld worden."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Op deze website kunt u geen gebruikersrollen toekennen."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Deze gebruiker heeft deze rol al."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1515,7 +1641,7 @@ msgstr "Deze gebruiker is al de toegang tot de groep ontzegd."
msgid "User is not a member of group."
msgstr "De gebruiker is geen lid van de groep."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Gebruiker toegang tot de groep blokkeren"
@@ -1552,11 +1678,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."
@@ -1564,20 +1690,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."
@@ -1585,62 +1711,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Beheerder"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkeren"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Deze gebruiker groepsbeheerder maken"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Beheerder maken"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1814,6 +1946,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Dit is niet uw Jabber-ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Postvak IN van %s - pagina %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1898,16 +2035,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"
@@ -1968,7 +2107,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"
@@ -1977,11 +2120,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"
@@ -2000,8 +2143,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Aanmelden"
@@ -2038,21 +2180,21 @@ msgstr ""
"Meld u aan met uw gebruikersnaam en wachtwoord. Hebt u nog geen "
"gebruikersnaam? [Registreer een nieuwe gebruiker](%%action.register%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Alleen beheerders kunnen andere gebruikers beheerder maken."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s is al beheerder van de groep \"%2$s\""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Het was niet mogelijk te bevestigen dat %1$s lid is van de groep %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Het is niet mogelijk %1$s beheerder te maken van de groep %2$s."
@@ -2062,7 +2204,7 @@ msgid "No current status"
msgstr "Geen huidige status"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Nieuwe applicatie"
#: actions/newapplication.php:64
@@ -2073,11 +2215,11 @@ msgstr "U moet aangemeld zijn om een applicatie te kunnen registreren."
msgid "Use this form to register a new application."
msgstr "Gebruik dit formulier om een nieuwe applicatie te registreren."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "Een bron-URL is verplicht."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Het was niet mogelijk de applicatie aan te maken."
@@ -2212,32 +2354,32 @@ msgstr "Door u geregistreerde applicaties"
msgid "You have not registered any applications yet."
msgstr "U hebt nog geen applicaties geregistreerd."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Verbonden applicaties"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
"U hebt de volgende applicaties toegang gegeven tot uw gebruikersgegevens."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "U bent geen gebruiker van die applicatie."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
"Het was niet mogelijk de toegang te ontzeggen voor de volgende applicatie: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
"U hebt geen enkele applicatie geautoriseerd voor toegang tot uw "
"gebruikersgegevens."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
"Ontwikkelaars kunnen de registratiegegevens voor hun applicaties bewerken "
@@ -2259,8 +2401,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2324,6 +2466,11 @@ msgstr "Het opgegeven token is ongeldig."
msgid "Login token expired."
msgstr "Het aanmeldtoken is verlopen."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Postvak UIT voor %1$s - pagina %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2394,7 +2541,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:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Paden"
@@ -2402,132 +2550,147 @@ msgstr "Paden"
msgid "Path and server settings for this StatusNet site."
msgstr "Pad- en serverinstellingen voor de StatusNet-website."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Er kan niet uit de vormgevingmap gelezen worden: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Er kan niet in de avatarmap geschreven worden: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Er kan niet in de achtergrondmap geschreven worden: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Er kan niet uit de talenmap gelezen worden: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
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:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Website"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Server"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Hostnaam van de website server."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Pad"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Websitepad"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Talenpad"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Talenmap"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Nette URL's"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Nette URL's (meer leesbaar en beter te onthouden) gebruiken?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Vormgeving"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Vormgevingsserver"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Vormgevingspad"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Vormgevingsmap"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatars"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Avatarserver"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Avatarpad"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Avatarmap"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Achtergronden"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Achtergrondenserver"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Achtergrondpad"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Achtergrondenmap"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nooit"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Soms"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Altijd"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "SSL gebruiken"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Wanneer SSL gebruikt moet worden"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-server"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "De server waar SSL-verzoeken heen gestuurd moeten worden"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Opslagpaden"
@@ -2555,11 +2718,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 ""
@@ -2586,13 +2749,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Thuispagina"
@@ -2614,8 +2777,8 @@ msgid "Bio"
msgstr "Beschrijving"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Locatie"
@@ -2641,7 +2804,7 @@ msgstr ""
"Eigen labels (letter, getallen, -, ., en _). Gescheiden door komma's of "
"spaties"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Taal"
@@ -2669,7 +2832,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Er is geen tijdzone geselecteerd."
@@ -2682,25 +2845,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."
@@ -2713,28 +2877,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Publieke streamfeed (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Publieke streamfeed (RSS 1.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Publieke streamfeed (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2743,11 +2907,11 @@ msgstr ""
"Dit is de publieke tijdlijn voor %%site.name%%, maar niemand heeft nog "
"berichten geplaatst."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "U kunt de eerste zijn die een bericht plaatst!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2755,7 +2919,7 @@ msgstr ""
"Waarom [registreert u geen gebruiker](%%action.register%%) en plaatst u als "
"eerste een bericht?"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2768,7 +2932,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2807,7 +2971,7 @@ msgstr ""
"U kunt een [gebruiker registeren](%%action.register%%) en dan de eerste zijn "
"die er een plaatst!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Woordwolk"
@@ -2952,8 +3116,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registreren"
@@ -2994,7 +3157,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3101,7 +3264,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"
@@ -3139,7 +3302,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Herhaald"
@@ -3147,28 +3310,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:144
+#: 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: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 "
@@ -3177,7 +3345,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 "
@@ -3186,7 +3354,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 "
@@ -3200,6 +3368,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Antwoorden aan %1$s op %2$s."
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "U kunt geen gebruikersrollen intrekken op deze website."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Deze gebruiker heeft deze rol niet."
+
+#: 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 "Op deze website kunt u gebruikers niet in de zandbak plaatsen."
@@ -3208,75 +3388,106 @@ 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:390
+msgid "Sessions"
+msgstr "Sessies"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Sessieinstellingen voor deze StatusNet-website."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Sessieafhandeling"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Of sessies door de software zelf afgehandeld moeten worden."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Sessies debuggen"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Debuguitvoer voor sessies inschakelen."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Websiteinstellingen opslaan"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr "U moet aangemeld zijn om een applicatie te kunnen bekijken."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Applicatieprofiel"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Icoon"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Naam"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Organisatie"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Beschrijving"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistieken"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "aangemaakt door %1$s - standaardtoegang \"%2$s\" - %3$d gebruikers"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Aangemaakt door %1$s - standaardtoegang \"%2$s\" - %3$d gebruikers"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "Applicatiehandelingen"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Sleutel en wachtwoord op nieuw instellen"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Applicatieinformatie"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Gebruikerssleutel"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Gebruikerswachtwoord"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "URL voor verzoektoken"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "URL voor toegangstoken"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Autorisatie-URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3284,26 +3495,36 @@ msgstr ""
"Opmerking: HMAC-SHA1 ondertekening wordt ondersteund. Ondertekening in "
"platte tekst is niet mogelijk."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Weet u zeker dat u uw gebruikerssleutel en geheime code wilt verwijderen?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Favoriete mededelingen van %1$s, pagina %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3312,7 +3533,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 "
@@ -3322,7 +3543,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 "
@@ -3333,7 +3554,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."
@@ -3342,67 +3563,72 @@ msgstr "Dit is de manier om dat te delen wat u wilt."
msgid "%s group"
msgstr "%s groep"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Groep %1$s, pagina %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Groepsprofiel"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3418,7 +3644,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."
@@ -3431,7 +3657,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"
@@ -3462,6 +3688,11 @@ msgstr "Deze mededeling is verwijderd."
msgid " tagged %s"
msgstr " met het label %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, pagina %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3487,13 +3718,13 @@ msgstr "Mededelingenfeed voor %s (Atom)"
msgid "FOAF for %s"
msgstr "Vriend van een vriend (FOAF) voor %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Dit is de tijdlijn voor %1$s, maar %2$s heeft nog geen berichten verzonden."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3501,7 +3732,7 @@ msgstr ""
"Hebt u recentelijk iets interessants gezien? U hebt nog geen mededelingen "
"verstuurd, dus dit is een ideaal moment om daarmee te beginnen!"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3510,7 +3741,7 @@ msgstr ""
"U kunt proberen %1$s te porren of [een bericht voor die gebruiker plaatsen](%"
"%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3524,7 +3755,7 @@ msgstr ""
"abonneren op de mededelingen van **%s** en nog veel meer! [Meer lezen...](%%%"
"%doc.help%%%%)"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3535,7 +3766,7 @@ msgstr ""
"(http://en.wikipedia.org/wiki/Micro-blogging) gebaseerd op de Vrije Software "
"[StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Herhaald van %s"
@@ -3549,205 +3780,140 @@ msgid "User is already silenced."
msgstr "Deze gebruiker is al gemuilkorfd."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Basisinstellingen voor deze StatusNet-website."
+msgid "Basic settings for this StatusNet site"
+msgstr "Basisinstellingen voor deze StatusNet-website"
-#: actions/siteadminpanel.php:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "De taal \"%s\" is niet bekend."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "De rapportage-URL voor snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "De waarde voor het uitvoeren van snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "De snapshotfrequentie moet een getal zijn."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "De minimale tekstlimiet is 140 tekens."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "De duplicaatlimiet moet één of meer seconden zijn."
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Algemeen"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Websitenaam"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Mogelijk gemaakt door"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "\"Mogelijk gemaakt door\"-URL"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: 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:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokaal"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standaardtijdzone"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standaardtijdzone voor de website. Meestal UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Standaardtaal"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL's"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Server"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Hostnaam van de website server."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Nette URL's"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Nette URL's (meer leesbaar en beter te onthouden) gebruiken?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Toegang"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privé"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Mogen anonieme gebruikers (niet aangemeld) de website bekijken?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Alleen op uitnodiging"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Registratie alleen op uitnodiging."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Gesloten"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Nieuwe registraties uitschakelen."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Snapshots"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Willekeurig tijdens een websitehit"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Als geplande taak"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Snapshots van gegevens"
-
-#: actions/siteadminpanel.php:348
-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:353
-msgid "Frequency"
-msgstr "Frequentie"
+"De taal voor de website als deze niet uit de browserinstellingen opgemaakt "
+"kan worden"
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Iedere zoveel websitehits wordt een snapshot verzonden"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "Rapportage-URL"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Snapshots worden naar deze URL verzonden"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limieten"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstlimiet"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximaal aantal te gebruiken tekens voor mededelingen."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplicaatlimiet"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Websiteinstellingen opslaan"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Websitebrede mededeling"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Websitebrede mededeling bewerken"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Het was niet mogelijk om de websitebrede mededeling op te slaan."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "De maximale lengte voor de websitebrede aankondiging is 255 tekens"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Tekst voor websitebrede mededeling"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Tekst voor websitebrede aankondiging (maximaal 255 tekens - HTML is "
+"toegestaan)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Websitebrede mededeling opslaan"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3848,19 +4014,89 @@ 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
+msgid "Manage snapshot configuration"
+msgstr "Snapshotinstellingen beheren"
+
+#: 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
+msgid "Save snapshot settings"
+msgstr "Snapshotinstellingen 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:69
+#: 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:145
msgid "Subscribed"
msgstr "Geabonneerd"
@@ -3924,7 +4160,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 "
@@ -3940,30 +4176,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 luistert nergens naar."
+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:86
+#: 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: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)"
@@ -3981,7 +4222,8 @@ msgstr "Label %s"
msgid "User profile"
msgstr "Gebruikersprofiel"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -4018,7 +4260,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."
@@ -4042,7 +4284,7 @@ msgstr "Het profiel-ID was niet aanwezig in het verzoek."
msgid "Unsubscribed"
msgstr "Het abonnement is opgezegd"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4050,12 +4292,13 @@ 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."
@@ -4117,26 +4360,6 @@ msgstr "Uitnodigingen ingeschakeld"
msgid "Whether to allow users to invite new users."
msgstr "Of gebruikers nieuwe gebruikers kunnen uitnodigen."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessies"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Sessieafhandeling"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Of sessies door de software zelf afgehandeld moeten worden."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Sessies debuggen"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Debuguitvoer voor sessies inschakelen."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Abonneren"
@@ -4152,36 +4375,36 @@ msgstr ""
"aangegeven dat u zich op de mededelingen van een gebruiker wilt abonneren, "
"klik dan op \"Afwijzen\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licentie"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Aanvaarden"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
-msgstr "Abonnement geautoriseerd"
+msgstr "Abonneer mij op deze gebruiker"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Afwijzen"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Dit abonnement weigeren"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Geen autorisatieverzoek!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Het abonnement is geautoriseerd"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4191,11 +4414,11 @@ msgstr ""
"Controleer de instructies van de site voor informatie over het volledig "
"afwijzen van een abonnement. Uw abonnementstoken is:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Het abonnement is afgewezen"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4205,37 +4428,37 @@ msgstr ""
"Controleer de instructies van de site voor informatie over het volledig "
"afwijzen van een abonnement."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "De abonnee-URI \"%s\" is hier niet te vinden."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "De URI \"%s\" voor de stream is te lang."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "de URI \"%s\" voor de stream is een lokale gebruiker."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
-msgstr "De profiel-URL \"%s\" is niet geldig."
+msgstr "De profiel-URL ‘%s’ is van een lokale gebruiker."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "De avatar-URL \"%s\" is niet geldig."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Het was niet mogelijk de avatar-URL \"%s\" te lezen."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Er staat een verkeerd afbeeldingsttype op de avatar-URL \"%s\"."
@@ -4256,21 +4479,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Geniet van uw hotdog!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Groepen voor %1$s, pagina %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4285,10 +4519,6 @@ msgstr ""
"Deze website wordt aangedreven door %1$2 versie %2$s. Auteursrechten "
"voorbehouden 2008-2010 Statusnet, Inc. en medewerkers."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Medewerkers"
@@ -4313,9 +4543,9 @@ msgid ""
"for more details. "
msgstr ""
"Dit programma wordt verspreid in de hoop dat het bruikbaar is, maar ZONDER "
-"ENIGE GARANTIE; zonder zelfde impliciete garantie van VERMARKTBAARHEID of "
-"GESCHIKTHEID VOOR EEN SPECIFIEK DOEL. Zie de GNU Affero General Public "
-"License voor meer details. "
+"ENIGE GARANTIE; zelfs zonder de impliciete garantie van VERKOOPBAARHEID of "
+"GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU Affero General Public License "
+"voor meer details. "
#: actions/version.php:180
#, php-format
@@ -4330,7 +4560,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versie"
@@ -4371,6 +4601,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"
@@ -4388,31 +4622,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:171
+#: 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:225
+#: 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:229
+#: 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:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4420,39 +4654,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:246
+#: 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:305 classes/Notice.php:330
+#: 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:1059
-#, php-format
-msgid "DB error inserting reply: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
msgstr ""
-"Er is een databasefout opgetreden bij het invoegen van het antwoord: %s"
+"Er is een probleem opgetreden bij het opslaan van het Postvak IN van de "
+"groep."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr ""
+"Het was niet mogelijk om het OMB-token voor het abonnement te 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"
@@ -4490,124 +4761,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Naamloze pagina"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primaire sitenavigatie"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Start"
-
-#: lib/action.php:433
+#. 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: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:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "Met andere diensten koppelen"
+
+#: lib/action.php:443
msgid "Connect"
msgstr "Koppelen"
-#: lib/action.php:438
-msgid "Connect to services"
-msgstr "Met diensten verbinden"
-
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Websiteinstellingen wijzigen"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Uitnodigen"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Beheer"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Afmelden"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Uitnodigingen"
-#: lib/action.php:452
+#. 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:457
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Gebruiker aanmaken"
-#: lib/action.php:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Help"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Aanmelden"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Zoeken"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Help"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale weergaven"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Mededeling van de pagina"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secundaire sitenavigatie"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Help"
+
+#: lib/action.php:754
msgid "About"
msgstr "Over"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Veel gestelde vragen"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "Gebruiksvoorwaarden"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Broncode"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Widget"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licentie van de StatusNet-software"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4616,12 +4933,12 @@ msgstr ""
"**%%site.name%%** is een microblogdienst van [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is een microblogdienst. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4632,130 +4949,212 @@ msgstr ""
"versie %s, beschikbaar onder de [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licentie voor siteinhoud"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Inhoud en gegevens van %1$s zijn persoonlijk en vertrouwelijk."
-#: lib/action.php:805
+#: 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:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Alle "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licentie."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Later"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Padinstellingen"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Sessieinstellingen"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Websitebrede mededeling opslaan"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Snapshotinstellingen"
+
+#: 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:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+"De API-authenticatie is mislukt. nickname = %1$s, proxy - %2$s, ip = %3$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Applicatie bewerken"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Icoon voor deze applicatie"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Beschrijf uw applicatie in %d tekens"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Beschrijf uw applicatie"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "Bron-URL"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "De URL van de homepage van deze applicatie"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "Organisatie verantwoordelijk voor deze applicatie"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "De URL van de homepage van de organisatie"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "URL om naar door te verwijzen na authenticatie"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "Browser"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "Desktop"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Type applicatie; browser of desktop"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Alleen-lezen"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Lezen en schrijven"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Standaardtoegang voor deze applicatie: alleen-lezen of lezen en schrijven"
@@ -4784,11 +5183,11 @@ msgstr "Mededelingen die deze bijlage bevatten"
msgid "Tags for this attachment"
msgstr "Labels voor deze bijlage"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Wachtwoord wijzigen is mislukt"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Wachtwoord wijzigen is niet toegestaan"
@@ -4943,83 +5342,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"
@@ -5033,6 +5441,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"
@@ -5071,6 +5480,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 "
@@ -5099,20 +5509,20 @@ msgstr ""
"tracks - nog niet beschikbaar\n"
"tracking - nog niet beschikbaar\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Er is geen instellingenbestand aangetroffen. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Naar het installatieprogramma gaan."
@@ -5211,6 +5621,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 "Deze gebruiker de rol \"%s\" geven"
+
#: 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"
@@ -5302,32 +5717,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Onbekende bron Postvak IN %d."
@@ -5609,7 +6024,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"
@@ -5704,6 +6119,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"
@@ -5737,48 +6157,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Herhaald door"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Op deze mededeling antwoorden"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Antwoorden"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Mededeling herhaald"
@@ -5811,11 +6231,7 @@ msgstr ""
msgid "Duplicate notice"
msgstr "Duplicaatmelding"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "U mag zich niet abonneren."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kon nieuw abonnement niet toevoegen."
@@ -5831,19 +6247,19 @@ msgstr "Antwoorden"
msgid "Favorites"
msgstr "Favorieten"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Postvak IN"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Uw inkomende berichten"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Postvak UIT"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Uw verzonden berichten"
@@ -5856,7 +6272,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"
@@ -5864,23 +6280,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"
@@ -5920,6 +6336,15 @@ msgstr "Deze mededeling herhalen?"
msgid "Repeat this notice"
msgstr "Deze mededeling herhalen"
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "De gebruikersrol \"%s\" voor deze gebruiker intrekken"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Zandbak"
@@ -5936,6 +6361,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"
@@ -5987,33 +6416,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
@@ -6065,67 +6475,81 @@ 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:875
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Gebruikersrol"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Beheerder"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderator"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
@@ -6139,7 +6563,7 @@ msgstr "%s is geen geldige kleur."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s is geen geldige kleur. Gebruik drie of zes hexadecimale tekens."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index 5a9d928fd..72fe47924 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,24 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:09+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:11+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Godta"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Avatar-innstillingar"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Registrér"
+
+#. 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"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "Invitér"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Blokkér"
+
+#. 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/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
@@ -33,84 +99,93 @@ msgstr "Dette emneord finst ikkje."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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!"
@@ -120,22 +195,22 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +226,7 @@ msgstr "Fann ikkje API-metode."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Dette krev ein POST."
@@ -170,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."
@@ -182,7 +258,7 @@ msgstr "Kan ikkje lagra profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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
@@ -305,78 +381,78 @@ msgstr "Kan ikkje oppdatera brukar."
msgid "Two user ids or screen_names must be supplied."
msgstr "To brukar IDer eller kallenamn er naudsynte."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Kan ikkje hente offentleg straum."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -388,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"
@@ -407,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 "
@@ -427,98 +503,112 @@ msgstr "%s grupper"
msgid "groups on %s"
msgstr "Gruppe handlingar"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Der var eit problem med sesjonen din. Vennlegst prøv på nytt."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Ugyldig brukarnamn eller passord."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Feil ved å setja brukar."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Uventa skjemasending."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Kallenamn"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Passord"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Alle"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -554,17 +644,17 @@ msgstr "Lasta opp brukarbilete."
msgid "No status with that ID found."
msgstr "Fann ingen status med den ID-en."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Det er for langt! Ein notis kan berre innehalde 140 teikn."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Fann ikkje"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -579,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"
@@ -616,27 +694,22 @@ msgstr "%s offentleg tidsline"
msgid "%s updates from everyone!"
msgstr "%s oppdateringar frå alle saman!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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!"
@@ -653,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."
@@ -666,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"
@@ -683,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -714,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."
@@ -747,23 +819,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Jau"
-#: actions/block.php:144 actions/groupmembers.php:346 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"
@@ -771,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"
@@ -864,16 +941,61 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Du må være logga inn for å lage ei gruppe."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Notisen har ingen profil"
+
+#: 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 ikkje medlem av den gruppa."
+
+#: 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 "Det var eit problem med sesjons billetten din."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Denne notisen finst ikkje."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Kan ikkje sletta notisen."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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"
@@ -904,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Slett denne notisen"
@@ -923,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 ""
@@ -1048,12 +1170,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1069,35 +1192,27 @@ msgstr "Denne notisen er ikkje ein favoritt!"
msgid "Add to favorites"
msgstr "Legg til i favorittar"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Slikt dokument finst ikkje."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Andre val"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Du må være logga inn for å lage ei gruppe."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Du er ikkje medlem av den gruppa."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Denne notisen finst ikkje."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Det var eit problem med sesjons billetten din."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1108,47 +1223,52 @@ msgstr "Bruk dette skjemaet for å redigere gruppa"
msgid "Name is required."
msgstr "Samme som passord over. PÃ¥krevd."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Ditt fulle namn er for langt (maksimalt 255 teikn)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Kallenamnet er allereie i bruk. Prøv eit anna."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Beskriving"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Heimesida er ikkje ei gyldig internettadresse."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Plassering er for lang (maksimalt 255 teikn)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Kann ikkje oppdatera gruppa."
@@ -1162,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."
@@ -1224,8 +1344,8 @@ msgstr ""
"med instruksjonar."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Avbryt"
@@ -1308,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ikkje ei gyldig epostadresse."
@@ -1320,7 +1440,7 @@ msgstr "Det er alt din epost addresse"
msgid "That email address already belongs to another user."
msgstr "Den epost addressa er alt registrert hos ein annan brukar."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Kan ikkje leggja til godkjenningskode."
@@ -1381,7 +1501,7 @@ msgstr "Denne notisen er alt ein favoritt!"
msgid "Disfavor favorite"
msgstr "Fjern favoritt"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Populære notisar"
@@ -1504,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
@@ -1536,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Blokker brukaren"
@@ -1573,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blokkér"
-#: actions/groupmembers.php:441
+#: 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:473
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1829,6 +1974,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Det er ikkje din Jabber ID."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Innboks for %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1910,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"
@@ -1975,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"
@@ -1984,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"
@@ -2006,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logg inn"
@@ -2045,21 +2202,21 @@ msgstr ""
"%action.register%%) ein ny konto, eller prøv [OpenID](%%action.openidlogin%"
"%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Brukar har blokkert deg."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Du må være administrator for å redigere gruppa"
@@ -2069,8 +2226,9 @@ msgid "No current status"
msgstr "Ingen status"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Denne notisen finst ikkje."
#: actions/newapplication.php:64
#, fuzzy
@@ -2082,11 +2240,11 @@ msgstr "Du må være logga inn for å lage ei gruppe."
msgid "Use this form to register a new application."
msgstr "Bruk dette skjemaet for å lage ein ny gruppe."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Kunne ikkje lagre favoritt."
@@ -2221,29 +2379,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2265,8 +2423,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2337,6 +2495,11 @@ msgstr "Ugyldig notisinnhald"
msgid "Login token expired."
msgstr "Logg inn "
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Utboks for %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2407,7 +2570,8 @@ msgstr "Klarar ikkje lagra nytt passord."
msgid "Password saved."
msgstr "Lagra passord."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2415,142 +2579,158 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Denne sida er ikkje tilgjengleg i eit"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "Invitér"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Gjenopprett"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Statusmelding"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Brukarbilete"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Avatar-innstillingar"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Lasta opp brukarbilete."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Lasta opp brukarbilete."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Gjenopprett"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Notisar"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Gjenopprett"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Statusmelding"
@@ -2578,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 ""
@@ -2608,13 +2788,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Heimeside"
@@ -2637,8 +2817,8 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Plassering"
@@ -2664,7 +2844,7 @@ msgstr ""
"merkelappar for deg sjølv ( bokstavar, nummer, -, ., og _ ), komma eller "
"mellomroms separert."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2691,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidssone er ikkje valt."
@@ -2704,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."
@@ -2734,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Offentleg straum"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Offentleg straum"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Offentleg straum"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2784,7 +2965,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2819,7 +3000,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Emne sky"
@@ -2958,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrér"
@@ -3000,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Epost"
@@ -3108,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"
@@ -3151,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Lag"
@@ -3161,42 +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:144
+#: 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: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 "
@@ -3208,6 +3393,21 @@ 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"
+msgstr "Lasta opp brukarbilete."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3218,117 +3418,159 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Avatar-innstillingar"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Notisen har ingen profil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Kallenamn"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Paginering"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Beskriving"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Sikker på at du vil sletta notisen?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s's favoritt meldingar"
+
#: actions/showfavorites.php:132
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 "
@@ -3336,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 ""
@@ -3345,68 +3587,73 @@ msgstr ""
msgid "%s group"
msgstr "%s gruppe"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%s medlemmar i gruppa, side %d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Gruppe profil"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3416,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."
@@ -3427,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"
@@ -3460,6 +3707,11 @@ msgstr "Melding lagra"
msgid " tagged %s"
msgstr "Notisar merka med %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s med vener, side %d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3485,25 +3737,25 @@ msgstr "Notisstraum for %s"
msgid "FOAF for %s"
msgstr "Utboks for %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3512,7 +3764,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3522,7 +3774,7 @@ msgstr ""
"**%s** har ein konto på %%%%site.name%%%%, ei [mikroblogging](http://en."
"wikipedia.org/wiki/Micro-blogging)-teneste"
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Svar til %s"
@@ -3538,209 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ikkje ei gyldig epostadresse"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Statusmelding"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Ny epostadresse for å oppdatera %s"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale syningar"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Foretrukke språk"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Gjenopprett"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Godta"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Personvern"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "Invitér"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-#, fuzzy
-msgid "Closed"
-msgstr "Blokkér"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ny melding"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Avatar-innstillingar"
+msgid "Save site notice"
+msgstr "Statusmelding"
#: actions/smssettings.php:58
#, fuzzy
@@ -3844,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"
@@ -3916,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 "
@@ -3926,30 +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:86
+#: 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: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"
@@ -3968,7 +4226,8 @@ msgstr "Merkelapp %s"
msgid "User profile"
msgstr "Brukarprofil"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Bilete"
@@ -4005,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."
@@ -4032,18 +4291,20 @@ msgstr "Ingen profil-ID i førespurnaden."
msgid "Unsubscribed"
msgstr "Fjerna tinging"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4111,26 +4372,6 @@ msgstr "Invitasjon(er) sendt"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autoriser tinging"
@@ -4145,38 +4386,38 @@ msgstr ""
"Sjekk desse detaljane og forsikre deg om at du vil abonnere på denne "
"brukaren sine notisar. Vist du ikkje har bedt om dette, klikk \"Avbryt\""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
#, fuzzy
msgid "License"
msgstr "lisens."
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Godta"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Lagre tinging for brukar: %s"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Avslå"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "%s tingarar"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ingen autoriserings-spørjing!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Tinging autorisert"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4187,11 +4428,11 @@ msgstr ""
"Sjekk med sida sine instruksjonar for korleis autorisering til tinginga skal "
"gjennomførast. Ditt tingings teikn er: "
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Tinging avvist"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4201,37 +4442,37 @@ msgstr ""
"Tingina har blitt avvist, men ingen henvisnings URL er tilgjengleg. Sjekk "
"med sida sine instruksjonar for korleis ein skal avvise tinginga."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Kan ikkje lesa brukarbilete-URL «%s»"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Feil biletetype for '%s'"
@@ -4251,21 +4492,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%s medlemmar i gruppa, side %d"
+
#: actions/usergroups.php:130
#, fuzzy
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"
@@ -4278,11 +4530,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Lasta opp brukarbilete."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4314,7 +4561,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personleg"
@@ -4355,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"
@@ -4373,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Feil ved lagring av notis. Ukjend brukar."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4401,37 +4653,79 @@ msgid ""
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Databasefeil, kan ikkje lagra svar: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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"
@@ -4470,127 +4764,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ingen tittel"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigasjon for hovudsida"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Heim"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Kopla til"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Invitér"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Logg ut"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Invitér"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Hjelp"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logg inn"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjelp meg!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Søk"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjelp"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale syningar"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidenotis"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Andrenivås side navigasjon"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjelp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Personvern"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Kjeldekode"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Dult"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4599,12 +4954,12 @@ msgstr ""
"**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er ei mikrobloggingteneste. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4615,143 +4970,225 @@ msgstr ""
"%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Alle"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "lisens."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "« Etter"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS bekreftelse"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS bekreftelse"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Beskriv gruppa eller emnet med 140 teikn"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Beskriv gruppa eller emnet med 140 teikn"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Kjeldekode"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4781,12 +5218,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Endra passord"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Endra passord"
@@ -4940,83 +5377,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"
@@ -5030,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"
@@ -5057,20 +5504,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Ingen stadfestingskode."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "Logg inn or sida"
@@ -5172,6 +5619,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"
@@ -5263,32 +5715,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5498,7 +5950,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å "
@@ -5589,6 +6041,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"
@@ -5622,51 +6080,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Ingen innhald."
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Lag"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svar på denne notisen"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svar"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Melding lagra"
@@ -5700,12 +6158,7 @@ msgstr "Feil med å henta inn ekstern profil"
msgid "Duplicate notice"
msgstr "Slett notis"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kan ikkje leggja til ny tinging."
@@ -5721,19 +6174,19 @@ msgstr "Svar"
msgid "Favorites"
msgstr "Favorittar"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Innboks"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Dine innkomande meldinger"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Utboks"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Dine sende meldingar"
@@ -5747,7 +6200,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"
@@ -5755,24 +6208,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"
@@ -5815,6 +6268,15 @@ msgstr "Svar på denne notisen"
msgid "Repeat this notice"
msgstr "Svar på denne notisen"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5834,6 +6296,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"
@@ -5888,35 +6354,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
@@ -5971,68 +6416,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
@@ -6046,7 +6507,7 @@ msgstr "Heimesida er ikkje ei gyldig internettadresse."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index b42a542b5..e592ff747 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-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:15+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:24+0000\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,17 +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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Dostęp"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Ustawienia dostępu witryny"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Rejestracja"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Prywatna"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Rejestracja tylko za zaproszeniem."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Tylko zaproszeni"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Wyłączenie nowych rejestracji."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Zamknięte"
+
+#. 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/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
@@ -38,51 +98,58 @@ msgstr "Nie ma takiej strony"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -90,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 "
@@ -99,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 "
@@ -109,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:202
+#: 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 "
@@ -118,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."
@@ -133,22 +202,22 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -163,7 +232,7 @@ msgstr "Nie odnaleziono metody API."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Ta metoda wymaga POST."
@@ -182,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."
@@ -193,7 +263,7 @@ msgstr "Nie można zapisać profilu."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -209,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."
@@ -314,76 +384,76 @@ msgstr "Nie można zrezygnować z obserwacji samego siebie."
msgid "Two user ids or screen_names must be supplied."
msgstr "Należy dostarczyć dwa identyfikatory lub nazwy użytkowników."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Nie można określić użytkownika źródłowego."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -394,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."
@@ -411,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."
@@ -431,41 +501,45 @@ msgstr "Grupy %s"
msgid "groups on %s"
msgstr "grupy na %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Błędne żądanie."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Nie podano parametru oauth_token."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Nieprawidłowy token."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Wystąpił problem z tokenem sesji. Spróbuj ponownie."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Nieprawidłowy pseudonim/hasło."
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr "Błąd bazy danych podczas usuwania użytkownika aplikacji OAuth."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr "Błąd bazy danych podczas wprowadzania użytkownika aplikacji OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
@@ -473,53 +547,65 @@ msgid ""
msgstr ""
"Token żądania %s został upoważniony. Proszę wymienić go na token dostępu."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "Token żądania %s został odrzucony."
+msgid "The request token %s has been denied and revoked."
+msgstr "Token żądania %s został odrzucony lub unieważniony."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Nieoczekiwane wysłanie formularza."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "Aplikacja chce połączyć się z kontem użytkownika"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Zezwolić czy odmówić dostęp"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"Aplikacja <strong>%1$s</strong> autorstwa <strong>%2$s</strong> chciałaby "
+"uzyskać możliwość <strong>%3$s</strong> danych konta %4$s. Dostęp do konta %4"
+"$s powinien być udostępniany tylko zaufanym osobom trzecim."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Pseudonim"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Hasło"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Odrzuć"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Zezwól"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Zezwól lub odmów dostęp do informacji konta."
@@ -552,17 +638,17 @@ msgstr "Usunięto stan."
msgid "No status with that ID found."
msgstr "Nie odnaleziono stanów z tym identyfikatorem."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Wpis jest za długi. Maksymalna długość wynosi %d znaków."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Nie odnaleziono"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Maksymalny rozmiar wpisu wynosi %d znaków, w tym adres URL załącznika."
@@ -576,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"
@@ -613,27 +687,22 @@ msgstr "Publiczna oś czasu użytkownika %s"
msgid "%s updates from everyone!"
msgstr "Użytkownik %s aktualizuje od każdego."
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Powtórzone przez użytkownika %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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."
@@ -649,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."
@@ -662,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"
@@ -679,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -710,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."
@@ -744,22 +812,23 @@ msgstr ""
"do ciebie zostanie usunięta, nie będzie mógł cię subskrybować w przyszłości "
"i nie będziesz powiadamiany o żadnych odpowiedziach @ od niego."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Tak"
-#: actions/block.php:144 actions/groupmembers.php:346 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"
@@ -767,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"
@@ -855,16 +928,57 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Musisz być zalogowany, aby usunąć aplikację."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Nie odnaleziono aplikacji."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Wystąpił problem z tokenem sesji."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Usuń aplikację"
+
+#: 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 ""
+"Na pewno usunąć tę aplikację? Wyczyści to wszystkie dane o aplikacji z bazy "
+"danych, w tym wszystkie istniejące połączenia użytkowników."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Nie usuwaj tej aplikacji"
+
+#: actions/deleteapplication.php:160
+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."
@@ -893,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Usuń ten wpis"
@@ -909,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."
@@ -917,18 +1031,18 @@ 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"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr "Ustawienia wyglÄ…du tej strony StatusNet."
+msgstr "Ustawienia wyglÄ…du tej witryny StatusNet."
#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
@@ -945,7 +1059,7 @@ msgstr "Zmień logo"
#: actions/designadminpanel.php:380
msgid "Site logo"
-msgstr "Logo strony"
+msgstr "Logo witryny"
#: actions/designadminpanel.php:387
msgid "Change theme"
@@ -953,11 +1067,11 @@ msgstr "Zmień motyw"
#: actions/designadminpanel.php:404
msgid "Site theme"
-msgstr "Motyw strony"
+msgstr "Motyw witryny"
#: actions/designadminpanel.php:405
msgid "Theme for the site."
-msgstr "Motyw strony."
+msgstr "Motyw witryny."
#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
@@ -973,7 +1087,7 @@ msgstr "TÅ‚o"
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "Można wysłać obraz tła dla strony. Maksymalny rozmiar pliku to %1$s."
+msgstr "Można wysłać obraz tła dla witryny. Maksymalny rozmiar pliku to %1$s."
#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
@@ -997,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"
@@ -1025,12 +1139,13 @@ msgstr "Przywróć domyślne ustawienia"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1046,32 +1161,24 @@ msgstr "Ten wpis nie jest ulubiony."
msgid "Add to favorites"
msgstr "Dodaj do ulubionych"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Nie ma takiego dokumentu."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Nie ma takiego dokumentu \\\"%s\\\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Zmodyfikuj aplikacjÄ™"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Musisz być zalogowany, aby zmodyfikować aplikację."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Nie jesteś właścicielem tej aplikacji."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Nie ma takiej aplikacji."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Wystąpił problem z tokenem sesji."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Użyj tego formularza, aby zmodyfikować aplikację."
@@ -1080,43 +1187,47 @@ msgstr "Użyj tego formularza, aby zmodyfikować aplikację."
msgid "Name is required."
msgstr "Nazwa jest wymagana."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Nazwa jest za długa (maksymalnie 255 znaków)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Nazwa jest już używana. Spróbuj innej."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Opis jest wymagany."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "Źródłowy adres URL jest za długi."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "Źródłowy adres URL jest nieprawidłowy."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "Organizacja jest wymagana."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "Organizacja jest za długa (maksymalnie 255 znaków)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "Strona domowa organizacji jest wymagana."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "Adres zwrotny jest za długi."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "Adres zwrotny URL jest nieprawidłowy."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Nie można zaktualizować aplikacji."
@@ -1129,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."
@@ -1189,8 +1300,8 @@ msgstr ""
"instrukcjami."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Anuluj"
@@ -1270,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "To nie jest prawidłowy adres e-mail."
@@ -1282,7 +1393,7 @@ msgstr "Ten adres e-mail jest już twój."
msgid "That email address already belongs to another user."
msgstr "Ten adres e-mail należy już do innego użytkownika."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Nie można wprowadzić kodu potwierdzającego."
@@ -1344,7 +1455,7 @@ msgstr "Ten wpis jest już ulubiony."
msgid "Disfavor favorite"
msgstr "Usuń wpis z ulubionych"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Popularne wpisy"
@@ -1356,7 +1467,7 @@ msgstr "Popularne wpisy, strona %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
-msgstr "Najpopularniejsze wpisy na stronie w te chwili."
+msgstr "Najpopularniejsze wpisy na witrynie w te chwili."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
@@ -1463,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
@@ -1492,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Zablokuj użytkownika w grupie"
@@ -1527,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administrator"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Zablokuj"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Uczyń użytkownika administratorem grupy"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Uczyń administratorem"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1782,6 +1918,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "To nie jest twój identyfikator Jabbera."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Odebrane wiadomości użytkownika %1$s - strona %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1840,7 +1981,7 @@ msgid ""
"on the site. Thanks for growing the community!"
msgstr ""
"Zostaniesz powiadomiony, kiedy ktoÅ› zaakceptuje zaproszenie i zarejestruje "
-"się na stronie. Dziękujemy za pomoc w zwiększaniu społeczności."
+"się na witrynie. Dziękujemy za pomoc w zwiększaniu społeczności."
#: actions/invite.php:162
msgid ""
@@ -1865,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"
@@ -1935,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"
@@ -1944,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"
@@ -1965,14 +2113,13 @@ 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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Zaloguj siÄ™"
#: actions/login.php:227
msgid "Login to site"
-msgstr "Zaloguj siÄ™ na stronie"
+msgstr "Zaloguj siÄ™ na witrynie"
#: actions/login.php:236 actions/register.php:478
msgid "Remember me"
@@ -2005,21 +2152,21 @@ msgstr ""
"Zaloguj się za pomocą nazwy użytkownika i hasła. Nie masz ich jeszcze? "
"[Zarejestruj](%%action.register%%) nowe konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Tylko administrator może uczynić innego użytkownika administratorem."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Użytkownika %1$s jest już administratorem grupy \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Nie można uzyskać wpisu członkostwa użytkownika %1$s w grupie %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Nie można uczynić %1$s administratorem grupy %2$s."
@@ -2029,7 +2176,7 @@ msgid "No current status"
msgstr "Brak obecnego stanu"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Nowa aplikacja"
#: actions/newapplication.php:64
@@ -2040,11 +2187,11 @@ msgstr "Musisz być zalogowany, aby zarejestrować aplikację."
msgid "Use this form to register a new application."
msgstr "Użyj tego formularza, aby zarejestrować aplikację."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "Źródłowy adres URL jest wymagany."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Nie można utworzyć aplikacji."
@@ -2067,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."
@@ -2105,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
@@ -2178,28 +2325,28 @@ msgstr "Zarejestrowane aplikacje"
msgid "You have not registered any applications yet."
msgstr "Nie zarejestrowano jeszcze żadnych aplikacji."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Połączone aplikacje"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr "Zezwolono następującym aplikacjom na dostęp do konta."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Nie jesteś użytkownikiem tej aplikacji."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "Nie można unieważnić dostępu dla aplikacji: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr "Nie upoważniono żadnych aplikacji do używania konta."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr "Programiści mogą zmodyfikować ustawienia rejestracji swoich aplikacji "
@@ -2220,8 +2367,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2285,6 +2432,11 @@ msgstr "Podano nieprawidłowy token logowania."
msgid "Login token expired."
msgstr "Token logowania wygasł."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Wysłane wiadomości użytkownika %1$s - strona %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2355,140 +2507,158 @@ msgstr "Nie można zapisać nowego hasła."
msgid "Password saved."
msgstr "Zapisano hasło."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Ścieżki"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
-msgstr "Ustawienia ścieżki i serwera dla tej strony StatusNet."
+msgstr "Ustawienia ścieżki i serwera dla tej witryny StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Katalog motywu jest nieczytelny: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Katalog awatara jest niezapisywalny: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Katalog tła jest niezapisywalny: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Katalog lokalizacji jest nieczytelny: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
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:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
-msgstr "Strona"
+msgstr "Witryny"
+
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Serwer"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nazwa komputera serwera strony."
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Ścieżka"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
-msgstr "Ścieżka do strony"
+msgstr "Ścieżka do witryny"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Ścieżka do lokalizacji"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Ścieżka do katalogu lokalizacji"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Eleganckie adresu URL"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+"Używać eleganckich (bardziej czytelnych i łatwiejszych do zapamiętania) "
+"adresów URL?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Motyw"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Serwer motywu"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Ścieżka do motywu"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Katalog motywu"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Awatary"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Serwer awatara"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Ścieżka do awatara"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Katalog awatara"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "TÅ‚a"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Serwer tła"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Ścieżka do tła"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Katalog tła"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nigdy"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Czasem"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Zawsze"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Użycie SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Kiedy używać SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Serwer SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Serwer do przekierowywania żądań SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Ścieżki zapisu"
@@ -2516,14 +2686,14 @@ 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Ä… strony \"%2$s\"."
+msgstr "Licencja wpisu \"%1$s\" nie jest zgodna z licencjÄ… witryny \"%2$s\"."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2545,19 +2715,19 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Strona domowa"
#: actions/profilesettings.php:117 actions/register.php:455
msgid "URL of your homepage, blog, or profile on another site"
-msgstr "Adres URL strony domowej, bloga lub profilu na innej stronie"
+msgstr "Adres URL strony domowej, bloga lub profilu na innej witrynie"
#: actions/profilesettings.php:122 actions/register.php:461
#, php-format
@@ -2573,8 +2743,8 @@ msgid "Bio"
msgstr "O mnie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Położenie"
@@ -2600,7 +2770,7 @@ msgstr ""
"Znaczniki dla siebie (litery, liczby, -, . i _), oddzielone przecinkami lub "
"spacjami"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Język"
@@ -2627,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Nie wybrano strefy czasowej."
@@ -2640,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."
@@ -2669,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Kanał publicznego strumienia (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Kanał publicznego strumienia (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Kanał publicznego strumienia (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2699,11 +2870,11 @@ msgstr ""
"To jest publiczna oÅ› czasu dla %%site.name%%, ale nikt jeszcze nic nie "
"wysłał."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Zostań pierwszym, który coś wyśle."
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2711,7 +2882,7 @@ msgstr ""
"Dlaczego nie [zarejestrujesz konta](%%action.register%%) i zostaniesz "
"pierwszym, który coś wyśle."
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2724,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2762,7 +2933,7 @@ msgstr ""
"Dlaczego nie [zarejestrujesz konta](%%action.register%%) i zostaniesz "
"pierwszym, który go wyśle."
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Chmura znaczników"
@@ -2902,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Zarejestruj siÄ™"
@@ -2946,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3024,7 +3194,7 @@ msgid ""
msgstr ""
"Aby subskrybować, można [zalogować się](%%action.login%%) lub [zarejestrować]"
"(%%action.register%%) nowe konto. Jeśli już posiadasz konto na [zgodnej "
-"stronie mikroblogowania](%%doc.openmublog%%), podaj poniżej adres URL "
+"witrynie mikroblogowania](%%doc.openmublog%%), podaj poniżej adres URL "
"profilu."
#: actions/remotesubscribe.php:112
@@ -3052,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"
@@ -3090,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Powtórzono"
@@ -3098,28 +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:144
+#: 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: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 "
@@ -3128,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 "
@@ -3137,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 "
@@ -3151,83 +3326,128 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
-msgstr "Nie można ograniczać użytkowników na tej stronie."
+msgstr "Nie można ograniczać użytkowników na tej witrynie."
#: actions/sandbox.php:72
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:390
+msgid "Sessions"
+msgstr "Sesje"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Ustawienia sesji tej witryny StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Obsługa sesji"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Czy samodzielnie obsługiwać sesje."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Debugowanie sesji"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Włącza wyjście debugowania dla sesji."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Zapisz ustawienia witryny"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr "Musisz być zalogowany, aby wyświetlić aplikację."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Profil aplikacji"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Ikona"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nazwa"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Organizacja"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Opis"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statystyki"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "utworzona przez %1$s - domyślny dostęp: %2$s - %3$d użytkowników"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Utworzona przez %1$s - domyślny dostęp: %2$s - %3$d użytkowników"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "Czynności aplikacji"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Przywrócenie klucza i sekretu"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Informacje o aplikacji"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Klucz klienta"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Sekret klienta"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "Adres URL tokenu żądania"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "Adres URL tokenu żądania"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Adres URL upoważnienia"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3235,26 +3455,35 @@ msgstr ""
"Uwaga: obsługiwane są podpisy HMAC-SHA1. Metoda podpisu w zwykłym tekście "
"nie jest obsługiwana."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Jesteś pewien, że chcesz przywrócić klucz i sekret klienta?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Ulubione wpisy użytkownika %1$s, strona %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3263,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 "
@@ -3272,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 "
@@ -3283,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."
@@ -3292,67 +3521,72 @@ msgstr "To jest sposób na współdzielenie tego, co chcesz."
msgid "%s group"
msgstr "Grupa %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Grupa %1$s, strona %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Profil grupy"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3368,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."
@@ -3381,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"
@@ -3412,6 +3646,11 @@ msgstr "Usunięto wpis."
msgid " tagged %s"
msgstr " ze znacznikiem %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, strona %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3437,13 +3676,13 @@ msgstr "Kanał wpisów dla %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF dla %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"To jest oś czasu dla użytkownika %1$s, ale %2$s nie nic jeszcze nie wysłał."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3451,7 +3690,7 @@ msgstr ""
"Widziałeś ostatnio coś interesującego? Nie wysłałeś jeszcze żadnych wpisów, "
"teraz jest dobry czas, aby zacząć. :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3460,7 +3699,7 @@ msgstr ""
"Można spróbować szturchnąć użytkownika %1$s lub [wysłać coś, co wymaga jego "
"uwagi](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3474,7 +3713,7 @@ msgstr ""
"obserwować wpisy użytkownika **%s** i wiele więcej. ([Przeczytaj więcej](%%%%"
"doc.help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3485,215 +3724,152 @@ msgstr ""
"pl.wikipedia.org/wiki/Mikroblog) opartej na wolnym narzędziu [StatusNet]"
"(http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Powtórzenia %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
-msgstr "Nie można wyciszać użytkowników na tej stronie."
+msgstr "Nie można wyciszać użytkowników na tej witrynie."
#: actions/silence.php:72
msgid "User is already silenced."
msgstr "Użytkownik jest już wyciszony."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Podstawowe ustawienia tej strony StatusNet."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Podstawowe ustawienia tej witryny StatusNet."
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
-msgstr "Nazwa strony nie może mieć zerową długość."
+msgstr "Nazwa witryny nie może mieć zerową długość."
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Nieznany język \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Nieprawidłowy adres URL zgłaszania migawek."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Nieprawidłowa wartość wykonania migawki."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "Częstotliwość migawek musi być liczbą."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Maksymalne ograniczenie tekstu to 14 znaków."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Ogólne"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
-msgstr "Nazwa strony"
+msgstr "Nazwa witryny"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Nazwa strony, taka jak \"Mikroblog firmy X\""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Dostarczane przez"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Adres URL \"Dostarczane przez\""
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
-msgstr "Kontaktowy adres e-mail strony"
+msgstr "Kontaktowy adres e-mail witryny"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalne"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Domyślna strefa czasowa"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
-msgstr "Domyśla strefa czasowa strony, zwykle UTC."
-
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr "Domyślny język strony"
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "Adresy URL"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Serwer"
+msgstr "Domyśla strefa czasowa witryny, zwykle UTC."
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nazwa komputera serwera strony."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Eleganckie adresu URL"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
+msgstr "Domyślny język witryny"
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Używać eleganckich (bardziej czytelnych i łatwiejszych do zapamiętania) "
-"adresów URL?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Dostęp"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Prywatna"
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Zabronić anonimowym użytkownikom (niezalogowanym) przeglądać stronę?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Tylko zaproszeni"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Rejestracja tylko za zaproszeniem."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Zamknięte"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Wyłączenie nowych rejestracji."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Migawki"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Losowo podczas trafienia WWW"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Jako zaplanowane zadanie"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Migawki danych"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Kiedy wysyłać dane statystyczne na serwery status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Częstotliwość"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Migawki będą wysyłane co N trafień WWW"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "Adres URL zgłaszania"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Migawki będą wysyłane na ten adres URL"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ograniczenia"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ograniczenie tekstu"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksymalna liczba znaków wpisów."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ograniczenie duplikatów"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Zapisz ustawienia strony"
+#: 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"
@@ -3794,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:107
+msgid "No such profile."
+msgstr "Nie ma takiego profilu."
-#: actions/subscribe.php:69
+#: 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"
@@ -3870,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 "
@@ -3886,30 +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:86
+#: 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: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)"
@@ -3927,7 +4179,8 @@ msgstr "Znacznik %s"
msgid "User profile"
msgstr "Profil użytkownika"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Zdjęcie"
@@ -3963,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."
@@ -3987,22 +4240,24 @@ msgstr "Brak identyfikatora profilu w żądaniu."
msgid "Unsubscribed"
msgstr "Zrezygnowano z subskrypcji"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
"Licencja nasłuchiwanego strumienia \"%1$s\" nie jest zgodna z licencją "
-"strony \"%2$s\"."
+"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 strony StatusNet."
+msgstr "Ustawienia użytkownika dla tej witryny StatusNet."
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
@@ -4062,26 +4317,6 @@ msgstr "Zaproszenia są włączone"
msgid "Whether to allow users to invite new users."
msgstr "Czy zezwolić użytkownikom zapraszanie nowych użytkowników."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sesje"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Obsługa sesji"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Czy samodzielnie obsługiwać sesje."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Debugowanie sesji"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Włącza wyjście debugowania dla sesji."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Upoważnij subskrypcję"
@@ -4096,88 +4331,88 @@ msgstr ""
"wpisy tego użytkownika. Jeżeli nie prosiłeś o subskrypcję czyichś wpisów, "
"naciśnij \"Odrzuć\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licencja"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Zaakceptuj"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Subskrybuj tego użytkownika"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Odrzuć"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Odrzuć tę subskrypcję"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Brak żądania upoważnienia."
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Upoważniono subskrypcję"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
"Subskrypcja została upoważniona, ale nie przekazano zwrotnego adresu URL. "
-"Sprawdź w instrukcjach strony, jak upoważnić subskrypcję. Token subskrypcji:"
+"Sprawdź w instrukcjach witryny, jak upoważnić subskrypcję. Token subskrypcji:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Odrzucono subskrypcjÄ™"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
"Subskrypcja została odrzucona, ale nie przekazano zwrotnego adresu URL. "
-"Sprawdź w instrukcjach strony, jak w pełni odrzucić subskrypcję."
+"Sprawdź w instrukcjach witryny, jak w pełni odrzucić subskrypcję."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "Adres URI nasłuchującego \"%s\" nie został tutaj odnaleziony."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "Adres URI nasłuchującego \"%s\" jest za długi."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "Adres URI nasłuchującego \"%s\" jest lokalnym użytkownikiem."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "Adres URL profilu \"%s\" jest dla lokalnego użytkownika."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "Adres URL \"%s\" jest nieprawidłowy."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Nie można odczytać adresu URL awatara \"%s\"."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Błędny typ obrazu dla adresu URL awatara \"%s\"."
@@ -4197,20 +4432,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Smacznego hot-doga."
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Grupy użytkownika %1$s, strona %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4222,13 +4468,9 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
-"Ta strona korzysta z oprogramowania %1$s w wersji %2$s, Copyright 2008-2010 "
+"Ta witryna korzysta z oprogramowania %1$s w wersji %2$s, Copyright 2008-2010 "
"StatusNet, Inc. i współtwórcy."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Współtwórcy"
@@ -4272,7 +4514,7 @@ msgstr ""
msgid "Plugins"
msgstr "Wtyczki"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersja"
@@ -4314,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"
@@ -4331,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:171
+#: 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:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem podczas zapisywania wpisu. Za długi."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4359,37 +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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
-msgstr "Zabroniono ci wysyłania wpisów na tej stronie."
+msgstr "Zabroniono ci wysyłania wpisów na tej witrynie."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem podczas zapisywania wpisu."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania odpowiedzi: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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"
@@ -4427,124 +4709,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bez nazwy"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
-msgstr "Główna nawigacja strony"
+msgstr "Główna nawigacja witryny"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Strona domowa"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Połącz"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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ę strony"
+msgstr "Zmień konfigurację witryny"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ZaproÅ›"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administrator"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Wyloguj siÄ™"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ZaproÅ›"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Wyloguj siÄ™ ze strony"
+msgstr "Wyloguj siÄ™ z witryny"
-#: lib/action.php:457
+#: 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:460
+#: 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 stronÄ™"
+msgstr "Zaloguj siÄ™ na witrynie"
-#: lib/action.php:463 lib/action.php:726
-msgid "Help"
-msgstr "Pomoc"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Zaloguj siÄ™"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomóż mi."
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Wyszukaj"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Pomoc"
-#: lib/action.php:466
+#. 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:487
+#: 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 strony"
+msgstr "Wpis witryny"
-#: lib/action.php:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokalne widoki"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Wpis strony"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
-msgstr "Druga nawigacja strony"
+msgstr "Druga nawigacja witryny"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Pomoc"
+
+#: lib/action.php:754
msgid "About"
msgstr "O usłudze"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Prywatność"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Kod źródłowy"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Odznaka"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencja oprogramowania StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4553,12 +4898,12 @@ msgstr ""
"**%%site.name%%** jest usługą mikroblogowania prowadzoną przez [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** jest usługą mikroblogowania. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4569,130 +4914,217 @@ 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:795
+#: lib/action.php:821
msgid "Site content license"
-msgstr "Licencja zawartości strony"
+msgstr "Licencja zawartości witryny"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Treść i dane %1$s są prywatne i poufne."
-#: lib/action.php:805
+#: 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:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Wszystko "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licencja."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginacja"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Później"
-#: lib/action.php:1141
+#: 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 strony."
+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 strony"
+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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguracja ścieżek"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Konfiguracja sesji"
+
+#. 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:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+"Próba uwierzytelnienia API nie powiodła się, pseudonim = %1$s, pośrednik = %2"
+"$s, IP = %3$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Zmodyfikuj aplikacjÄ™"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Ikona tej aplikacji"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Opisz aplikacjÄ™ w %d znakach"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Opisz aplikacjÄ™"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "Źródłowy adres URL"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "Adres URL strony domowej tej aplikacji"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "Organizacja odpowiedzialna za tÄ™ aplikacjÄ™"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "Adres URL strony domowej organizacji"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "Adres URL do przekierowania po uwierzytelnieniu"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "PrzeglÄ…darka"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "Pulpit"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Typ aplikacji, przeglÄ…darka lub pulpit"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Tylko do odczytu"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Odczyt i zapis"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Domyślny dostęp do tej aplikacji: tylko do odczytu lub do odczytu i zapisu"
@@ -4721,11 +5153,11 @@ msgstr "Powiadamia, kiedy pojawia się ten załącznik"
msgid "Tags for this attachment"
msgstr "Znaczniki dla tego załącznika"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Zmiana hasła nie powiodła się"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Zmiana hasła nie jest dozwolona"
@@ -4876,85 +5308,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"
@@ -4968,6 +5409,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"
@@ -4998,14 +5440,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"
@@ -5034,19 +5477,19 @@ msgstr ""
"tracks - jeszcze nie zaimplementowano\n"
"tracking - jeszcze nie zaimplementowano\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Nie odnaleziono pliku konfiguracji."
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Przejdź do instalatora."
@@ -5143,6 +5586,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"
@@ -5236,32 +5684,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Nieznane źródło skrzynki odbiorczej %d."
@@ -5543,7 +5991,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"
@@ -5633,6 +6081,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"
@@ -5666,48 +6119,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "w rozmowie"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Powtórzone przez"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Odpowiedz na ten wpis"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Odpowiedz"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Powtórzono wpis"
@@ -5739,11 +6192,7 @@ msgstr "BÅ‚Ä…d podczas wprowadzania zdalnego profilu"
msgid "Duplicate notice"
msgstr "Duplikat wpisu"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Zablokowano subskrybowanie."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Nie można wprowadzić nowej subskrypcji."
@@ -5759,19 +6208,19 @@ msgstr "Odpowiedzi"
msgid "Favorites"
msgstr "Ulubione"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Odebrane"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Wiadomości przychodzące"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Wysłane"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Wysłane wiadomości"
@@ -5784,7 +6233,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"
@@ -5792,23 +6241,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"
@@ -5848,6 +6297,16 @@ msgstr "Powtórzyć ten wpis?"
msgid "Repeat this notice"
msgstr "Powtórz ten wpis"
+#: 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."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Ogranicz"
@@ -5858,12 +6317,16 @@ msgstr "Ogranicz tego użytkownika"
#: lib/searchaction.php:120
msgid "Search site"
-msgstr "Przeszukaj stronÄ™"
+msgstr "Przeszukaj witrynÄ™"
#: lib/searchaction.php:126
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"
@@ -5874,7 +6337,7 @@ msgstr "Osoby"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr "Znajdź osoby na tej stronie"
+msgstr "Znajdź osoby na tej witrynie"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
@@ -5882,7 +6345,7 @@ msgstr "Przeszukaj zawartość wpisów"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
-msgstr "Znajdź grupy na tej stronie"
+msgstr "Znajdź grupy na tej witrynie"
#: lib/section.php:89
msgid "Untitled section"
@@ -5915,33 +6378,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
@@ -5993,67 +6437,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "około rok temu"
@@ -6069,7 +6530,7 @@ msgstr ""
"%s nie jest prawidłowym kolorem. Użyj trzech lub sześciu znaków "
"szesnastkowych."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d."
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index 9b136debd..27e75fe97 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,23 +9,86 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:17+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:27+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Acesso"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Gravar configurações do site"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Registar"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privado"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Permitir o registo só a convidados."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Só por convite"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Impossibilitar registos novos."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fechado"
+
+#. 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/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
@@ -34,58 +97,65 @@ msgstr "Página não encontrada."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 "
@@ -94,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 "
@@ -103,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:202
+#: 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 "
@@ -112,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!"
@@ -127,22 +199,22 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -157,7 +229,7 @@ msgstr "Método da API não encontrado."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requer um POST."
@@ -176,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."
@@ -187,7 +260,7 @@ msgstr "Não foi possível gravar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -203,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."
@@ -307,76 +380,76 @@ msgstr "Não pode deixar de seguir-se a si próprio."
msgid "Two user ids or screen_names must be supplied."
msgstr "Devem ser fornecidos dois nomes de utilizador ou utilizadors."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Não foi possível determinar o utilizador de origem."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -387,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."
@@ -404,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."
@@ -424,99 +497,113 @@ msgstr "Grupos de %s"
msgid "groups on %s"
msgstr "Grupos em %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Ocorreu um problema com a sua sessão. Por favor, tente novamente."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Nome de utilizador ou senha inválidos."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Erro ao configurar utilizador."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Erro na base de dados ao inserir a marca: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Envio inesperado de formulário."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "Conta"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Utilizador"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Senha"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
#, fuzzy
msgid "Deny"
msgstr "Estilo"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "Todas"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -549,17 +636,17 @@ msgstr "Estado apagado."
msgid "No status with that ID found."
msgstr "Não foi encontrado um estado com esse ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Demasiado longo. Tamanho máx. das notas é %d caracteres."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Não encontrado"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Tamanho máx. das notas é %d caracteres, incluíndo a URL do anexo."
@@ -573,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"
@@ -610,27 +685,22 @@ msgstr "Notas públicas de %s"
msgid "%s updates from everyone!"
msgstr "%s actualizações de todos!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repetida por %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -646,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."
@@ -659,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"
@@ -676,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -707,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."
@@ -741,22 +810,23 @@ msgstr ""
"subscrição por este utilizador será cancelada, ele não poderá subscrevê-lo "
"de futuro e você não receberá notificações das @-respostas dele."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Sim"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Bloquear este utilizador"
@@ -764,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"
@@ -853,16 +927,64 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Precisa de iniciar sessão para editar um grupo."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Nota não tem perfil"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Ocorreu um problema com a sua sessão."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Nota não encontrada."
+
+#: actions/deleteapplication.php:149
+#, fuzzy
+msgid ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+msgstr ""
+"Tem 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/deleteapplication.php:156
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Não apagar esta nota"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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."
@@ -891,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Apagar esta nota"
@@ -907,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."
@@ -915,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"
@@ -1025,12 +1147,13 @@ msgstr "Repor predefinição"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1046,35 +1169,27 @@ msgstr "Esta nota não é uma favorita!"
msgid "Add to favorites"
msgstr "Adicionar às favoritas"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Documento não encontrado."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Outras opções"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Precisa de iniciar sessão para editar um grupo."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Não é membro deste grupo."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Nota não encontrada."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Ocorreu um problema com a sua sessão."
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1085,48 +1200,53 @@ msgstr "Use este formulário para editar o grupo."
msgid "Name is required."
msgstr "Repita a senha acima. Obrigatório."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Nome completo demasiado longo (máx. 255 caracteres)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Utilizador já é usado. Tente outro."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Descrição"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "A URL ‘%s’ do avatar é inválida."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Localidade demasiado longa (máx. 255 caracteres)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
#, fuzzy
msgid "Callback URL is not valid."
msgstr "A URL ‘%s’ do avatar é inválida."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Não foi possível actualizar o grupo."
@@ -1140,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."
@@ -1199,8 +1319,8 @@ msgstr ""
"na caixa de spam!) uma mensagem com mais instruções."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancelar"
@@ -1285,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correio electrónico é inválido."
@@ -1297,7 +1417,7 @@ msgstr "Esse já é o seu endereço electrónico."
msgid "That email address already belongs to another user."
msgstr "Esse endereço electrónico já pertence a outro utilizador."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Não foi possível inserir o código de confirmação."
@@ -1359,7 +1479,7 @@ msgstr "Esta nota já é uma favorita!"
msgid "Disfavor favorite"
msgstr "Retirar das favoritas"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Notas populares"
@@ -1477,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
@@ -1506,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear acesso do utilizador ao grupo"
@@ -1541,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."
@@ -1553,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."
@@ -1574,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Gestor"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Tornar utilizador o gestor do grupo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tornar Gestor"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1800,6 +1945,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Esse não é o seu Jabber ID."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Caixa de entrada de %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1884,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"
@@ -1953,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"
@@ -1962,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"
@@ -1983,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Entrar"
@@ -2023,21 +2180,21 @@ msgstr ""
"Entrar com o seu nome de utilizador e senha. Ainda não está registado? "
"[Registe](%%action.register%%) uma conta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Só um gestor pode tornar outro utilizador num gestor."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s já é um administrador do grupo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Não existe registo de %1$s ter entrado no grupo %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Não é possível tornar %1$s administrador do grupo %2$s."
@@ -2047,8 +2204,9 @@ msgid "No current status"
msgstr "Sem estado actual"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Nota não encontrada."
#: actions/newapplication.php:64
#, fuzzy
@@ -2060,11 +2218,11 @@ msgstr "Tem de iniciar uma sessão para criar o grupo."
msgid "Use this form to register a new application."
msgstr "Use este formulário para criar um grupo novo."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Não foi possível criar sinónimos."
@@ -2200,29 +2358,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Não é um membro desse grupo."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2243,8 +2401,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2314,6 +2472,11 @@ msgstr "Chave inválida ou expirada."
msgid "Login token expired."
msgstr "Iniciar sessão no site"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Caixa de saída de %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2385,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:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Localizações"
@@ -2393,132 +2557,147 @@ msgstr "Localizações"
msgid "Path and server settings for this StatusNet site."
msgstr "Configurações de localização e servidor deste site StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Sem acesso de leitura do directório do tema: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Sem acesso de escrita no directório do avatar: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Sem acesso de escrita no directório do fundo: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Sem acesso de leitura ao directório de idiomas: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Servidor SSL inválido. O tamanho máximo é 255 caracteres."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Site"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servidor"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nome do servidor do site."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Localização"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Localização do site"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Localização de idiomas"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Localização do directório de idiomas"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URLs bonitas"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Usar URLs bonitas (mais legíveis e memoráveis)"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Tema"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Servidor do tema"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Localização do tema"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Directório do tema"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatares"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Servidor do avatar"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Localização do avatar"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Directório do avatar"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Fundos"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Servidor de fundos"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Localização dos fundos"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Directório dos fundos"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Às vezes"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Sempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Usar SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Quando usar SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Servidor SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Servidor para onde encaminhar pedidos SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Gravar localizações"
@@ -2546,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 ""
@@ -2576,13 +2755,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Página pessoal"
@@ -2604,8 +2783,8 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Localidade"
@@ -2631,7 +2810,7 @@ msgstr ""
"Categorias para si (letras, números, -, ., _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2657,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horário não foi seleccionado."
@@ -2670,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."
@@ -2699,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fonte de Notas Públicas (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fonte de Notas Públicas (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fonte de Notas Públicas (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2729,11 +2909,11 @@ msgstr ""
"Estas são as notas públicas do site %%site.name%% mas ninguém publicou nada "
"ainda."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Seja a primeira pessoa a publicar!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2741,7 +2921,7 @@ msgstr ""
"Podia [registar uma conta](%%action.register%%) e ser a primeira pessoa a "
"publicar!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2754,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2792,7 +2972,7 @@ msgstr ""
"Podia [registar uma conta](%%action.register%%) e ser a primeira pessoa a "
"publicar uma!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Nuvem de categorias"
@@ -2936,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registar"
@@ -2979,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correio"
@@ -3085,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"
@@ -3123,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetida"
@@ -3131,28 +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:144
+#: 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: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 "
@@ -3161,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 "
@@ -3170,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 "
@@ -3184,6 +3368,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Não pode impedir notas públicas neste site."
@@ -3192,104 +3390,146 @@ 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:390
+msgid "Sessions"
+msgstr "Sessões"
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "Configurações do estilo deste site StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gerir sessões"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Se devemos gerir sessões nós próprios."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Depuração de sessões"
+
+#: actions/sessionsadminpanel.php:183
+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:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Gravar configurações do site"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Precisa de iniciar uma sessão para deixar um grupo."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Nota não tem perfil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nome"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Paginação"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "Autor"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Tem a certeza de que quer apagar esta nota?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Notas favoritas de %s"
+
#: actions/showfavorites.php:132
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."
@@ -3298,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 "
@@ -3307,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 "
@@ -3318,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."
@@ -3327,67 +3567,72 @@ msgstr "Esta é uma forma de partilhar aquilo de que gosta."
msgid "%s group"
msgstr "Grupo %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Membros do grupo %1$s, página %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3403,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."
@@ -3416,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"
@@ -3447,6 +3692,11 @@ msgstr "Avatar actualizado."
msgid " tagged %s"
msgstr " categorizou %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "Perfis bloqueados de %1$s, página %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3472,12 +3722,12 @@ msgstr "Fonte de notas para %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF para %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Estas são as notas de %1$s, mas %2$s ainda não publicou nenhuma."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3485,7 +3735,7 @@ msgstr ""
"Viu algo de interessante ultimamente? Como ainda não publicou nenhuma nota, "
"esta seria uma óptima altura para começar :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3494,7 +3744,7 @@ msgstr ""
"Pode tentar dar um toque em %1$s ou [publicar algo à sua atenção](%%%%action."
"newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3508,7 +3758,7 @@ msgstr ""
"register%%) para seguir as notas de **%s** e de muitos mais! ([Saber mais](%%"
"doc.help%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3519,7 +3769,7 @@ msgstr ""
"(http://en.wikipedia.org/wiki/Micro-blogging) baseado no programa de "
"Software Livre [StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Repetência de %s"
@@ -3533,199 +3783,138 @@ 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:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Língua desconhecida \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "URL para onde enviar instantâneos é inválida"
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Valor de criação do instantâneo é inválido."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "Frequência dos instantâneos estatísticos tem de ser um número."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "O valor mínimo de limite para o texto é 140 caracteres."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL da atribuição"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: 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:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário, por omissão"
-#: actions/siteadminpanel.php:289
+#: 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:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma do site, por omissão"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URLs"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Servidor"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nome do servidor do site."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "URLs bonitas"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Usar URLs bonitas (mais legíveis e memoráveis)"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Acesso"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privado"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Proibir utilizadores anónimos (sem sessão iniciada) de ver o site?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Só por convite"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Permitir o registo só a convidados."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Fechado"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Impossibilitar registos novos."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Instantâneos"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente, durante o acesso pela internet"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Num processo agendado"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Instantâneos dos dados"
-
-#: actions/siteadminpanel.php:348
-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:353
-msgid "Frequency"
-msgstr "Frequência"
-
-#: actions/siteadminpanel.php:354
-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:359
-msgid "Report URL"
-msgstr "URL para relatórios"
-
-#: actions/siteadminpanel.php:360
-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:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres nas notas."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicações"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Gravar configurações do site"
+#: 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"
@@ -3827,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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Subscrito"
@@ -3903,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 "
@@ -3919,30 +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:86
+#: 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: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)"
@@ -3960,7 +4225,8 @@ msgstr "Categoria %s"
msgid "User profile"
msgstr "Perfil"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -3995,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."
@@ -4019,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:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4027,12 +4293,14 @@ 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."
@@ -4094,26 +4362,6 @@ msgstr "Convites habilitados"
msgid "Whether to allow users to invite new users."
msgstr "Permitir, ou não, que utilizadores convidem utilizadores novos."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessões"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Gerir sessões"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Se devemos gerir sessões nós próprios."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Depuração de sessões"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Ligar a impressão de dados de depuração, para sessões."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autorizar subscrição"
@@ -4128,36 +4376,36 @@ msgstr ""
"subscrever as notas deste utilizador. Se não fez um pedido para subscrever "
"as notas de alguém, simplesmente clique \"Rejeitar\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licença"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Aceitar"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Subscrever este utilizador"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Rejeitar"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Rejeitar esta subscrição"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Não há pedido de autorização!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Subscrição autorizada"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4167,11 +4415,11 @@ msgstr ""
"Verifique as instruções do site para saber como autorizar a subscrição. A "
"sua chave de subscrição é:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Subscrição rejeitada"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4181,37 +4429,37 @@ msgstr ""
"Verifique as instruções do site para saber como rejeitar completamente a "
"subscrição."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "A listener URI ‘%s’ não foi encontrada aqui."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "URI do escutado ‘%s’ é demasiado longo."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "URI do ouvido ‘%s’ é um utilizador local."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "A URL ‘%s’ do perfil é de um utilizador local."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "A URL ‘%s’ do avatar é inválida."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Não é possível ler a URL do avatar ‘%s’."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imagem incorrecto para o avatar da URL ‘%s’."
@@ -4232,20 +4480,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Disfrute do seu cachorro-quente!"
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Membros do grupo %1$s, página %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4260,10 +4519,6 @@ msgstr ""
"Este site utiliza o %1$s versão %2$s, (c) 2008-2010 StatusNet, Inc. e "
"colaboradores."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Colaboradores"
@@ -4304,7 +4559,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
@@ -4347,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"
@@ -4364,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:171
+#: 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:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema na gravação da nota. Demasiado longa."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema na gravação da nota. Utilizador desconhecido."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4392,37 +4652,76 @@ msgstr ""
"Demasiadas mensagens duplicadas, demasiado rápido; descanse e volte a "
"publicar daqui a alguns minutos."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Ocorreu um erro na base de dados ao inserir a resposta: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Problema na gravação da nota."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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"
@@ -4460,124 +4759,187 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária deste site"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Início"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Ligar"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convidar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Gestor"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convidar"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Entrar"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Pesquisa"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locais"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso da página"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária deste site"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Código"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblema"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença de software do StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4586,12 +4948,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblogues. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4602,134 +4964,216 @@ msgstr ""
"disponibilizado nos termos da [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença de conteúdos do site"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Tudo "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriores"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração das localizações"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Configuração do estilo"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Descreva o grupo ou o assunto em %d caracteres"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Descreva o grupo ou assunto"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Código"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL da página ou do blogue, deste grupo ou assunto"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL da página ou do blogue, deste grupo ou assunto"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4758,11 +5202,11 @@ msgstr "Notas em que este anexo aparece"
msgid "Tags for this attachment"
msgstr "Categorias para este anexo"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: 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:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Não é permitido mudar a palavra-chave"
@@ -4913,82 +5357,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"
@@ -5002,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"
@@ -5066,19 +5522,19 @@ msgstr ""
"tracks - ainda não implementado.\n"
"tracking - ainda não implementado.\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ficheiro de configuração não encontrado. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5178,6 +5634,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"
@@ -5268,32 +5729,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Língua desconhecida \"%s\"."
@@ -5574,7 +6035,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"
@@ -5667,6 +6128,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"
@@ -5699,48 +6166,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder a esta nota"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Nota repetida"
@@ -5772,11 +6239,7 @@ msgstr "Erro ao inserir perfil remoto"
msgid "Duplicate notice"
msgstr "Nota duplicada"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Foi bloqueado de fazer subscrições"
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Não foi possível inserir nova subscrição."
@@ -5792,19 +6255,19 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritas"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Recebidas"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Mensagens recebidas"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Enviadas"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Mensagens enviadas"
@@ -5817,7 +6280,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"
@@ -5825,23 +6288,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"
@@ -5881,6 +6344,15 @@ msgstr "Repetir esta nota?"
msgid "Repeat this notice"
msgstr "Repetir esta nota"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Bloquear notas públicas"
@@ -5897,6 +6369,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"
@@ -5948,33 +6424,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
@@ -6026,67 +6483,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "há cerca de um ano"
@@ -6100,7 +6574,7 @@ msgstr "%s não é uma cor válida!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s não é uma cor válida! Use 3 ou 6 caracteres hexadecimais."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d."
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index d28a14e68..65061f02d 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -2,6 +2,7 @@
#
# Author@translatewiki.net: Aracnus
# Author@translatewiki.net: Ewout
+# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Vuln
# --
# This file is distributed under the same license as the StatusNet package.
@@ -10,23 +11,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:21+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:30+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Acesso"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Configurações de acesso ao site"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registro"
+
+#. 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
+#, fuzzy
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Particular"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Cadastro liberado somente para convidados."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Somente convidados"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Desabilita novos registros."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Fechado"
+
+#. 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/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
@@ -35,51 +96,58 @@ msgstr "Esta página não existe."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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."
@@ -87,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 "
@@ -96,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 "
@@ -106,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:202
+#: 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 "
@@ -115,12 +184,13 @@ 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"
-#: actions/allrss.php:119 actions/apitimelinefriends.php:121
-#: actions/apitimelinehome.php:122
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
msgstr "Atualizações de %1$s e amigos no %2$s!"
@@ -130,22 +200,22 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "O método da API não foi encontrado!"
@@ -160,7 +230,7 @@ msgstr "O método da API não foi encontrado!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requer um POST."
@@ -180,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."
@@ -191,7 +262,7 @@ msgstr "Não foi possível salvar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -207,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."
@@ -311,15 +382,15 @@ msgstr "Você não pode deixar de seguir você mesmo!"
msgid "Two user ids or screen_names must be supplied."
msgstr "Duas IDs de usuário ou screen_names devem ser informados."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Não foi possível determinar o usuário de origem."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -327,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -393,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."
@@ -410,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."
@@ -430,44 +501,48 @@ msgstr "Grupos de %s"
msgid "groups on %s"
msgstr "grupos no %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Requisição errada."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Não foi fornecido nenhum parâmetro oauth_token"
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Token inválido."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
"Ocorreu um problema com o seu token de sessão. Tente novamente, por favor."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Nome de usuário e/ou senha inválido(s)!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr ""
-"Erro no banco de dados durante a exclusão do aplicativo OAuth do usuário."
+"Erro no banco de dados durante a exclusão do usuário da aplicação OAuth."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr ""
-"Erro no banco de dados durante a inserção do aplicativo OAuth do usuário."
+"Erro no banco de dados durante a inserção do usuário da aplicativo OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
@@ -476,53 +551,66 @@ msgstr ""
"O token de requisição %s foi autorizado. Por favor, troque-o por um token de "
"acesso."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "O token de requisição %s foi negado."
+msgid "The request token %s has been denied and revoked."
+msgstr "O token %s solicitado foi negado e revogado."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Submissão inesperada de formulário."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "Uma aplicação gostaria de se conectar à sua conta"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Permitir ou negar o acesso"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"A aplicação <strong>%1$s</strong> por <strong>%2$s</strong> solicita a "
+"permissão para <strong>%3$s</strong> os dados da sua conta %4$s. Você deve "
+"fornecer acesso à sua conta %4$s somente para terceiros nos quais você "
+"confia."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conta"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Usuário"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Senha"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Negar"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Permitir"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Permitir ou negar o acesso às informações da sua conta."
@@ -555,17 +643,17 @@ msgstr "A mensagem foi excluída."
msgid "No status with that ID found."
msgstr "Não foi encontrada nenhuma mensagem com esse ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Está muito extenso. O tamanho máximo é de %s caracteres."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Não encontrado"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "O tamanho máximo da mensagem é de %s caracteres"
@@ -579,23 +667,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 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:117 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"
@@ -616,27 +692,22 @@ msgstr "Mensagens públicas de %s"
msgid "%s updates from everyone!"
msgstr "%s mensagens de todo mundo!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Repetida por %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
msgid "Repeated to %s"
msgstr "Repetida para %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
msgstr "Repetições de %s"
-#: 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"
-#: actions/apitimelinetag.php:108 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mensagens etiquetadas como %1$s no %2$s!"
@@ -652,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."
@@ -665,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"
@@ -683,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -714,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."
@@ -749,22 +819,23 @@ msgstr ""
"nenhuma notificação acerca de qualquer citação (@usuário) que ele fizer de "
"você."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Sim"
-#: actions/block.php:144 actions/groupmembers.php:346 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"
@@ -772,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"
@@ -860,16 +935,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Você precisa estar autenticado para excluir uma aplicação."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "A aplicação não foi encontrada."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Ocorreu um problema com o seu token de sessão."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Excluir a aplicação"
+
+#: 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 ""
+"Tem certeza que deseja excluir esta aplicação? Isso eliminará todos os dados "
+"desta aplicação do banco de dados, incluindo todas as conexões existentes "
+"com os usuários."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Não excluir esta aplicação"
+
+#: actions/deleteapplication.php:160
+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."
@@ -898,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Excluir esta mensagem"
@@ -914,20 +1031,20 @@ 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."
msgstr ""
-"Tem certeza que deseja excluir este usuário? Isso irá eliminar todos os "
-"dados deste usuário do banco de dados, sem cópia de segurança."
+"Tem certeza que deseja excluir este usuário? Isso eliminará todos os dados "
+"deste usuário do banco de dados, sem cópia de segurança."
-#: actions/deleteuser.php:148 lib/deleteuserform.php:77
+#: 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"
@@ -1032,12 +1149,13 @@ 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:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1053,32 +1171,24 @@ msgstr "Esta mensagem não é uma favorita!"
msgid "Add to favorites"
msgstr "Adicionar às favoritas"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Esse documento não existe."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "O documento \"%s\" não existe"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Editar a aplicação"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Você precisa estar autenticado para editar uma aplicação."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Você não é o dono desta aplicação."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Essa aplicação não existe."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Ocorreu um problema com o seu token de sessão."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Use este formulário para editar a sua aplicação."
@@ -1087,43 +1197,47 @@ msgstr "Use este formulário para editar a sua aplicação."
msgid "Name is required."
msgstr "O nome é obrigatório."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "O nome é muito extenso (máx. 255 caracteres)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Este nome já está em uso. Tente outro."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "A descrição é obrigatória."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "A URL da fonte é muito extensa."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "A URL da fonte não é válida."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "A organização é obrigatória."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "A organização é muito extensa (máx. 255 caracteres)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "O site da organização é obrigatório."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "O retorno é muito extenso."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "A URL de retorno não é válida."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Não foi possível atualizar a aplicação."
@@ -1136,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:390
+#: 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."
@@ -1195,8 +1309,8 @@ msgstr ""
"de spam!) por uma mensagem com mais instruções."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Cancelar"
@@ -1280,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Não é um endereço de e-mail válido."
@@ -1292,7 +1406,7 @@ msgstr "Esse já é seu endereço de e-mail."
msgid "That email address already belongs to another user."
msgstr "Esse endereço de e-mail já pertence à outro usuário."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Não foi possível inserir o código de confirmação."
@@ -1355,7 +1469,7 @@ msgstr "Essa mensagem já é uma favorita!"
msgid "Disfavor favorite"
msgstr "Desmarcar a favorita"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Mensagens populares"
@@ -1474,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
@@ -1503,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Bloquear o usuário no grupo"
@@ -1539,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."
@@ -1551,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."
@@ -1572,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Admin"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Bloquear"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Tornar o usuário um administrador do grupo"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Tornar administrador"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1800,6 +1939,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Essa não é sua ID do Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Recebidas por %s - pág. %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1883,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"
@@ -1953,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"
@@ -1962,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"
@@ -1984,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Entrar"
@@ -2024,23 +2175,23 @@ msgstr ""
"Digite seu nome de usuário e senha. Ainda não possui um usuário? [Registre](%"
"%action.register%%) uma nova conta."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Somente um administrador pode dar privilégios de administração para outro "
"usuário."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s já é um administrador do grupo \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Não foi possível obter o registro de membro de %1$s no grupo %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Não foi possível tornar %1$s um administrador do grupo %2$s."
@@ -2050,7 +2201,7 @@ msgid "No current status"
msgstr "Nenhuma mensagem atual"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Nova aplicação"
#: actions/newapplication.php:64
@@ -2061,11 +2212,11 @@ msgstr "Você deve estar autenticado para registrar uma aplicação."
msgid "Use this form to register a new application."
msgstr "Utilize este formulário para registrar uma nova aplicação."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "A URL da fonte é obrigatória."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Não foi possível criar a aplicação."
@@ -2201,28 +2352,28 @@ msgstr "Aplicações que você registrou"
msgid "You have not registered any applications yet."
msgstr "Você ainda não registrou nenhuma aplicação."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Aplicações conectadas"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr "Você permitiu que as seguintes aplicações acessem a sua conta."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Você não é um usuário dessa aplicação."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "Não foi possível revogar o acesso para a aplicação: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr "Você não autorizou nenhuma aplicação a usar a sua conta."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
"Os desenvolvedores podem editar as configurações de registro para suas "
@@ -2245,8 +2396,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2310,6 +2461,11 @@ msgstr "O token de autenticação especificado é inválido."
msgid "Login token expired."
msgstr "O token de autenticação expirou."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Enviadas por %s - pág. %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2382,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:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Caminhos"
@@ -2390,133 +2547,148 @@ msgstr "Caminhos"
msgid "Path and server settings for this StatusNet site."
msgstr "Configurações dos caminhos e do servidor para este site StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Sem permissão de leitura no diretório de temas: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Sem permissão de escrita no diretório de avatares: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Sem permissão de escrita no diretório de imagens de fundo: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Sem permissão de leitura no diretório de locales: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
"Servidor SSL inválido. O comprimento máximo deve ser de 255 caracteres."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Site"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servidor"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Nome de host do servidor do site."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Caminho"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Caminho do site"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Caminho para os locales"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Caminho do diretório de locales"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URLs limpas"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "Utilizar URLs limpas (mais legíveis e memorizáveis)?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Tema"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Servidor de temas"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Caminho dos temas"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Diretório dos temas"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatares"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Servidor de avatares"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Caminho dos avatares"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Diretório dos avatares"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Imagens de fundo"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Servidor de imagens de fundo"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Caminho das imagens de fundo"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Diretório das imagens de fundo"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Algumas vezes"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Sempre"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Usar SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Quando usar SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "Servidor SSL"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Servidor para onde devem ser direcionadas as requisições SSL"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Salvar caminhos"
@@ -2543,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 ""
@@ -2573,13 +2745,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Site"
@@ -2601,8 +2773,8 @@ msgid "Bio"
msgstr "Descrição"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Localização"
@@ -2628,7 +2800,7 @@ msgstr ""
"Suas etiquetas (letras, números, -, ., e _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2655,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "O fuso horário não foi selecionado."
@@ -2668,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."
@@ -2697,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Fonte de mensagens públicas (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Fonte de mensagens públicas (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Fonte de mensagens públicas (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2727,11 +2900,11 @@ msgstr ""
"Esse é o fluxo de mensagens públicas de %%site.name%%, mas ninguém publicou "
"nada ainda."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Seja o primeiro a publicar!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2739,7 +2912,7 @@ msgstr ""
"Por que você não [registra uma conta](%%action.register%%) pra ser o "
"primeiro a publicar?"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2752,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2790,7 +2963,7 @@ msgstr ""
"Por que você não [registra uma conta](%%action.register%%) pra ser o "
"primeiro a publicar?"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Nuvem de etiquetas"
@@ -2935,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrar-se"
@@ -2978,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3084,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"
@@ -3121,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Repetida"
@@ -3129,28 +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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Respostas para %1$s, pág. %2$d"
+
+#: 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 "
@@ -3159,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 "
@@ -3168,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 "
@@ -3183,6 +3360,20 @@ 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Você não pode colocar usuários deste site em isolamento."
@@ -3191,75 +3382,106 @@ 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:390
+msgid "Sessions"
+msgstr "Sessões"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Configurações da sessão deste site StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Gerenciar sessões"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Define se nós cuidamos do gerenciamento das sessões."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Depuração da sessão"
+
+#: actions/sessionsadminpanel.php:183
+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:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Salvar as configurações do site"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr "Você deve estar autenticado para visualizar uma aplicação."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Perfil da aplicação"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Ãcone"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Nome"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Organização"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "criado por %1$s - %2$s acessa por padrão - %3$d usuários"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Criado por %1$s - acesso %2$s por padrão - %3$d usuários"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "Ações da aplicação"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Restaurar a chave e o segredo"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Informação da aplicação"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Chave do consumidor"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Segredo do consumidor"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "URL do token de requisição"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "URL do token de acesso"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Autorizar a URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3267,26 +3489,35 @@ msgstr ""
"Nota: Nós suportamos assinaturas HMAC-SHA1. Nós não suportamos o método de "
"assinatura em texto plano."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Tem certeza que deseja restaurar sua chave e segredo de consumidor?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+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."
@@ -3295,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 "
@@ -3304,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 "
@@ -3315,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."
@@ -3324,67 +3555,72 @@ msgstr "Esta é uma forma de compartilhar o que você gosta."
msgid "%s group"
msgstr "Grupo %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Grupo %1$s, pág. %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3400,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."
@@ -3413,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"
@@ -3444,6 +3680,11 @@ msgstr "A mensagem excluída."
msgid " tagged %s"
msgstr " etiquetada %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, pág. %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3469,14 +3710,14 @@ msgstr "Fonte de mensagens de %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF de %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
"Este é o fluxo público de mensagens de %1$s, mas %2$s não publicou nada "
"ainda."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3484,7 +3725,7 @@ msgstr ""
"Viu alguma coisa interessante recentemente? Você ainda não publicou nenhuma "
"mensagem. Que tal começar agora? :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3493,7 +3734,7 @@ msgstr ""
"Você pode tentar chamar a atenção de %1$s ou [publicar alguma coisa que "
"desperte seu interesse](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3507,7 +3748,7 @@ msgstr ""
"acompanhar as mensagens de **%s** e muito mais! ([Saiba mais](%%%%doc.help%%%"
"%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3518,7 +3759,7 @@ msgstr ""
"pt.wikipedia.org/wiki/Micro-blogging) baseado no software livre [StatusNet]"
"(http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Repetição de %s"
@@ -3532,199 +3773,138 @@ 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:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Idioma \"%s\" desconhecido."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "A URL para o envio das estatísticas é inválida."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "O valor de execução da obtenção das estatísticas é inválido."
-
-#: actions/siteadminpanel.php:191
-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:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "O comprimento máximo do texto é de 140 caracteres."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL do disponibilizado por"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: 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:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário padrão"
-#: actions/siteadminpanel.php:289
+#: 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:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma padrão do site"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URLs"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Servidor"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Nome de host do servidor do site."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "URLs limpas"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "Utilizar URLs limpas (mais legíveis e memorizáveis)?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Acesso"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Particular"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "Impedir usuários anônimos (não autenticados) de visualizar o site?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Somente convidados"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Cadastro liberado somente para convidados."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Fechado"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Desabilita novos registros."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Estatísticas"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente durante o funcionamento"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Em horários pré-definidos"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Estatísticas dos dados"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando enviar dados estatísticos para os servidores status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frequentemente"
-
-#: actions/siteadminpanel.php:354
-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:359
-msgid "Report URL"
-msgstr "URL para envio"
-
-#: actions/siteadminpanel.php:360
-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:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite do texto"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres para as mensagens."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatas"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Salvar as configurações do site"
+#: 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"
@@ -3824,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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr "Assinado"
@@ -3900,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 "
@@ -3916,30 +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:86
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "Mensagens etiquetadas com %1$s, pág. %2$d"
+
+#: 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)"
@@ -3957,7 +4213,8 @@ msgstr "Etiqueta %s"
msgid "User profile"
msgstr "Perfil do usuário"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Imagem"
@@ -3992,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."
@@ -4016,7 +4273,7 @@ msgstr "Nenhuma ID de perfil na requisição."
msgid "Unsubscribed"
msgstr "Cancelado"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4024,12 +4281,14 @@ 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."
@@ -4092,26 +4351,6 @@ msgstr "Convites habilitados"
msgid "Whether to allow users to invite new users."
msgstr "Define se os usuários podem ou não convidar novos usuários."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessões"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Gerenciar sessões"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Define se nós cuidamos do gerenciamento das sessões."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Depuração da sessão"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Ativa a saída de depuração para as sessões."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Autorizar a assinatura"
@@ -4126,36 +4365,36 @@ msgstr ""
"as mensagens deste usuário. Se você não solicitou assinar as mensagens de "
"alguém, clique em \"Recusar\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licença"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Aceitar"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Assinar este usuário"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Recusar"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Recusar esta assinatura"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Nenhum pedido de autorização!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "A assinatura foi autorizada"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4165,11 +4404,11 @@ msgstr ""
"Verifique as instruções do site para detalhes sobre como autorizar a "
"assinatura. Seu token de assinatura é:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "A assinatura foi recusada"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4179,37 +4418,37 @@ msgstr ""
"Verifique as instruções do site para detalhes sobre como rejeitar "
"completamente a assinatura."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "A URI ‘%s’ do usuário não foi encontrada aqui."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "A URI ‘%s’ do usuário é muito extensa."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "A URI ‘%s’ é de um usuário local."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "A URL ‘%s’ do perfil é de um usuário local."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "A URL ‘%s’ do avatar não é válida."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Não é possível ler a URL '%s' do avatar."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Tipo de imagem errado para a URL '%s' do avatar."
@@ -4230,22 +4469,33 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Aproveite o seu cachorro-quente!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %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"
@@ -4260,10 +4510,6 @@ msgstr ""
"Este site funciona sobre %1$s versão %2$s, Copyright 2008-2010 StatusNet, "
"Inc. e colaboradores."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Colaboradores"
@@ -4305,13 +4551,13 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
#: actions/version.php:197
msgid "Author(s)"
-msgstr "Author(es)"
+msgstr "Autor(es)"
#: classes/File.php:144
#, php-format
@@ -4344,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"
@@ -4361,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:171
+#: 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:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema no salvamento da mensagem. Ela é muito extensa."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema no salvamento da mensagem. Usuário desconhecido."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4389,37 +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:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema no salvamento da mensagem."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Erro no banco de dados na inserção da reposta: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problema no salvamento das mensagens recebidas do grupo."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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: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 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"
@@ -4457,124 +4746,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária no site"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Início"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Conectar"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Convidar"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Admin"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Sair"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Convidar"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Ajuda"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Entrar"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Procurar"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Visualizações locais"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notícia da página"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária no site"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Ajuda"
+
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos de uso"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Contato"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Mini-aplicativo"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença do software StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4583,12 +4935,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblog disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblog. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4599,130 +4951,215 @@ 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:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença do conteúdo do site"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "O conteúdo e os dados de %1$s são privados e confidenciais."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "Conteúdo e dados licenciados sob %1$s. Todos os direitos reservados."
-#: lib/action.php:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Todas "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Próximo"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 do usuário"
+
+#. 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 do acesso"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração dos caminhos"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Configuração das sessões"
+
+#. 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: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"
+msgstr "Editar a aplicação"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Ãcone para esta aplicação"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Descreva a sua aplicação em %d caracteres"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Descreva sua aplicação"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "URL da fonte"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "URL do site desta aplicação"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "Organização responsável por esta aplicação"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "URL para o site da organização"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "URL para o redirecionamento após a autenticação"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "Navegador"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "Desktop"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Tipo de aplicação: navegador ou desktop"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Somente leitura"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Leitura e escrita"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Acesso padrão para esta aplicação: somente leitura ou leitura e escrita"
@@ -4751,11 +5188,11 @@ msgstr "Mensagens onde este anexo aparece"
msgid "Tags for this attachment"
msgstr "Etiquetas para este anexo"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Não foi possível alterar a senha"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Não é permitido alterar a senha"
@@ -4908,82 +5345,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"
@@ -4997,6 +5444,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"
@@ -5062,19 +5510,19 @@ msgstr ""
"tracks - não implementado ainda\n"
"tracking - não implementado ainda\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Não foi encontrado nenhum arquivo de configuração. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5172,6 +5620,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"
@@ -5264,32 +5717,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Fonte da caixa de entrada desconhecida %d."
@@ -5569,7 +6022,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"
@@ -5664,6 +6117,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"
@@ -5697,48 +6156,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Responder a esta mensagem"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Mensagem repetida"
@@ -5770,11 +6229,7 @@ msgstr "Erro na inserção do perfil remoto"
msgid "Duplicate notice"
msgstr "Duplicar a mensagem"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Você está proibido de assinar."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Não foi possível inserir a nova assinatura."
@@ -5790,19 +6245,19 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritas"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Recebidas"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Suas mensagens recebidas"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Enviadas"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Suas mensagens enviadas"
@@ -5815,7 +6270,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"
@@ -5823,23 +6278,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"
@@ -5879,6 +6334,15 @@ msgstr "Repetir esta mensagem?"
msgid "Repeat this notice"
msgstr "Repetir esta mensagem"
+#: 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 "Nenhum usuário definido para o modo de usuário único."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Isolamento"
@@ -5895,6 +6359,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"
@@ -5946,33 +6414,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
@@ -6024,67 +6473,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "cerca de 1 minuto atrás"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "cerca de %d minutos atrás"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "cerca de 1 hora atrás"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "cerca de %d horas atrás"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "cerca de 1 dia atrás"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "cerca de %d dias atrás"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "cerca de 1 mês atrás"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "cerca de %d meses atrás"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "cerca de 1 ano atrás"
@@ -6098,7 +6564,7 @@ msgstr "%s não é uma cor válida!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s não é uma cor válida! Utilize 3 ou 6 caracteres hexadecimais."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index d95566fdf..94e9a7902 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -1,6 +1,7 @@
# Translation of StatusNet to Russian
#
# Author@translatewiki.net: Brion
+# Author@translatewiki.net: Kirill
# Author@translatewiki.net: Lockal
# Author@translatewiki.net: Rubin
# Author@translatewiki.net: ÐлекÑандр Сигачёв
@@ -11,24 +12,83 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:23+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:33+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "ПринÑÑ‚ÑŒ"
+
+#. 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 "РегиÑтрациÑ"
+
+#. 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 "Личное"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Разрешить региÑтрацию только по приглашениÑм."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Только по приглашениÑм"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Отключить новые региÑтрации."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Закрыта"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Сохранить наÑтройки доÑтупа"
+
+#: 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
@@ -37,57 +97,64 @@ msgstr "Ðет такой Ñтраницы"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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
-#, 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 "Заблокированные профили %1$s, Ñтраница %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 "
@@ -96,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 "
@@ -106,7 +174,7 @@ msgstr ""
"что-нибудь Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ или её вниманиÑ](%%%%action.newnotice%%%%?"
"status_textarea=%3$s)."
-#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#: 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 "
@@ -115,12 +183,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!"
@@ -130,22 +199,22 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Метод API не найден."
@@ -160,7 +229,7 @@ msgstr "Метод API не найден."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Этот метод требует POST."
@@ -178,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 "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ профилÑ."
@@ -189,7 +259,7 @@ msgstr "Ðе удаётÑÑ Ñохранить профиль."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -205,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."
@@ -313,77 +383,77 @@ msgstr "Ð’Ñ‹ не можете переÑтать Ñледовать за Ñоб
msgid "Two user ids or screen_names must be supplied."
msgstr "Ðадо предÑтавить два имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ кода."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ иÑходного пользователÑ."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "ÐÐ»Ð¸Ð°Ñ Ð½Ðµ может Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼."
@@ -394,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."
@@ -411,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."
@@ -431,96 +501,112 @@ msgstr "Группы %s"
msgid "groups on %s"
msgstr "группы на %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr ""
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Ðе задан параметр oauth_token."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Ðеправильный токен"
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Проблема Ñ Ð’Ð°ÑˆÐµÐ¹ ÑеÑÑией. Попробуйте ещё раз, пожалуйÑта."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Ðеверное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль."
-#: actions/apioauthauthorize.php:170
-#, fuzzy
-msgid "DB error deleting OAuth app user."
-msgstr "Ошибка в уÑтановках пользователÑ."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "Ошибка базы данных при удалении Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OAuth."
-#: actions/apioauthauthorize.php:196
-#, fuzzy
-msgid "DB error inserting OAuth app user."
-msgstr "Ошибка баз данных при вÑтавке хеш-тегов Ð´Ð»Ñ %s"
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Ошибка базы данных при добавлении Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OAuth."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"Ключ запроÑа %s авторизован. ПожалуйÑта, обменÑйте его на ключ доÑтупа."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr ""
+msgid "The request token %s has been denied and revoked."
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ñ‚Ð¾ÐºÐµÐ½Ð° %s был запрещен и аннулирован."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Ðетиповое подтверждение формы."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Приложение хочет ÑоединитьÑÑ Ñ Ð²Ð°ÑˆÐµÐ¹ учётной запиÑью"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Разрешить или запретить доÑтуп"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"Приложение <strong>%1$s</strong> от <strong>%2$s</strong> проÑит разрешение "
+"на<strong>%3$s</strong> данных вашей учётной запиÑи%4$s . Ð’Ñ‹ должны "
+"предоÑтавлÑÑ‚ÑŒ разрешение на доÑтуп к вашей учётной запиÑи %4$s только тем "
+"Ñторонним приложениÑм, которым вы доверÑете."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "ÐаÑтройки"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "ИмÑ"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Пароль"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Запретить"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Разрешить"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Разрешить или запретить доÑтуп к информации вашей учётной запиÑи."
@@ -553,17 +639,17 @@ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑƒÐ´Ð°Ð»Ñ‘Ð½."
msgid "No status with that ID found."
msgstr "Ðе найдено ÑтатуÑа Ñ Ñ‚Ð°ÐºÐ¸Ð¼ ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Слишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ. МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° — %d знаков."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Ðе найдено"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° запиÑи — %d Ñимволов, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ URL вложениÑ."
@@ -577,23 +663,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"
@@ -614,27 +688,22 @@ msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %s"
msgid "%s updates from everyone!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Повторено %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -650,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 "Ðет имени."
@@ -663,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 "Ðватара"
@@ -681,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "Обрезать"
@@ -712,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 "ПотерÑна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле."
@@ -746,22 +814,23 @@ msgstr ""
"будет отпиÑан от Ð²Ð°Ñ Ð±ÐµÐ· возможноÑти подпиÑатьÑÑ Ð² будущем, а вам не будут "
"приходить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± @-ответах от него."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Да"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Заблокировать пользователÑ."
@@ -769,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 "Разблокировать пользователÑ."
@@ -857,16 +930,58 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "Ð’Ñ‹ должны войти в ÑиÑтему, чтобы удалить приложение."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Приложение не найдено."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ владельцем Ñтого приложениÑ."
+
+#: 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 "Удалить приложение"
+
+#: 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 "Ðе удалÑйте Ñто приложение"
+
+#: actions/deleteapplication.php:160
+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 "Ðе авторизован."
@@ -895,7 +1010,7 @@ msgstr "Ð’Ñ‹ уверены, что хотите удалить Ñту запиÑ
msgid "Do not delete this notice"
msgstr "Ðе удалÑÑ‚ÑŒ Ñту запиÑÑŒ"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Удалить Ñту запиÑÑŒ"
@@ -911,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."
@@ -919,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 "Оформление"
@@ -1029,12 +1144,13 @@ msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "Сохранить"
@@ -1050,87 +1166,75 @@ msgstr "Эта запиÑÑŒ не входит в чиÑло ваших любиÐ
msgid "Add to favorites"
msgstr "Добавить в любимые"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Ðет такого документа."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Ðет такого документа «%s»"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Изменить приложение"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы изменить группу."
+msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы изменить приложение."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "Ðет такой запиÑи."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Проблема Ñ Ð’Ð°ÑˆÐµÐ¹ ÑеÑÑией. Попробуйте ещё раз, пожалуйÑта."
+msgstr "Ðет такого приложениÑ."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "Заполните информацию о группе в Ñледующие полÑ"
+msgstr "ВоÑпользуйтеÑÑŒ Ñтой формой, чтобы изменить приложение."
#: actions/editapplication.php:177 actions/newapplication.php:159
msgid "Name is required."
msgstr "Ð˜Ð¼Ñ Ð¾Ð±Ñзательно."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Ð˜Ð¼Ñ Ñлишком длинное (не больше 255 знаков)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Такое Ð¸Ð¼Ñ ÑƒÐ¶Ðµ иÑпользуетÑÑ. Попробуйте какое-нибудь другое."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "ОпиÑание обÑзательно."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
-msgstr ""
+msgstr "URL иÑточника Ñлишком длинный."
-#: actions/editapplication.php:197 actions/newapplication.php:182
-#, fuzzy
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
-msgstr "URL аватары «%s» недейÑтвителен."
+msgstr "URL иÑточника недейÑтвителен."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
-msgstr ""
+msgstr "ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñзательна."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "Слишком длинное меÑтораÑположение (макÑимум 255 знаков)."
+msgstr "Слишком длинное название организации (макÑимум 255 знаков)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "ДомашнÑÑ Ñтраница организации обÑзательна."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Обратный вызов Ñлишком длинный."
-#: actions/editapplication.php:222 actions/newapplication.php:212
-#, fuzzy
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr "URL аватары «%s» недейÑтвителен."
+msgstr "URL-Ð°Ð´Ñ€ÐµÑ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ вызова недейÑтвителен."
-#: actions/editapplication.php:255
-#, fuzzy
+#: actions/editapplication.php:258
msgid "Could not update application."
-msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе."
+msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ приложение."
#: actions/editgroup.php:56
#, php-format
@@ -1141,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: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 "ÐаÑтройки Ñохранены."
@@ -1200,8 +1304,8 @@ msgstr ""
"Ð´Ð»Ñ Ñпама!), там будут дальнейшие инÑтрукции."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Отменить"
@@ -1291,7 +1395,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðе удаётÑÑ Ñтандартизировать Ñтот Ñлектронный адреÑ"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ðеверный Ñлектронный адреÑ."
@@ -1303,7 +1407,7 @@ msgstr "Это уже Ваш Ñлектронный адреÑ."
msgid "That email address already belongs to another user."
msgstr "Этот Ñлектронный Ð°Ð´Ñ€ÐµÑ ÑƒÐ¶Ðµ задейÑтвован другим пользователем."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Ðе удаётÑÑ Ð²Ñтавить код подтверждениÑ."
@@ -1365,7 +1469,7 @@ msgstr "Эта запиÑÑŒ уже входит в чиÑло любимых!"
msgid "Disfavor favorite"
msgstr "Разлюбить"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "ПопулÑрные запиÑи"
@@ -1484,6 +1588,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
@@ -1513,7 +1633,7 @@ msgstr "Пользователь уже заблокирован из групп
msgid "User is not a member of group."
msgstr "Пользователь не ÑвлÑетÑÑ Ñ‡Ð»ÐµÐ½Ð¾Ð¼ Ñтой группы."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Заблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· группы."
@@ -1548,11 +1668,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."
@@ -1560,20 +1680,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."
@@ -1581,62 +1701,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "ÐаÑтройки"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блокировать"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Сделать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором группы"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Сделать админиÑтратором"
-#: actions/groupmembers.php:473
+#: 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 "Группы"
@@ -1659,7 +1785,7 @@ msgstr ""
"общими интереÑами. ПоÑле приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº группе и вы Ñможете отправлÑÑ‚ÑŒ "
"ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ вÑех её учаÑтников, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ «!имÑгруппы». Ðе видите "
"группу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€ÐµÑует? Попробуйте [найти её](%%%%action.groupsearch%"
-"%%%) или [Ñоздайте ÑобÑтвенную!](%%%%action.newgroup%%%%)"
+"%%%) или [Ñоздайте ÑобÑтвенную](%%%%action.newgroup%%%%)!"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -1808,6 +1934,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Это не Ваш Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "ВходÑщие Ð´Ð»Ñ %1$s — Ñтраница %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1816,7 +1947,8 @@ msgstr "ВходÑщие Ð´Ð»Ñ %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."
@@ -1873,7 +2005,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"
@@ -1881,7 +2013,7 @@ msgstr "Почтовый адреÑ"
#: actions/invite.php:189
msgid "Addresses of friends to invite (one per line)"
-msgstr "ÐдреÑа друзей, которых Ñ‚Ñ‹ хочешь приглаÑить (по одному на Ñтрочку)"
+msgstr "ÐдреÑа друзей, которых вы хотите приглаÑить (по одному на Ñтрочку)"
#: actions/invite.php:192
msgid "Personal message"
@@ -1891,16 +2023,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"
@@ -1961,7 +2095,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"
@@ -1970,11 +2108,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"
@@ -1991,8 +2129,7 @@ msgstr "Ðекорректное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль."
msgid "Error setting user. You are probably not authorized."
msgstr "Ошибка уÑтановки пользователÑ. Ð’Ñ‹, вероÑтно, не авторизованы."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Вход"
@@ -2029,22 +2166,22 @@ msgstr ""
"Вход Ñ Ð²Ð°ÑˆÐ¸Ð¼ логином и паролем. Ðет аккаунта? [ЗарегиÑтрируйте](%%action."
"register%%) новый аккаунт."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Только админиÑтратор может Ñделать другого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s уже ÑвлÑетÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором группы «%2$s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ запиÑÑŒ принадлежноÑти Ð´Ð»Ñ %1$s к группе %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðевозможно Ñделать %1$s админиÑтратором группы %2$s."
@@ -2054,27 +2191,24 @@ msgid "No current status"
msgstr "Ðет текущего ÑтатуÑа"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "Ðовое приложение"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы Ñоздать новую группу."
+msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы зарегиÑтрировать приложение."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "ИÑпользуйте Ñту форму Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ группы."
+msgstr "ИÑпользуйте Ñту форму Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ приложениÑ."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "URL иÑточника обÑзателен."
-#: actions/newapplication.php:255 actions/newapplication.php:264
-#, fuzzy
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
-msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹."
+msgstr "Ðе удаётÑÑ Ñоздать приложение."
#: actions/newgroup.php:53
msgid "New group"
@@ -2189,49 +2323,46 @@ msgid "Nudge sent!"
msgstr "«Подталкивание» отправлено!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы изменить группу."
+msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы проÑматривать Ñвои приложениÑ."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "Другие опции"
+msgstr "ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OAuth"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "ПриложениÑ, которые вы зарегиÑтрировали"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Ð’Ñ‹ пока не зарегиÑтрировали ни одного приложениÑ."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Подключённые приложениÑ"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Ð’Ñ‹ разрешили доÑтуп к учётной запиÑи Ñледующим приложениÑм."
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы."
+msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ пользователем Ñтого приложениÑ."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Ðе удаётÑÑ Ð¾Ñ‚Ð¾Ð·Ð²Ð°Ñ‚ÑŒ права Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Ð’Ñ‹ не разрешили приложениÑм иÑпользовать вашу учётную запиÑÑŒ."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
-msgstr ""
+msgstr "Разработчики могут изменÑÑ‚ÑŒ наÑтройки региÑтрации Ñвоих приложений "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2250,8 +2381,8 @@ msgstr "тип Ñодержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "Ðеподдерживаемый формат данных."
@@ -2264,7 +2395,6 @@ msgid "Notice Search"
msgstr "ПоиÑк в запиÑÑÑ…"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other settings"
msgstr "Другие наÑтройки"
@@ -2301,24 +2431,25 @@ msgid "No user ID specified."
msgstr "Ðе указан идентификатор пользователÑ."
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "Ðе указана запиÑÑŒ."
+msgstr "Ðе указан ключ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
-msgstr "Ðет ID Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð² запроÑе."
+msgstr "Ключ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° не был запрошен."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "Ðеверный или уÑтаревший ключ."
+msgstr "Задан неверный ключ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "ÐвторизоватьÑÑ"
+msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° иÑтёк."
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "ИÑходÑщие Ð´Ð»Ñ %s — Ñтраница %2$d"
#: actions/outbox.php:61
#, php-format
@@ -2392,7 +2523,8 @@ msgstr "Ðе удаётÑÑ Ñохранить новый пароль."
msgid "Password saved."
msgstr "Пароль Ñохранён."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пути"
@@ -2400,132 +2532,147 @@ msgstr "Пути"
msgid "Path and server settings for this StatusNet site."
msgstr "ÐаÑтройки путей и Ñерверов Ð´Ð»Ñ Ñтого Ñайта StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ‚ÐµÐ¼ недоÑтупна Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€ не доÑтупна Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ„Ð¾Ð½Ð¾Ð²Ñ‹Ñ… изображений не доÑтупна Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¹ не доÑтупна Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ðеверный SSL-Ñервер. МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑоÑтавлÑет 255 Ñимволов."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Сайт"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Сервер"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Ð˜Ð¼Ñ Ñ…Ð¾Ñта Ñервера Ñайта."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Путь"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Путь к Ñайту"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "ПуÑÑ‚ÑŒ к локализациÑм"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Путь к директории локализаций"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Короткие URL"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "ИÑпользовать ли короткие (более читаемые и запоминаемые) URL-адреÑа?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Тема"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Сервер темы"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Путь темы"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ‚ÐµÐ¼Ñ‹"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ðватары"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Сервер аватар"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Путь к аватарам"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Фоновые изображениÑ"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Сервер фонового изображениÑ"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Путь к фоновому изображению"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ изображениÑ"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðикогда"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Иногда"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Ð’Ñегда"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "ИÑпользовать SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Когда иÑпользовать SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-Ñервер"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Сервер, которому направлÑÑ‚ÑŒ SSL-запроÑÑ‹"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Сохранить пути"
@@ -2552,11 +2699,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»."
@@ -2581,13 +2728,13 @@ 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 "Полное имÑ"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "ГлавнаÑ"
@@ -2609,8 +2756,8 @@ msgid "Bio"
msgstr "БиографиÑ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "МеÑтораÑположение"
@@ -2636,7 +2783,7 @@ msgstr ""
"Теги Ð´Ð»Ñ Ñамого ÑÐµÐ±Ñ (буквы, цифры, -, ., и _), разделенные запÑтой или "
"пробелом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Язык"
@@ -2662,7 +2809,7 @@ msgstr "ÐвтоматичеÑки подпиÑыватьÑÑ Ð½Ð° вÑех, кÑ
msgid "Bio is too long (max %d chars)."
msgstr "Слишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ð±Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ (макÑимум %d Ñимволов)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ЧаÑовой поÑÑ Ð½Ðµ выбран."
@@ -2675,23 +2822,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 "ÐаÑтройки Ñохранены."
@@ -2704,39 +2852,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Лента публичного потока (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Лента публичного потока (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Лента публичного потока (Atom)"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Создайте первую запиÑÑŒ!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2744,7 +2892,7 @@ msgstr ""
"Почему бы не [зарегиÑтрироватьÑÑ](%%action.register%%), чтобы Ñтать первым "
"отправителем?"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2758,7 +2906,7 @@ msgstr ""
"register%%), чтобы держать в курÑе Ñвоих Ñобытий поклонников, друзей, "
"родÑтвенников и коллег! ([Читать далее](%%doc.help%%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2796,7 +2944,7 @@ msgstr ""
"Почему бы не [зарегиÑтрироватьÑÑ](%%action.register%%), чтобы отправить "
"первым?"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Облако тегов"
@@ -2936,8 +3084,7 @@ msgstr "Извините, неверный приглаÑительный код
msgid "Registration successful"
msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÑпешна!"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РегиÑтрациÑ"
@@ -2983,7 +3130,7 @@ msgid "Same as password above. Required."
msgstr "Тот же пароль что и Ñверху. ОбÑзательное поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3088,7 +3235,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 "ПодпиÑатьÑÑ"
@@ -3124,7 +3271,7 @@ msgstr "Ð’Ñ‹ не можете повторить ÑобÑтвенную запÐ
msgid "You already repeated that notice."
msgstr "Ð’Ñ‹ уже повторили Ñту запиÑÑŒ."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Повторено"
@@ -3132,28 +3279,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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Ответы Ð´Ð»Ñ %1$s, Ñтраница %2$d"
+
+#: 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 "
@@ -3161,7 +3313,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 "
@@ -3170,7 +3322,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 "
@@ -3185,6 +3337,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Ответы на запиÑи %1$s на %2$s!"
+#: 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 "StatusNet"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -3194,103 +3358,143 @@ msgstr ""
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 "СеÑÑии"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "ÐаÑтройки ÑеÑÑии Ð´Ð»Ñ Ñтого Ñайта StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Управление ÑеÑÑиÑми"
+
+#: 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
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы покинуть группу."
+msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы проÑматривать приложениÑ."
-#: actions/showapplication.php:158
-#, fuzzy
+#: actions/showapplication.php:157
msgid "Application profile"
-msgstr "ЗапиÑÑŒ без профилÑ"
+msgstr "Профиль приложениÑ"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Иконка"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "ИмÑ"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "ОрганизациÑ"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Создано %1$s — доÑтуп по умолчанию: %2$s — %3$d польз."
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "СброÑить ключ и Ñекретную фразу"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
-msgstr ""
+msgstr "ПотребительÑкий ключ"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
-msgstr ""
+msgstr "Ð¡ÐµÐºÑ€ÐµÑ‚Ð½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° потребителÑ"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "URL ключа запроÑа"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "URL ключа доÑтупа"
-#: actions/showapplication.php:263
-#, fuzzy
+#: actions/showapplication.php:283
msgid "Authorize URL"
-msgstr "Ðвтор"
+msgstr "URL авторизации"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Примечание: Мы поддерживаем подпиÑи HMAC-SHA1. Мы не поддерживаем метод "
+"подпиÑи открытым текÑтом."
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Ð’Ñ‹ уверены, что хотите ÑброÑить ваш ключ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¸ Ñекретную фразу?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Любимые запиÑи %1$s, Ñтраница %2$d"
#: actions/showfavorites.php:132
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."
@@ -3298,7 +3502,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 "
@@ -3307,7 +3511,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 "
@@ -3318,7 +3522,7 @@ msgstr ""
"[зарегиÑтрироватьÑÑ](%%%%action.register%%%%) и не напиÑать что-нибудь "
"интереÑное, что понравилоÑÑŒ бы Ñтому пользователю? :)"
-#: actions/showfavorites.php:242
+#: actions/showfavorites.php:243
msgid "This is a way to share what you like."
msgstr "Это ÑпоÑоб разделить то, что вам нравитÑÑ."
@@ -3327,67 +3531,72 @@ msgstr "Это ÑпоÑоб разделить то, что вам нравитÑ
msgid "%s group"
msgstr "Группа %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Группа %1$s, Ñтраница %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профиль группы"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3403,7 +3612,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."
@@ -3416,7 +3625,7 @@ msgstr ""
"обеÑпечении [StatusNet](http://status.net/). УчаÑтники обмениваютÑÑ "
"короткими ÑообщениÑми о Ñвоей жизни и интереÑах. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "ÐдминиÑтраторы"
@@ -3447,6 +3656,11 @@ msgstr "ЗапиÑÑŒ удалена."
msgid " tagged %s"
msgstr " Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, Ñтраница %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3472,12 +3686,12 @@ msgstr "Лента запиÑей Ð´Ð»Ñ %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF Ð´Ð»Ñ %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Это лента %1$s, однако %2$s пока ничего не отправил."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3485,7 +3699,7 @@ msgstr ""
"Видели недавно что-нибудь интереÑное? Ð’Ñ‹ ещё не отправили ни одной запиÑи, "
"ÑÐµÐ¹Ñ‡Ð°Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐµÐµ Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3495,7 +3709,7 @@ msgstr ""
"Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ или её вниманиÑ](%%%%action.newnotice%%%%?status_textarea=%2"
"$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3510,7 +3724,7 @@ msgstr ""
"ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑƒÑ‡Ð°Ñтника **%s** и иметь доÑтуп ко множеÑтву других возможноÑтей! "
"([Читать далее](%%%%doc.help%%%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3522,7 +3736,7 @@ msgstr ""
"иÑпользованием Ñвободного программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ [StatusNet](http://status."
"net/)."
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Повтор за %s"
@@ -3536,201 +3750,133 @@ msgid "User is already silenced."
msgstr "Пользователь уже заглушён."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "ОÑновные наÑтройки Ð´Ð»Ñ Ñтого Ñайта StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "ОÑновные наÑтройки Ð´Ð»Ñ Ñтого Ñайта StatusNet"
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Ð˜Ð¼Ñ Ñайта должно быть ненулевой длины."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "У Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть дейÑтвительный контактный email-адреÑ."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "ÐеизвеÑтный Ñзык «%s»."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Ðеверный URL отчёта Ñнимка."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Ðеверное значение запуÑка Ñнимка."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "ЧаÑтота Ñнимков должна быть чиÑлом."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Минимальное ограничение текÑта ÑоÑтавлÑет 140 Ñимволов."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничение Ð´ÑƒÐ±Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ ÑоÑтавлÑÑ‚ÑŒ 1 или более Ñекунд."
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Базовые"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Ð˜Ð¼Ñ Ñайта"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Ð˜Ð¼Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта, например, «Yourcompany Microblog»"
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "ПредоÑтавлено"
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"ТекÑÑ‚, иÑпользуемый Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð² в нижнем колонтитуле каждой Ñтраницы"
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ñтавщика уÑлуг"
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL, иÑпользуемый Ð´Ð»Ñ ÑÑылки на авторов в нижнем колонтитуле каждой Ñтраницы"
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактный email-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñайта"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Внутренние наÑтройки"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑовой поÑÑ Ð¿Ð¾ умолчанию"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑовой поÑÑ Ð¿Ð¾ умолчанию Ð´Ð»Ñ Ñайта; обычно UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr "Язык Ñайта по умолчанию"
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL-адреÑа"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Сервер"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Ð˜Ð¼Ñ Ñ…Ð¾Ñта Ñервера Ñайта."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Короткие URL"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "ИÑпользовать ли короткие (более читаемые и запоминаемые) URL-адреÑа?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "ПринÑÑ‚ÑŒ"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Личное"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Язык по умолчанию"
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Запретить анонимным (не авторизовавшимÑÑ) пользователÑм проÑматривать Ñайт?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Только по приглашениÑм"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Разрешить региÑтрацию только по приглашениÑм."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Закрыта"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Отключить новые региÑтрации."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "При Ñлучайном поÑещении"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "По заданному графику"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Снимки данных"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Когда отправлÑÑ‚ÑŒ ÑтатиÑтичеÑкие данные на Ñервера status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "ЧаÑтота"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ðµ N поÑещений"
+"Язык Ñайта в Ñлучае, еÑли автоопределение из наÑтроек браузера не Ñработало"
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "URL отчёта"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимки будут отправлÑÑ‚ÑŒÑÑ Ð¿Ð¾ Ñтому URL-адреÑу"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Границы"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Границы текÑта"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимальное чиÑло Ñимволов Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñей."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Предел дубликатов"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Сколько нужно ждать пользователÑм (в Ñекундах) Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ того же ещё раз."
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Сохранить наÑтройки Ñайта"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Уведомление Ñайта"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Изменить уведомление Ð´Ð»Ñ Ð²Ñего Ñайта"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Ðе удаётÑÑ Ñохранить уведомление Ñайта."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñайта ÑоÑтавлÑет 255 Ñимволов"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "ТекÑÑ‚ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñайта"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "ТекÑÑ‚ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñайта (макÑимум 255 Ñимволов; допуÑтим HTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Сохранить уведомление Ñайта"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3833,19 +3979,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
+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
+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 "ПодпиÑано"
@@ -3909,7 +4124,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 "
@@ -3925,30 +4140,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:86
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %1$s, Ñтраница %2$d"
+
+#: 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)"
@@ -3966,7 +4186,8 @@ msgstr "Теги %s"
msgid "User profile"
msgstr "Профиль пользователÑ"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Фото"
@@ -4002,7 +4223,7 @@ msgstr ""
msgid "No such tag."
msgstr "Ðет такого тега."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "Метод API реконÑтруируетÑÑ."
@@ -4026,19 +4247,20 @@ msgstr "Ðет ID Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð² запроÑе."
msgid "Unsubscribed"
msgstr "ОтпиÑано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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."
@@ -4101,26 +4323,6 @@ msgstr "ÐŸÑ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹"
msgid "Whether to allow users to invite new users."
msgstr "Разрешать ли пользователÑм приглашать новых пользователей."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "СеÑÑии"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Управление ÑеÑÑиÑми"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "УправлÑÑ‚ÑŒ ли ÑеÑÑиÑми ÑамоÑтоÑтельно."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Отладка ÑеÑÑий"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Включить отладочный вывод Ð´Ð»Ñ ÑеÑÑий."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Ðвторизовать подпиÑку"
@@ -4135,36 +4337,36 @@ msgstr ""
"подпиÑатьÑÑ Ð½Ð° запиÑи Ñтого пользователÑ. ЕÑли Ð’Ñ‹ Ñтого не хотите делать, "
"нажмите «Отказ»."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "ЛицензиÑ"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "ПринÑÑ‚ÑŒ"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "ПодпиÑатьÑÑ Ð½Ð° %s"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "ОтброÑить"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Отвергнуть Ñту подпиÑку"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ðе авторизованный запроÑ!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "ПодпиÑка авторизована"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4173,11 +4375,11 @@ msgstr ""
"ПодпиÑка авторизована, но нет обратного URL. ПоÑмотрите инÑтрукции на Ñайте "
"о том, как авторизовать подпиÑку. Ваш ключ подпиÑки:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "ПодпиÑка отменена"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4186,37 +4388,37 @@ msgstr ""
"ПодпиÑка отвергнута, но не бы передан URL обратного вызова. Проверьте "
"инÑтрукции на Ñайте, чтобы полноÑтью отказатьÑÑ Ð¾Ñ‚ подпиÑки."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "СмотрÑщий URI «%s» здеÑÑŒ не найден."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "ПроÑматриваемый URI «%s» Ñлишком длинный."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "ПроÑматриваемый URI «%s» — локальный пользователь."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Â«%s» предназначен только Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ пользователÑ."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "URL аватары «%s» недейÑтвителен."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ URL аватары «%s»"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Ðеверный тип Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ URL аватары «%s»."
@@ -4237,21 +4439,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "ПриÑтного аппетита!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Группы %1$s, Ñтраница %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4266,10 +4479,6 @@ msgstr ""
"Этот Ñайт Ñоздан на оÑнове %1$s верÑии %2$s, Copyright 2008-2010 StatusNet, "
"Inc. и учаÑтники."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Разработчики"
@@ -4311,7 +4520,7 @@ msgstr ""
msgid "Plugins"
msgstr "Плагины"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ВерÑиÑ"
@@ -4339,19 +4548,20 @@ msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Файл такого размера превыÑит вашу меÑÑчную квоту в %d байта."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Профиль группы"
+msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¸ÑоединитьÑÑ Ðº группе."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе."
+msgstr "Ðе ÑвлÑетÑÑ Ñ‡Ð°Ñтью группы."
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Профиль группы"
+msgstr "Ðе удаётÑÑ Ð¿Ð¾ÐºÐ¸Ð½ÑƒÑ‚ÑŒ группу."
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ локальную группу."
#: classes/Login_token.php:76
#, php-format
@@ -4370,27 +4580,27 @@ msgstr "Ðе удаётÑÑ Ð²Ñтавить Ñообщение."
msgid "Could not update message with new URI."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ URI."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Ошибка баз данных при вÑтавке хеш-тегов Ð´Ð»Ñ %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблемы Ñ Ñохранением запиÑи. Слишком длинно."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при Ñохранении запиÑи. ÐеизвеÑтный пользователь."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Слишком много запиÑей за Ñтоль короткий Ñрок; передохните немного и "
"попробуйте вновь через пару минут."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4398,37 +4608,72 @@ msgstr ""
"Слишком много одинаковых запиÑей за Ñтоль короткий Ñрок; передохните немного "
"и попробуйте вновь через пару минут."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам запрещено поÑтитьÑÑ Ð½Ð° Ñтом Ñайте (бан)"
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблемы Ñ Ñохранением запиÑи."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Ошибка баз данных при вÑтавке ответа Ð´Ð»Ñ %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Проблемы Ñ Ñохранением входÑщих Ñообщений группы."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑочный жетон OMB."
+
+#: 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 "Изменить ваши наÑтройки профилÑ"
@@ -4458,132 +4703,178 @@ 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:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Моё"
-
-#: lib/action.php:433
+#. 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 "Изменить ваш email, аватару, пароль, профиль"
-
-#: lib/action.php:438
-msgid "Connect"
-msgstr "Соединить"
+msgstr "Изменить ваш email, аватар, пароль, профиль"
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Соединить Ñ ÑервиÑами"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Соединить"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Изменить конфигурацию Ñайта"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ПриглаÑить"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "ÐаÑтройки"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Выход"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ПриглаÑить"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Выйти"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Помощь"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Вход"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощь"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "ПоиÑк"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Помощь"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ИÑкать людей или текÑÑ‚"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Локальные виды"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð¿Ð¾ подпиÑкам"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Помощь"
+
+#: lib/action.php:754
msgid "About"
msgstr "О проекте"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаВо"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "ПользовательÑкое Ñоглашение"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "ИÑходный код"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "ÐšÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet лицензиÑ"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4592,158 +4883,236 @@ msgstr ""
"**%%site.name%%** — Ñто ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°, Ñозданный Ð´Ð»Ñ Ð²Ð°Ñ Ð¿Ñ€Ð¸ помощи [%"
"%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°. "
-#: lib/action.php:780
+#: 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 ""
-"Этот ÑÐµÑ€Ð²Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ при помощи [StatusNet](http://status.net/) - "
-"программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°, верÑии %s, доÑтупного под "
+"Этот ÑÐµÑ€Ð²Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ при помощи [StatusNet](http://status.net/) — "
+"программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð³Ð¸Ð½Ð³Ð°, верÑии %s, доÑтупного под "
"лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ñодержимого Ñайта"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Содержание и данные %1$s ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ и конфиденциальными."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
+"ÐвторÑкие права на Ñодержание и данные принадлежат %1$s. Ð’Ñе права защищены."
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"ÐвторÑкие права на Ñодержание и данные принадлежат разработчикам. Ð’Ñе права "
+"защищены."
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "license."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Разбиение на Ñтраницы"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Сюда"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "Пользователь"
+
+#. 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 "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿ÑƒÑ‚ÐµÐ¹"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑеÑÑий"
+
+#. 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 ""
+"API реÑурÑа требует доÑтуп Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, но у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ только доÑтуп "
+"Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
+
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
+"ÐÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° авторизации через API, nickname = %1$s, proxy = %2$s, ip = "
+"%3$s"
-#: lib/applicationeditform.php:206
-#, fuzzy, php-format
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Изменить приложение"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "Иконка Ð´Ð»Ñ Ñтого приложениÑ"
+
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Опишите группу или тему при помощи %d Ñимволов"
+msgstr "Опишите ваше приложение при помощи %d Ñимволов"
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "Опишите группу или тему"
+msgstr "Опишите ваше приложение"
-#: lib/applicationeditform.php:218
-#, fuzzy
+#: lib/applicationeditform.php:216
msgid "Source URL"
-msgstr "ИÑходный код"
+msgstr "URL иÑточника"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr "ÐÐ´Ñ€ÐµÑ Ñтраницы, дневника или Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ на другом портале"
+msgstr "URL-Ð°Ð´Ñ€ÐµÑ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÐµÐ¹ Ñтраницы Ñтого приложениÑ"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "ОрганизациÑ, ответÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ð·Ð° Ñто приложение"
-#: lib/applicationeditform.php:232
-#, fuzzy
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
-msgstr "ÐÐ´Ñ€ÐµÑ Ñтраницы, дневника или Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ на другом портале"
+msgstr "URL-Ð°Ð´Ñ€ÐµÑ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÐµÐ¹ Ñтраницы организации"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "URL Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле проверки подлинноÑти"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Браузер"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Среда Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ: браузер или Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Только чтение"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Чтение и запиÑÑŒ"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"ДоÑтуп по умолчанию Ð´Ð»Ñ Ñтого приложениÑ: только чтение или чтение и запиÑÑŒ"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Убрать"
+msgstr "Отозвать"
#: lib/attachmentlist.php:87
msgid "Attachments"
@@ -4765,11 +5134,11 @@ msgstr "Сообщает, где поÑвлÑетÑÑ Ñто вложение"
msgid "Tags for this attachment"
msgstr "Теги Ð´Ð»Ñ Ñтого вложениÑ"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ удалоÑÑŒ"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Смена Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ разрешена"
@@ -4920,83 +5289,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"
@@ -5010,6 +5388,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"
@@ -5048,6 +5427,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"
@@ -5074,19 +5454,19 @@ msgstr ""
"tracks — пока не реализовано.\n"
"tracking — пока не реализовано.\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Конфигурационный файл не найден. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Конфигурационные файлы иÑкалиÑÑŒ в Ñледующих меÑтах: "
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "Возможно, вы решите запуÑтить уÑтановщик Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтого."
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Перейти к уÑтановщику"
@@ -5103,13 +5483,12 @@ msgid "Updates by SMS"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ СМС"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Соединить"
+msgstr "СоединениÑ"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Ðвторизованные Ñоединённые приложениÑ"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5186,6 +5565,11 @@ msgstr "Выберите тег из выпадающего ÑпиÑка"
msgid "Go"
msgstr "Перейти"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Ðазначить Ñтому пользователю роль «%s»"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "ÐÐ´Ñ€ÐµÑ Ñтраницы, дневника или Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ на другом портале"
@@ -5277,35 +5661,35 @@ 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 "КБ"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
-#, fuzzy, php-format
+#: lib/jabber.php:400
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "ÐеизвеÑтный Ñзык «%s»."
+msgstr "ÐеизвеÑтный иÑточник входÑщих Ñообщений %d."
#: lib/joinform.php:114
msgid "Join"
@@ -5583,7 +5967,7 @@ msgstr ""
"Ð²Ð¾Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей в разговор. СообщениÑ, получаемые от других "
"людей, видите только вы."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "от "
@@ -5675,6 +6059,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 "ПоÑлать запиÑÑŒ"
@@ -5705,49 +6094,51 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑте"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Повторено"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Ответить на Ñту запиÑÑŒ"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Ответить"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "ЗапиÑÑŒ повторена"
@@ -5779,11 +6170,7 @@ msgstr "Ошибка вÑтавки удалённого профилÑ"
msgid "Duplicate notice"
msgstr "Дублировать запиÑÑŒ"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Ð’Ñ‹ заблокированы от подпиÑки."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе удаётÑÑ Ð²Ñтавить новую подпиÑку."
@@ -5799,19 +6186,19 @@ msgstr "Ответы"
msgid "Favorites"
msgstr "Любимое"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "ВходÑщие"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Ваши входÑщие ÑообщениÑ"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "ИÑходÑщие"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Ваши иÑходÑщие ÑообщениÑ"
@@ -5824,7 +6211,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 "ПодпиÑки"
@@ -5832,23 +6219,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 "Ð’Ñе группы"
@@ -5888,6 +6275,15 @@ msgstr "Повторить Ñту запиÑÑŒ?"
msgid "Repeat this notice"
msgstr "Повторить Ñту запиÑÑŒ"
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Отозвать у Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð¾Ð»ÑŒ «%s»"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "Ðи задан пользователь Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого режима."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "ПеÑочница"
@@ -5904,6 +6300,10 @@ msgstr "ПоиÑк по Ñайту"
msgid "Keyword(s)"
msgstr "Ключевые Ñлова"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "ПоиÑк"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Справка по поиÑку"
@@ -5955,33 +6355,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
@@ -6033,67 +6414,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "около чаÑа назад"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "около %d чаÑа(ов) назад"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "около Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "около %d днÑ(ей) назад"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "около меÑÑца назад"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "около %d меÑÑца(ев) назад"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "около года назад"
@@ -6109,7 +6504,7 @@ msgstr ""
"%s не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым цветом! ИÑпользуйте 3 или 6 шеÑтнадцатеричных "
"Ñимволов."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/statusnet.po b/locale/statusnet.po
index fedcf6e7b..0f6185ffc 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-01-21 22:36+0000\n"
+"POT-Creation-Date: 2010-03-05 22:34+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,12 +17,70 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr ""
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr ""
+
+#: 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
@@ -31,83 +89,92 @@ msgstr ""
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -117,22 +184,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr ""
@@ -147,7 +214,7 @@ msgstr ""
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -165,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 ""
@@ -176,7 +244,7 @@ msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -190,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."
@@ -292,76 +360,76 @@ msgstr ""
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr ""
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -372,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 ""
@@ -389,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 ""
@@ -409,94 +477,107 @@ msgstr ""
msgid "groups on %s"
msgstr ""
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr ""
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr ""
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr ""
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr ""
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr ""
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr ""
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -529,17 +610,17 @@ msgstr ""
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr ""
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -553,23 +634,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 ""
-
-#: 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"
@@ -590,27 +659,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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 ""
@@ -626,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 ""
@@ -639,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 ""
@@ -656,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -687,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 ""
@@ -718,22 +781,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 ""
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr ""
@@ -741,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 ""
@@ -829,16 +897,55 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr ""
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr ""
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: actions/deleteapplication.php:160
+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 ""
@@ -865,7 +972,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr ""
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -881,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 ""
@@ -995,12 +1102,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 ""
@@ -1016,32 +1124,24 @@ msgstr ""
msgid "Add to favorites"
msgstr ""
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
msgstr ""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr ""
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr ""
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr ""
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1050,43 +1150,47 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr ""
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr ""
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr ""
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr ""
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr ""
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr ""
@@ -1099,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: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 ""
@@ -1156,8 +1260,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr ""
@@ -1237,7 +1341,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1249,7 +1353,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr ""
@@ -1308,7 +1412,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr ""
@@ -1421,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
@@ -1450,7 +1570,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr ""
@@ -1482,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 ""
@@ -1716,6 +1842,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr ""
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1792,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"
@@ -1836,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 ""
@@ -1845,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 ""
@@ -1866,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr ""
@@ -1900,21 +2036,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr ""
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr ""
@@ -1924,7 +2060,7 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr ""
#: actions/newapplication.php:64
@@ -1935,11 +2071,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr ""
@@ -2064,28 +2200,28 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr ""
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2106,8 +2242,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2171,6 +2307,11 @@ msgstr ""
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2241,7 +2382,8 @@ msgstr ""
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2249,132 +2391,147 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr ""
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr ""
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr ""
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr ""
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr ""
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr ""
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr ""
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr ""
@@ -2399,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 ""
@@ -2426,13 +2583,13 @@ 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 ""
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr ""
@@ -2454,8 +2611,8 @@ msgid "Bio"
msgstr ""
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr ""
@@ -2479,7 +2636,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2505,7 +2662,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2518,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 ""
@@ -2547,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr ""
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2594,7 +2752,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2627,7 +2785,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2763,8 +2921,7 @@ msgstr ""
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -2803,7 +2960,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -2887,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 ""
@@ -2923,7 +3080,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr ""
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr ""
@@ -2931,42 +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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr ""
+
+#: 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 "
@@ -2978,6 +3140,18 @@ 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 ""
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr ""
@@ -2986,113 +3160,153 @@ msgstr ""
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 ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr ""
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr ""
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr ""
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: 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: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 "
@@ -3100,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 ""
@@ -3109,67 +3323,72 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr ""
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3179,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."
@@ -3188,7 +3407,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3219,6 +3438,11 @@ msgstr ""
msgid " tagged %s"
msgstr ""
+#: 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)"
@@ -3244,25 +3468,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3271,7 +3495,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3279,7 +3503,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr ""
@@ -3293,196 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr ""
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr ""
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr ""
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr ""
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
msgstr ""
-#: actions/siteadminpanel.php:367
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
msgstr ""
#: actions/smssettings.php:58
@@ -3577,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: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:69
+#: actions/subscribe.php:145
msgid "Subscribed"
msgstr ""
@@ -3649,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 "
@@ -3659,30 +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:86
+#: 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: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 ""
@@ -3700,7 +3928,8 @@ msgstr ""
msgid "User profile"
msgstr ""
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3731,7 +3960,7 @@ msgstr ""
msgid "No such tag."
msgstr ""
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3755,18 +3984,19 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3828,26 +4058,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr ""
@@ -3859,84 +4069,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr ""
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr ""
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr ""
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr ""
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr ""
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr ""
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -3955,20 +4165,31 @@ msgstr ""
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 ""
-#: 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"
@@ -3981,10 +4202,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr ""
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4016,7 +4233,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr ""
@@ -4053,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"
@@ -4070,61 +4291,96 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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
+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
+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 ""
@@ -4162,136 +4418,182 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-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:433
-msgid "Personal profile and friends timeline"
+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:438
-msgid "Connect"
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
+msgid "Connect to services"
msgstr ""
-#: lib/action.php:438
-msgid "Connect to services"
+#: lib/action.php:443
+msgid "Connect"
msgstr ""
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
msgstr ""
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
msgstr ""
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr ""
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
msgstr ""
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr ""
+
+#: lib/action.php:754
msgid "About"
msgstr ""
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr ""
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr ""
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: 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:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4299,130 +4601,205 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 ""
+
+#. 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 ""
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr ""
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr ""
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr ""
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr ""
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4450,11 +4827,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr ""
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr ""
@@ -4602,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"
@@ -4689,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"
@@ -4716,19 +5103,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4825,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 ""
@@ -4914,32 +5306,32 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5134,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 ""
@@ -5223,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 ""
@@ -5254,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr ""
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr ""
@@ -5327,11 +5724,7 @@ msgstr ""
msgid "Duplicate notice"
msgstr ""
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5347,19 +5740,19 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5372,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 ""
@@ -5380,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 ""
@@ -5436,6 +5829,15 @@ msgstr ""
msgid "Repeat this notice"
msgstr ""
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5452,6 +5854,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5503,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
@@ -5581,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
@@ -5655,7 +6056,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index 6046d5fe2..ffafd9f93 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,23 +9,82 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:31+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:36+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Ã…tkomst"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr "Inställningar för webbplatsåtkomst"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Registrering"
+
+#. 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
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Privat"
+
+#. 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."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Endast inbjudan"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Inaktivera nya registreringar."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Stängd"
+
+#. 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/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
@@ -34,57 +93,64 @@ msgstr "Ingen sådan sida"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 blockerade profiler, sida %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 "
@@ -93,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 "
@@ -103,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:202
+#: 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 "
@@ -112,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!"
@@ -127,22 +195,22 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: 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."
@@ -157,7 +225,7 @@ msgstr "API-metod hittades inte."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Denna metod kräver en POST."
@@ -175,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."
@@ -186,7 +255,7 @@ msgstr "Kunde inte spara profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -202,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."
@@ -228,7 +297,7 @@ msgstr "Hävning av blockering av användare misslyckades."
#: actions/apidirectmessage.php:89
#, php-format
msgid "Direct messages from %s"
-msgstr "Direktmeddelande från %s"
+msgstr "Direktmeddelanden från %s"
#: actions/apidirectmessage.php:93
#, php-format
@@ -304,77 +373,77 @@ msgstr "Du kan inte sluta följa dig själv."
msgid "Two user ids or screen_names must be supplied."
msgstr "Två användar-ID:n eller screen_names måste tillhandahållas."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Kunde inte fastställa användare hos källan."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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."
@@ -385,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."
@@ -402,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."
@@ -422,94 +491,110 @@ msgstr "%s grupper"
msgid "groups on %s"
msgstr "grupper på %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Dålig förfrågan."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Ingen oauth_token-parameter angiven."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Ogiltig token."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Det var ett problem med din sessions-token. Var vänlig försök igen."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "Ogiltigt smeknamn / lösenord!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
msgstr "Databasfel vid borttagning av OAuth-applikationsanvändare."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
msgstr "Databasfel vid infogning av OAuth-applikationsanvändare."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr "Begäran-token %s har godkänts. Byt ut den mot en åtkomst-token."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "Begäran-token %s har nekats."
+msgid "The request token %s has been denied and revoked."
+msgstr "Begäran-token %s har nekats och återkallats."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Oväntat inskick av formulär."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "En applikation skulle vilja ansluta till ditt konto"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Tillåt eller neka åtkomst"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"Applikationen <strong>%1$s</strong> av <strong>%2$s</strong> vill att "
+"möjligheten att <strong>%3$s</strong> din %4$s kontoinformation. Du bör bara "
+"ge tillgång till ditt %4$s-konto till tredje-parter du litar på."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Smeknamn"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Lösenord"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Neka"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Tillåt"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Tillåt eller neka åtkomst till din kontoinformation."
@@ -542,17 +627,17 @@ msgstr "Status borttagen."
msgid "No status with that ID found."
msgstr "Ingen status med det ID:t hittades."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Det är för långt. Maximal notisstorlek är %d tecken."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Hittades inte"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "Maximal notisstorlek är %d tecken, inklusive URL för bilaga."
@@ -566,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"
@@ -603,27 +676,22 @@ msgstr "%s publika tidslinje"
msgid "%s updates from everyone!"
msgstr "%s uppdateringar från alla!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Upprepat av %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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!"
@@ -639,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."
@@ -652,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"
@@ -670,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -701,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."
@@ -735,22 +802,23 @@ msgstr ""
"prenumeration på dig tas bort, de kommer inte kunna prenumerera på dig i "
"framtiden och du kommer inte bli underrättad om några @-svar från dem."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Ja"
-#: actions/block.php:144 actions/groupmembers.php:346 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"
@@ -758,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"
@@ -847,16 +919,58 @@ 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"
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Du måste vara inloggad för att ta bort en applikation."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Applikation hittades inte."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr "Det var ett problem med din sessions-token."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Ta bort applikation"
+
+#: 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 ""
+"Är du säker på att du vill ta bort denna applikation? Detta kommer rensa "
+"bort all data om applikationen från databasen, inklusive alla befintliga "
+"användaranslutningar."
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Ta inte bort denna applikation"
+
+#: actions/deleteapplication.php:160
+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."
@@ -885,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Ta bort denna notis"
@@ -901,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."
@@ -909,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"
@@ -1019,12 +1133,13 @@ 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:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1040,32 +1155,24 @@ msgstr "Denna notis är inte en favorit!"
msgid "Add to favorites"
msgstr "Lägg till i favoriter"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Inget sådant dokument."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Inget sådant dokument \"%s\""
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Redigera applikation"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Du måste vara inloggad för att redigera en applikation."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Du är inte ägaren av denna applikation."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Ingen sådan applikation."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Det var ett problem med din sessions-token."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "Använd detta formulär för att redigera din applikation."
@@ -1074,43 +1181,47 @@ msgstr "Använd detta formulär för att redigera din applikation."
msgid "Name is required."
msgstr "Namn krävs."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Namnet är för långt (max 255 tecken)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Namnet används redan. Prova ett annat."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Beskrivning krävs."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "URL till källa är för lång."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "URL till källa är inte giltig."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "Organisation krävs."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "Organisation är för lång (max 255 tecken)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "Hemsida för organisation krävs."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "Anrop är för lång."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "URL för anrop är inte giltig."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Kunde inte uppdatera applikation."
@@ -1123,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."
@@ -1182,8 +1293,8 @@ msgstr ""
"skräppostkorg!) efter ett meddelande med vidare instruktioner."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Avbryt"
@@ -1264,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Inte en giltig e-postadress."
@@ -1276,7 +1387,7 @@ msgstr "Det är redan din e-postadress."
msgid "That email address already belongs to another user."
msgstr "Den e-postadressen tillhör redan en annan användare."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Kunde inte infoga bekräftelsekod."
@@ -1338,7 +1449,7 @@ msgstr "Denna notis är redan en favorit!"
msgid "Disfavor favorite"
msgstr "Ta bort märkning som favorit"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "Populära notiser"
@@ -1457,6 +1568,22 @@ msgstr "Ingen sådan fil."
msgid "Cannot read file."
msgstr "Kan inte läsa fil."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ogiltig roll."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Denna roll är reserverad och kan inte ställas in"
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan inte bevilja användare roller på denna webbplats."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Användaren har redan denna roll."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1486,7 +1613,7 @@ msgstr "Användaren är redan blockerad från grupp."
msgid "User is not a member of group."
msgstr "Användare är inte en gruppmedlem."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Blockera användare från grupp"
@@ -1521,31 +1648,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."
@@ -1553,62 +1680,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Administratör"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Blockera"
-#: actions/groupmembers.php:441
+#: 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:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Gör till administratör"
-#: actions/groupmembers.php:473
+#: 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"
@@ -1780,6 +1913,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Detta är inte ditt Jabber-ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Inkorg för %1$s - sida %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1863,16 +2001,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"
@@ -1902,12 +2042,42 @@ msgid ""
"\n"
"Sincerely, %2$s\n"
msgstr ""
+"%1$s har bjudit in dig till dem på %2$s (%3$s).\n"
+"\n"
+"%2$s är en mikrobloggtjänst som låter dig hålla dig uppdaterad med folk du "
+"känner och folk som intresserar dig . \n"
+"\n"
+"Du kan också dela nyheter om dig själv, dina tankar, eller ditt liv online "
+"med folk som känner till dig. Det är också bra för att träffa nya människor "
+"som delar dina intressen.\n"
+"\n"
+"%1$s sa:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Du kan se %1$ss profilsida på %2$s här: \n"
+"\n"
+"%5$s\n"
+"\n"
+"Om du vill prova tjänsten, klicka på länken nedan för att acceptera "
+"inbjudan. \n"
+"\n"
+"%6$s\n"
+"\n"
+"Om inte, kan du bortse från detta meddelande. Tack för ditt tålamod och din "
+"tid\n"
+"\n"
+"Vänliga hälsningar, %2$s\n"
#: actions/joingroup.php:60
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"
@@ -1916,11 +2086,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"
@@ -1937,8 +2107,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Logga in"
@@ -1975,21 +2144,21 @@ msgstr ""
"Logga in med ditt användarnamn och lösenord. Har du inget användarnamn ännu? "
"[Registrera](%%action.register%%) ett nytt konto."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "Bara en administratör kan göra en annan användare till administratör."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s är redan en administratör för grupp \"%2$s\"."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Kan inte hämta uppgift om medlemskap för %1$s i grupp %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Kan inte göra %1$s till en administratör för grupp %2$s."
@@ -1999,7 +2168,7 @@ msgid "No current status"
msgstr "Ingen aktuell status"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Ny applikation"
#: actions/newapplication.php:64
@@ -2010,11 +2179,11 @@ msgstr "Du måste vara inloggad för att registrera en applikation."
msgid "Use this form to register a new application."
msgstr "Använd detta formulär för att registrera en ny applikation."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "URL till källa krävs."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Kunde inte skapa applikation."
@@ -2149,28 +2318,28 @@ msgstr "Applikationer du har registrerat"
msgid "You have not registered any applications yet."
msgstr "Du har inte registrerat några applikationer än."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Anslutna applikationer"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr "Du har tillåtit följande applikationer att komma åt ditt konto."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Du är inte en användare av den applikationen."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "Kunde inte återkalla åtkomst för applikation: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr "Du har inte tillåtit några applikationer att använda ditt konto."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
"Utvecklare kan redigera registreringsinställningarna för sina applikationer "
@@ -2192,8 +2361,8 @@ msgstr "innehållstyp "
msgid "Only "
msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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"
@@ -2257,6 +2426,11 @@ msgstr "Ogiltig inloggnings-token angiven."
msgid "Login token expired."
msgstr "Inloggnings-token förfallen."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Utkorg för %1$s - sida %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2327,7 +2501,8 @@ msgstr "Kan inte spara nytt lösenord."
msgid "Password saved."
msgstr "Lösenord sparat."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Sökvägar"
@@ -2335,132 +2510,148 @@ msgstr "Sökvägar"
msgid "Path and server settings for this StatusNet site."
msgstr "Sökvägs- och serverinställningar för denna StatusNet-webbplats."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Katalog med teman är inte läsbar: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "Katalog med avatarer är inte skrivbar: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "Katalog med bakgrunder är inte skrivbar: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Katalog med lokaliseringfiler (locales) är inte läsbar. %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Ogiltigt SSL-servernamn. Den maximala längden är 255 tecken."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Webbplats"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Server"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Värdnamn för webbplatsens server."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "Sökväg"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "Sökväg till webbplats"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "Sökväg till lokaliseringfiler (locales)"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Katalogsökväg till lokaliseringfiler (locales)"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Utsmyckade URL:er"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+"Skall utsmyckade URL:er användas (mer läsbara och lättare att komma ihåg)?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Teman"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Server med teman"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "Sökväg till teman"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Katalog med teman"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Avatarer"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Server med avatarer"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "Sökväg till avatarer"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Katalog med avatarer"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Bakgrunder"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Server med bakgrunder"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "Sökväg till bakgrunder"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Katalog med bakgrunder"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Aldrig"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Ibland"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Alltid"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "Använd SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "När SSL skall användas"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-server"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Server att dirigera SSL-begäran till"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Spara sökvägar"
@@ -2487,11 +2678,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’."
@@ -2516,13 +2707,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Hemsida"
@@ -2544,8 +2735,8 @@ msgid "Bio"
msgstr "Biografi"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Plats"
@@ -2571,7 +2762,7 @@ msgstr ""
"Taggar för dig själv (bokstäver, nummer, -, ., och _), separerade med "
"kommatecken eller mellanslag"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2599,7 +2790,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidszon inte valt."
@@ -2612,23 +2803,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."
@@ -2641,28 +2833,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Publikt flöde av ström (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Publikt flöde av ström (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Publikt flöde av ström (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2671,11 +2863,11 @@ msgstr ""
"Detta är den publika tidslinjen för %%site.name%% men ingen har postat något "
"än."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Bli först att posta!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2683,7 +2875,7 @@ msgstr ""
"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
"posta!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2696,7 +2888,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:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2734,7 +2926,7 @@ msgstr ""
"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
"posta en!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Taggmoln"
@@ -2875,8 +3067,7 @@ msgstr "Tyvärr, ogiltig inbjudningskod."
msgid "Registration successful"
msgstr "Registreringen genomförd"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Registrera"
@@ -2919,7 +3110,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -2967,6 +3158,20 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
+"Grattis, %1$s! Och välkommen till %%%%site.name%%%%. Härifrån kan du...\n"
+"\n"
+"* Gå till [din profil](%2$s) och skicka ditt första meddelande.\n"
+"* Lägg till en [Jabber/GTalk-adress](%%%%action.imsettings%%%%) så att du "
+"kan skicka notiser via snabbmeddelanden.\n"
+"* [Söka efter personer](%%%%action.peoplesearch%%%%) som du kanske känner "
+"eller som delar dina intressen. \n"
+"* Uppdatera dina [profilinställningar](%%%%action.profilesettings%%%%) för "
+"att berätta mer om dig. \n"
+"* Läs igenom [online-dokumentationen](%%%%doc.help%%%%) för funktioner du "
+"kan ha missat. \n"
+"\n"
+"Tack för att du anmält dig och vi hoppas att du kommer tycka om att använda "
+"denna tjänst."
#: actions/register.php:562
msgid ""
@@ -3013,7 +3218,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"
@@ -3051,7 +3256,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
msgstr "Upprepad"
@@ -3059,28 +3264,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:144
+#: 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: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 "
@@ -3089,7 +3299,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 "
@@ -3098,7 +3308,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 "
@@ -3112,6 +3322,19 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Svar till %1$s på %2$s"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kan inte återkalla användarroller 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"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Du kan inte flytta användare till sandlådan på denna webbplats."
@@ -3120,75 +3343,106 @@ 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:390
+msgid "Sessions"
+msgstr "Sessioner"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "Sessionsinställningar för denna StatusNet-webbplats."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Hantera sessioner"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr "Hurvida sessioner skall hanteras av oss själva."
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr "Sessionsfelsökning"
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr "Sätt på felsökningsutdata för sessioner."
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr "Spara webbplatsinställningar"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr "Du måste vara inloggad för att se en applikation."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Applikationsprofil"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Ikon"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Namn"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "Organisation"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Beskrivning"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistik"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "skapad av %1$s - %2$s standardåtkomst - %3$d användare"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Skapad av %1$s - %2$s standardåtkomst - %3$d användare"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "Åtgärder för applikation"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Återställ nyckel & hemlighet"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Information om applikation"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Nyckel för konsument"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Hemlighet för konsument"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "URL för begäran-token"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "URL för åtkomst-token"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Tillåt URL"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3196,26 +3450,36 @@ msgstr ""
"Notera: Vi stöjder HMAC-SHA1-signaturer. Vi stödjer inte metoden med "
"klartextsignatur."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+"Är du säker på att du vill återställa din konsumentnyckel och -hemlighet?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%1$ss favoritnotiser, sida %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3224,7 +3488,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 "
@@ -3233,7 +3497,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 "
@@ -3244,7 +3508,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."
@@ -3253,67 +3517,72 @@ msgstr "Detta är ett sätt att dela med av det du gillar."
msgid "%s group"
msgstr "%s grupp"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s grupp, sida %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Grupprofil"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3328,7 +3597,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."
@@ -3336,12 +3605,12 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
-"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad den fria programvaran "
+"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad den fria programvaran "
"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
"sina liv och intressen. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratörer"
@@ -3372,6 +3641,11 @@ msgstr "Notis borttagen."
msgid " tagged %s"
msgstr "taggade %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, sida %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3397,12 +3671,12 @@ msgstr "Flöde av notiser för %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF för %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Detta är tidslinjen för %1$s men %2$s har inte postat något än."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3410,7 +3684,7 @@ msgstr ""
"Sett något intressant nyligen? Du har inte postat några notiser än. Varför "
"inte börja nu?"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3419,7 +3693,7 @@ msgstr ""
"Du kan prova att knuffa %1$s eller [posta något för hans eller hennes "
"uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3427,23 +3701,23 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad på den fria programvaran "
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad på den fria programvaran "
"[StatusNet](http://status.net/). [Gå med nu](%%%%action.register%%%%) för "
"att följa **%s**s notiser och många fler! ([Läs mer](%%%%doc.help%%%%))"
-#: actions/showstream.php:239
+#: 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 ""
-"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
-"wikipedia.org/wiki/Micro-blogging)tjänst baserad på den fria programvaran "
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://sv."
+"wikipedia.org/wiki/Mikroblogg)tjänst baserad på den fria programvaran "
"[StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr "Upprepning av %s"
@@ -3457,200 +3731,137 @@ 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:146
+#: 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:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Okänt språk \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Ogiltig rapport-URL för ögonblicksbild"
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Ogiltigt körvärde för ögonblicksbild."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Minsta textbegränsning är 140 tecken."
-#: actions/siteadminpanel.php:203
+#: 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:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Allmänt"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Webbplatsnamn"
-#: actions/siteadminpanel.php:257
+#: 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:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Tillhandahållen av"
-#: actions/siteadminpanel.php:262
+#: 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:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Tillhandahållen av URL"
-#: actions/siteadminpanel.php:267
+#: 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:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakte-postadress för din webbplats"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokal"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardtidszon"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standardtidzon för denna webbplats; vanligtvis UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Webbplatsens standardspråk"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL:er"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Server"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Värdnamn för webbplatsens server."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Utsmyckade URL:er"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Skall utsmyckade URL:er användas (mer läsbara och lättare att komma ihåg)?"
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "Ã…tkomst"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Privat"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-"Skall anonyma användare (inte inloggade) förhindras från att se webbplatsen?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Endast inbjudan"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Gör så att registrering endast sker genom inbjudan."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Stängd"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "Inaktivera nya registreringar."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Ögonblicksbild"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Slumpmässigt vid webbförfrågningar"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "I ett schemalagt jobb"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Ögonblicksbild av data"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "När statistikdata skall skickas till status.net-servrar"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "Frekvens"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "URL för rapport"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Ögonblicksbild kommer skickat till denna URL"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Begränsningar"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Textbegränsning"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximala antalet tecken för notiser."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplikatbegränsning"
-#: actions/siteadminpanel.php:374
+#: 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/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Spara webbplatsinställningar"
+#: 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"
@@ -3751,19 +3962,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:69
+#: 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:145
msgid "Subscribed"
msgstr "Prenumerant"
@@ -3827,7 +4107,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 "
@@ -3843,30 +4123,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:86
+#: 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: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)"
@@ -3884,7 +4169,8 @@ msgstr "Tagg %s"
msgid "User profile"
msgstr "Användarprofil"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Foto"
@@ -3920,7 +4206,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."
@@ -3944,7 +4230,7 @@ msgstr "Ingen profil-ID i begäran."
msgid "Unsubscribed"
msgstr "Prenumeration avslutad"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3952,12 +4238,13 @@ 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"
@@ -4021,26 +4308,6 @@ msgstr "Inbjudningar aktiverade"
msgid "Whether to allow users to invite new users."
msgstr "Hurvida användare skall tillåtas bjuda in nya användare."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "Sessioner"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "Hantera sessioner"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Hurvida sessioner skall hanteras av oss själva."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "Sessionsfelsökning"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Sätt på felsökningsutdata för sessioner."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Godkänn prenumeration"
@@ -4055,36 +4322,36 @@ msgstr ""
"prenumerera på den här användarens notiser. Om du inte bett att prenumerera "
"på någons meddelanden, klicka på \"Avvisa\"."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "Licens"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Acceptera"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "Prenumerera på denna användare"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Avvisa"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Avvisa denna prenumeration"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ingen begäran om godkännande!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Prenumeration godkänd"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4094,11 +4361,11 @@ msgstr ""
"med webbplatsens instruktioner hur du bekräftar en prenumeration. Din "
"prenumerations-token är:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Prenumeration avvisad"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4108,37 +4375,37 @@ msgstr ""
"webbplatsens instruktioner för detaljer om hur du fullständingt avvisar "
"prenumerationen."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "URI för lyssnare '%s' hittades inte här."
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "Lyssnar-URI '%s' är för lång."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "Lyssnar-URI '%s' är en lokal användare."
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "Profil-URL ‘%s’ är för en lokal användare."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "Avatar-URL ‘%s’ är inte giltig."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Kan inte läsa avatar-URL '%s'."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Fel bildtyp för avatar-URL '%s'."
@@ -4158,21 +4425,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "Smaklig måltid!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s grupper, sida %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4187,10 +4465,6 @@ msgstr ""
"Denna webbplats drivs med %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. och medarbetare."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Medarbetare"
@@ -4226,13 +4500,13 @@ msgid ""
"along with this program. If not, see %s."
msgstr ""
"Du bör ha fått en kopia av GNU Affero General Public License tillsammans med "
-"detta program. Om inte, se% s."
+"detta program. Om inte, se %s."
#: actions/version.php:189
msgid "Plugins"
msgstr "Insticksmoduler"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4271,6 +4545,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"
@@ -4288,27 +4566,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:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Databasfel vid infogning av hashtag: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem vid sparande av notis. För långt."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem vid sparande av notis. Okänd användare."
-#: classes/Notice.php:234
+#: 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:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4316,37 +4594,73 @@ msgstr ""
"För många duplicerade meddelanden för snabbt; ta en vilopaus och posta igen "
"om ett par minuter."
-#: classes/Notice.php:246
+#: 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:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem med att spara notis."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Databasfel vid infogning av svar: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Problem med att spara gruppinkorg."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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"
@@ -4384,124 +4698,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Namnlös sida"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primär webbplatsnavigation"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Hem"
-
-#: lib/action.php:433
+#. 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: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:438
-msgid "Connect"
-msgstr "Anslut"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "Bjud in"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Administratör"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Logga ut"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Bjud in"
-#: lib/action.php:452
+#. 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:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Hjälp"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Logga in"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjälp mig!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Sök"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjälp"
-#: lib/action.php:466
+#. 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:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokala vyer"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidnotis"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Sekundär webbplatsnavigation"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Hjälp"
+
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "Frågor & svar"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "Användarvillkor"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Sekretess"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Källa"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblem"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Programvarulicens för StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4510,12 +4870,12 @@ msgstr ""
"**%%site.name%%** är en mikrobloggtjänst tillhandahållen av [%%site.broughtby"
"%%](%%site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
-msgstr "**%%site.name%%** är en mikrobloggtjänst."
+msgstr "**%%site.name%%** är en mikrobloggtjänst. "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4526,130 +4886,211 @@ msgstr ""
"version %s, tillgänglig under [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licens för webbplatsinnehåll"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "Innehåll och data av %1$s är privat och konfidensiell."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "Innehåll och data copyright av %1$s. Alla rättigheter reserverade."
-#: lib/action.php:808
+#: 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:820
+#: lib/action.php:847
msgid "All "
msgstr "Alla "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "licens."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Numrering av sidor"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Senare"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguration av sökvägar"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "Konfiguration av sessioner"
+
+#. 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:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+"Misslyckat försök till API-autentisering, smeknamn =%1$s, proxy =%2$s, ip =%3"
+"$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Redigera applikation"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Ikon för denna applikation"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Beskriv din applikation med högst %d tecken"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Beskriv din applikation"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "URL för källa"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "URL till hemsidan för denna applikation"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "Organisation som ansvarar för denna applikation"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "URL till organisationens hemsidan"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "URL att omdirigera till efter autentisering"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "Webbläsare"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "Skrivbord"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Typ av applikation, webbläsare eller skrivbord"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Skrivskyddad"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Läs och skriv"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Standardåtkomst för denna applikation: skrivskyddad, eller läs och skriv"
@@ -4678,11 +5119,11 @@ msgstr "Notiser där denna bilaga förekommer"
msgid "Tags for this attachment"
msgstr "Taggar för denna billaga"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Byte av lösenord misslyckades"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Byte av lösenord är inte tillåtet"
@@ -4833,81 +5274,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"
@@ -4921,6 +5371,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"
@@ -4947,26 +5398,64 @@ msgid ""
"tracks - not yet implemented.\n"
"tracking - not yet implemented.\n"
msgstr ""
-
-#: lib/common.php:131
+"Kommandon:\n"
+"on - sätt på notifikationer\n"
+"off - stäng av notifikationer\n"
+"help - visa denna hjälp\n"
+"follow <smeknamn> - prenumerera på användare\n"
+"groups - lista grupperna du tillhör\n"
+"subscriptions - lista personerna du följer\n"
+"subscribers - lista personerna som följer dig\n"
+"leave <smeknamn> - avsluta prenumeration på användare\n"
+"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"
+"repeat <smeknamn> - upprepa den senaste notisen från användare\n"
+"reply #<notisid> - svara på notis med en given id\n"
+"reply <smeknamn> - svara på den senaste notisen från användare\n"
+"join <grupp> - gå med i grupp\n"
+"login - hämta en länk till webbgränssnittets inloggningssida\n"
+"drop <grupp> - lämna grupp\n"
+"stats - hämta din statistik\n"
+"stop - samma som 'off'\n"
+"quit - samma som 'off'\n"
+"sub <smeknamn> - samma som 'follow'\n"
+"unsub <smeknamn> - samma som 'leave'\n"
+"last <smeknamn> - samma som 'get'\n"
+"on <smeknamn> - inte implementerat än.\n"
+"off <smeknamn> - inte implementerat än.\n"
+"nudge <smeknamn> - påminn en användare om att uppdatera\n"
+"invite <telefonnummer> - inte implementerat än.\n"
+"track <ord> - inte implementerat än.\n"
+"untrack <ord> - inte implementerat än.\n"
+"track off - inte implementerat än.\n"
+"untrack all - inte implementerat än.\n"
+"tracks - inte implementerat än.\n"
+"tracking - inte implementerat än.\n"
+
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Ingen konfigurationsfil hittades. "
-#: lib/common.php:132
+#: 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:134
+#: 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:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "GÃ¥ till installeraren."
#: lib/connectsettingsaction.php:110
msgid "IM"
-msgstr "IM"
+msgstr "Snabbmeddelande"
#: lib/connectsettingsaction.php:111
msgid "Updates by instant messenger (IM)"
@@ -5059,6 +5548,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"
@@ -5148,32 +5642,32 @@ 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"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Okänd källa för inkorg %d."
@@ -5214,6 +5708,18 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"Hej %s!\n"
+"\n"
+"Någon la precis till den här e-postadressen på %s.\n"
+"\n"
+"Om det var du och du vill bekräfta det, använd webbadressen nedan:\n"
+"\n"
+"%s\n"
+"\n"
+"Om inte, ignorera bara det här meddelandet.\n"
+"\n"
+"Tack för din tid, \n"
+"%s\n"
#: lib/mail.php:236
#, php-format
@@ -5234,6 +5740,16 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
+"%1$s lyssnar nu på dina notiser på %2$s.\n"
+"\n"
+"%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Med vänliga hälsningar,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Ändra din e-postadress eller notiferingsinställningar på %8$s\n"
#: lib/mail.php:258
#, php-format
@@ -5295,6 +5811,17 @@ msgid ""
"With kind regards,\n"
"%4$s\n"
msgstr ""
+"%1$s (%2$s) undrar vad du håller på med nuförtiden och inbjuder dig att "
+"lägga upp några nyheter.\n"
+"\n"
+"Så låt oss höra av dig :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Svara inte på det här e-postmeddelandet; det kommer inte komma fram.\n"
+"\n"
+"Med vänliga hälsningar,\n"
+"%4$s\n"
#: lib/mail.php:510
#, php-format
@@ -5319,6 +5846,20 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) skickade ett privat meddelande till dig:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"Du kan svara på meddelandet här:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Svara inte på detta e-postmeddelande; det kommer inte komma fram.\n"
+"\n"
+"Med vänliga hälsningar,\n"
+"%5$s\n"
#: lib/mail.php:559
#, php-format
@@ -5345,6 +5886,22 @@ msgid ""
"Faithfully yours,\n"
"%6$s\n"
msgstr ""
+"%1$s (@%7$s) la precis till din notis från %2$s som en av sina favoriter.\n"
+"\n"
+"Webbadressen för din notis är:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Texten i din notis är:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Du kan se listan med %1$ss favoriter här:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Med vänliga hälsningar,\n"
+"%6$s\n"
#: lib/mail.php:624
#, php-format
@@ -5365,6 +5922,17 @@ msgid ""
"\t%4$s\n"
"\n"
msgstr ""
+"%1$s (@%9$s) skickade precis en notis för din uppmärksamhet (ett '@-svar') "
+"på %2$s.\n"
+"\n"
+"Notisen är här:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Den lyder:\n"
+"\n"
+"%4$s\n"
+"\n"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
@@ -5379,7 +5947,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"
@@ -5472,6 +6040,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"
@@ -5505,48 +6078,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "i sammanhang"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
msgstr "Upprepad av"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "Svara på denna notis"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
msgstr "Notis upprepad"
@@ -5578,11 +6151,7 @@ msgstr "Fel vid infogning av fjärrprofilen"
msgid "Duplicate notice"
msgstr "Duplicerad notis"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Du har blivit utestängd från att prenumerera."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Kunde inte infoga ny prenumeration."
@@ -5598,19 +6167,19 @@ msgstr "Svar"
msgid "Favorites"
msgstr "Favoriter"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Inkorg"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Dina inkommande meddelanden"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Utkorg"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Dina skickade meddelanden"
@@ -5623,7 +6192,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"
@@ -5631,23 +6200,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"
@@ -5687,6 +6256,15 @@ msgstr "Upprepa denna notis?"
msgid "Repeat this notice"
msgstr "Upprepa denna notis"
+#: 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."
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr "Flytta till sandlådan"
@@ -5703,6 +6281,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"
@@ -5754,33 +6336,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
@@ -5832,67 +6395,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "för ett år sedan"
@@ -5906,7 +6486,7 @@ msgstr "%s är inte en giltig färg!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Meddelande för långt - maximum är %1$d tecken, du skickade %2$d."
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index 4b313d88f..f32e1499e 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,23 +9,86 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:34+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:39+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "అంగీకరించà±"
+
+#. 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 "నమోదà±"
+
+#. 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 "అంతరంగికం"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à± మాతà±à°°à°®à±‡ నమోదౠఅవà±à°µà°—లిగేలా చెయà±à°¯à°¿."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à°•à± మాతà±à°°à°®à±‡"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "కొతà±à°¤ నమోదà±à°²à°¨à± అచేతనంచేయి."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
+
+#: 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
@@ -33,83 +97,92 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -119,22 +192,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -150,7 +223,7 @@ msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -169,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 "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
@@ -181,7 +255,7 @@ msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -195,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."
@@ -250,7 +324,7 @@ msgstr "చాలా పొడవà±à°‚ది. à°—à°°à°¿à°·à±à°  సందేà°
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
-msgstr ""
+msgstr "à°…à°‚à°¦à±à°•à±‹à°µà°¾à°²à±à°¸à°¿à°¨ వాడà±à°•à°°à°¿ కనబడలేదà±."
#: actions/apidirectmessagenew.php:150
msgid "Can't send direct messages to users who aren't your friend."
@@ -279,12 +353,12 @@ msgstr "ఇషà±à°Ÿà°¾à°‚శానà±à°¨à°¿ తొలగించలేకపà±
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
-msgstr ""
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°…à°¨à±à°¸à°°à°¿à°‚చలేకపోయాం: వాడà±à°•à°°à°¿ కనబడలేదà±."
#: actions/apifriendshipscreate.php:118
#, php-format
msgid "Could not follow user: %s is already on your list."
-msgstr ""
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°…à°¨à±à°¸à°°à°¿à°‚చలేకపోయాం: %s ఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ జాబితాలో ఉనà±à°¨à°¾à°°à±."
#: actions/apifriendshipsdestroy.php:109
#, fuzzy
@@ -300,77 +374,77 @@ msgstr "మిమà±à°®à°²à±à°¨à°¿ మీరే నిరోధించà±à°•à
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "మారà±à°ªà±‡à°°à± పేరà±à°¤à±‹ సమానంగా ఉండకూడదà±."
@@ -381,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"
@@ -398,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 à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం."
@@ -418,96 +492,110 @@ msgstr "%s à°—à±à°‚à°ªà±à°²à±"
msgid "groups on %s"
msgstr "%s పై à°—à±à°‚à°ªà±à°²à±"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "తపà±à°ªà±à°¡à± à°…à°­à±à°¯à°°à±à°¥à°¨."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
-#, fuzzy
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
-msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా సంకేతపదం తపà±à°ªà±."
+msgstr "తపà±à°ªà±à°¡à± పేరౠ/ సంకేతపదం!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
-msgstr ""
+#: actions/apioauthauthorize.php:159
+#, fuzzy
+msgid "Database error deleting OAuth application user."
+msgstr "అవతారానà±à°¨à°¿ పెటà±à°Ÿà°¡à°‚లో పొరపాటà±"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "అవతారానà±à°¨à°¿ పెటà±à°Ÿà°¡à°‚లో పొరపాటà±"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "ఖాతా"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "పేరà±"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "సంకేతపదం"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "తిరసà±à°•à°°à°¿à°‚à°šà±"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "à°…à°¨à±à°®à°¤à°¿à°‚à°šà±"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -525,14 +613,12 @@ msgid "No such notice."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ సందేశమేమీ లేదà±."
#: actions/apistatusesretweet.php:83
-#, fuzzy
msgid "Cannot repeat your own notice."
-msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోతే మీరౠనమోదà±à°šà±‡à°¸à±à°•à±‹à°²à±‡à°°à±."
+msgstr "మీ నోటీసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±."
#: actions/apistatusesretweet.php:91
-#, fuzzy
msgid "Already repeated that notice."
-msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±"
+msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -542,17 +628,17 @@ msgstr "à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ తొలగించాం."
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "అది చాలా పొడవà±à°‚ది. à°—à°°à°¿à°·à±à°  నోటీసౠపరిమాణం %d à°…à°•à±à°·à°°à°¾à°²à±."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "దొరకలేదà±"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr "à°—à°°à°¿à°·à±à°  నోటీసౠపొడవౠ%d à°…à°•à±à°·à°°à°¾à°²à±, జోడింపౠURLని à°•à°²à±à°ªà±à°•à±à°¨à°¿."
@@ -566,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"
@@ -601,29 +675,24 @@ msgstr "%s బహిరంగ కాలరేఖ"
#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
-msgstr ""
-
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
+msgstr "అందరి à°¨à±à°‚à°¡à°¿ %s తాజాకరణలà±!"
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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 యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
@@ -639,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 "పేరౠలేదà±."
@@ -653,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 "అవతారం"
@@ -670,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "à°•à°¤à±à°¤à°¿à°°à°¿à°‚à°šà±"
@@ -701,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 ""
@@ -732,22 +800,23 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "à°…à°µà±à°¨à±"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
@@ -755,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 "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
@@ -845,16 +918,57 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "ఉపకరణాలని తొలగించడానికి మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "ఉపకరణం కనబడలేదà±."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "మీరౠఈ ఉపకరణం యొకà±à°• యజమాని కాదà±."
+
+#: 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 "ఉపకరణ తొలగింపà±"
+
+#: 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 "à°ˆ ఉపకరణానà±à°¨à°¿ తొలగించకà±"
+
+#: actions/deleteapplication.php:160
+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 "లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చలేదà±."
@@ -881,7 +995,7 @@ msgstr "మీరౠనిజంగానే à°ˆ నోటీసà±à°¨à°¿ à°¤à±
msgid "Do not delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించకà±"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±"
@@ -897,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."
@@ -905,18 +1019,18 @@ 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 "రూపà±à°°à±‡à°–à°²à±"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "à°ˆ à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటౠసైటà±à°•à°¿ రూపà±à°°à±‡à°–à°² అమరికలà±."
#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
@@ -1013,12 +1127,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "à°­à°¦à±à°°à°ªà°°à°šà±"
@@ -1034,84 +1149,76 @@ msgstr "à°ˆ నోటీసౠఇషà±à°Ÿà°¾à°‚శం కాదà±!"
msgid "Add to favorites"
msgstr "ఇషà±à°Ÿà°¾à°‚శాలకౠచేరà±à°šà±"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పతà±à°°à°®à±‡à°®à±€ లేదà±."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "ఉపకరణానà±à°¨à°¿ మారà±à°šà±"
#: actions/editapplication.php:66
-#, fuzzy
msgid "You must be logged in to edit an application."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "మీరౠఈ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
+msgstr "ఉపకరణాలని మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
-#, fuzzy
msgid "No such application."
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ సందేశమేమీ లేదà±."
-
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
+msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ ఉపకరణం లేదà±."
#: actions/editapplication.php:161
-#, fuzzy
msgid "Use this form to edit your application."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించండి."
+msgstr "మీ ఉపకరణానà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించండి."
#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
msgid "Name is required."
-msgstr "పై సంకేతపదం మరోసారి. తపà±à°ªà°¨à°¿à°¸à°°à°¿."
+msgstr "పేరౠతపà±à°ªà°¨à°¿à°¸à°°à°¿."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "పేరౠచాలా పెదà±à°¦à°—à°¾ ఉంది (à°—à°°à°¿à°·à±à° à°‚à°—à°¾ 255 à°…à°•à±à°·à°°à°¾à°²à±)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "à°† పేరà±à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ వాడà±à°¤à±à°¨à±à°¨à°¾à°°à±. మరోటి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "వివరణ తపà±à°ªà°¨à°¿à°¸à°°à°¿."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "హోమౠపేజీ URL సరైనది కాదà±."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "సంసà±à°¥ తపà±à°ªà°¨à°¿à°¸à°°à°¿."
-#: actions/editapplication.php:203 actions/newapplication.php:188
-#, fuzzy
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
-msgstr "à°ªà±à°°à°¾à°‚తం పేరౠమరీ పెదà±à°¦à°—à°¾ ఉంది (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
+msgstr "సంసà±à°¥ పేరౠమరీ పెదà±à°¦à°—à°¾ ఉంది (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
@@ -1125,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 "ఎంపికలౠభదà±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
@@ -1182,8 +1289,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿"
@@ -1263,7 +1370,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "సరైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ కాదà±:"
@@ -1275,7 +1382,7 @@ msgstr "అది ఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ ఈమెయిలౠచిà°
msgid "That email address already belongs to another user."
msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ ఇపà±à°ªà°Ÿà±‡à°•à±‡ ఇతర వాడà±à°•à°°à°¿à°•à°¿ సంబంధించినది."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతానà±à°¨à°¿ చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
@@ -1334,7 +1441,7 @@ msgstr "à°ˆ నోటీసౠఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ ఇషà±à°Ÿà°¾à°
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "à°ªà±à°°à°¾à°šà±à°°à±à°¯ నోటీసà±à°²à±"
@@ -1389,7 +1496,7 @@ msgstr "విశేష వాడà±à°•à°°à±à°²à±, పేజీ %d"
#: actions/featured.php:99
#, php-format
msgid "A selection of some great users on %s"
-msgstr ""
+msgstr "%sలో కొందరౠగొపà±à°ª వాడà±à°•à°°à±à°² యొకà±à°• ఎంపిక"
#: actions/file.php:34
#, fuzzy
@@ -1426,7 +1533,7 @@ msgstr "à°† వాడà±à°•à°°à°¿ మిమà±à°®à°²à±à°¨à°¿ చందాచే
#: actions/finishremotesubscribe.php:110
msgid "You are not authorized."
-msgstr ""
+msgstr "మీకౠఅధీకరణ లేదà±."
#: actions/finishremotesubscribe.php:113
msgid "Could not convert request token to access token."
@@ -1448,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
@@ -1477,7 +1603,7 @@ msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à
msgid "User is not a member of group."
msgstr "వాడà±à°•à°°à°¿ à°ˆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚పౠనà±à°‚à°¡à°¿ నిరోధించà±"
@@ -1488,6 +1614,8 @@ msgid ""
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
+"నిజంగానే వాడà±à°•à°°à°¿ \"%1$s\"ని \"%2$s\" à°—à±à°‚పౠనà±à°‚à°¡à°¿ నిరోధించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? వారిని à°—à±à°‚పౠనà±à°‚à°¡à°¿ "
+"తొలగిసà±à°¤à°¾à°‚, ఇక భవిషà±à°¯à°¤à±à°¤à±à°²à±‹ వారౠగà±à°‚à°ªà±à°²à±‹ à°ªà±à°°à°šà±à°°à°¿à°‚చలేరà±, మరియౠగà±à°‚à°ªà±à°•à°¿ చందాచేరలేరà±."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1510,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
-#, fuzzy, php-format
+#: actions/groupmembers.php:103
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "%s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "నిరోధించà±"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°—à±à°‚à°ªà±à°•à°¿ à°’à°• నిరà±à°µà°¾à°¹à°•à±à°¨à°¿à°—à°¾ చేయి"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°¨à±à°¨à°¿ చేయి"
-#: actions/groupmembers.php:473
+#: 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 "à°—à±à°‚à°ªà±à°²à±"
@@ -1615,6 +1749,10 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"ఒకే రకమైన ఆసకà±à°¤à±à°²à± ఉనà±à°¨ à°µà±à°¯à°•à±à°¤à±à°²à± à°•à°²à±à°¸à±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ మరియౠమాటà±à°²à°¾à°¡à±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ %%%%site.name%%%% "
+"à°—à±à°‚à°ªà±à°²à± వీలà±à°•à°²à±à°ªà°¿à°¸à±à°¤à°¾à°¯à°¿. à°’à°• à°—à±à°‚à°ªà±à°²à±‹ చేరిన తరà±à°µà°¾à°¤ మీరౠ\"!groupname\" à°…à°¨à±à°¨ సంకేతం à°¦à±à°µà°¾à°°à°¾ à°† "
+"à°—à±à°‚పౠలోని సభà±à°¯à±à°²à°‚దరికీ సందేశాలని పంపించవచà±à°šà±. మీకౠనచà±à°šà°¿à°¨ à°—à±à°‚పౠకనబడలేదా? [దాని కోసం వెతకండి](%%"
+"%%action.groupsearch%%%%) లేదా [మీరే కొతà±à°¤à°¦à°¿ సృషà±à°Ÿà°¿à°‚à°šà°‚à°¡à°¿!](%%%%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -1652,6 +1790,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and [create the group](%%"
"action.newgroup%%) yourself!"
msgstr ""
+"[à°’à°• ఖాతాని నమోదà±à°šà±‡à°¸à±à°•à±à°¨à°¿](%%action.register%%) మీరే à°Žà°‚à°¦à±à°•à± [à°† à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚à°š](%%"
+"action.newgroup%%)కూడదà±!"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
@@ -1749,6 +1889,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "ఇది మీ Jabber ID కాదà±"
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "%sà°•à°¿ వచà±à°šà°¿à°¨à°µà°¿"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1807,7 +1952,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"
@@ -1825,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"
@@ -1869,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 à°—à±à°‚à°ªà±à°²à±‹ చేరారà±"
@@ -1878,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 వైదొలిగారà±"
@@ -1899,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
@@ -1936,21 +2088,21 @@ msgstr ""
"మీ వాడà±à°•à°°à°¿à°ªà±‡à°°à± మరియౠసంకేతపదాలతో à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿. మీకౠఇంకా వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా? కొతà±à°¤ ఖాతాని [నమోదà±à°šà±‡à°¸à±à°•à±‹à°‚à°¡à°¿]"
"(%%action.register%%)."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à± మాతà±à°°à°®à±‡ మరొక వాడà±à°•à°°à°¿à°¨à°¿ నిరà±à°µà°¾à°¹à°•à±à°¨à°¿à°—à°¾ చేయగలరà±."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s ఇపà±à°ªà°Ÿà°¿à°•à±‡ \"%2$s\" à°—à±à°‚పౠయొకà±à°• à°’à°• నిరà±à°µà°¾à°•à±à°²à±."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "%s ఇపà±à°ªà°Ÿà°¿à°•à±‡ \"%s\" à°—à±à°‚పౠయొకà±à°• à°’à°• నిరà±à°µà°¾à°•à±à°²à±."
@@ -1960,24 +2112,22 @@ msgid "No current status"
msgstr "à°ªà±à°°à°¸à±à°¤à±à°¤ à°¸à±à°¥à°¿à°¤à°¿ à°à°®à±€ లేదà±"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+msgid "New Application"
+msgstr "కొతà±à°¤ ఉపకరణం"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చడానికి మీరౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చాలి."
+msgstr "ఉపకరణాలని నమోదà±à°šà±‡à°¸à±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ మీరౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "కొతà±à°¤ à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚డానికి à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించండి."
+msgstr "కొతà±à°¤ ఉపకరణానà±à°¨à°¿ నమోదà±à°šà±‡à°¸à±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించండి."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
@@ -2065,6 +2215,8 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"మీరౠ[à°’à°• ఖాతా నమోదౠచేసà±à°•à±à°¨à°¿](%%%%action.register%%%%) [à°ˆ విషయంపై à°µà±à°°à°¾à°¸à±‡](%%%%action."
+"newnotice%%%%?status_textarea=%s) మొదటివారౠఎందà±à°•à±à°•à°¾à°•à±‚à°¡à°¦à±!"
#: actions/noticesearchrss.php:96
#, fuzzy, php-format
@@ -2090,47 +2242,44 @@ msgid "Nudge sent!"
msgstr ""
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ మారà±à°šà°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
+msgstr "మీ ఉపకరణాలనౠచూడడానికి మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
#: actions/oauthappssettings.php:74
-#, fuzzy
msgid "OAuth applications"
-msgstr "ఇతర ఎంపికలà±"
+msgstr "OAuth ఉపకరణాలà±"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "మీరౠనమోదౠచేసివà±à°¨à±à°¨ ఉపకరణాలà±"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "సంధానిత ఉపకరణాలà±"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
-#, fuzzy
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
-msgstr "మీరౠఆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
+msgstr "మీరౠఆ ఉపకరణం యొకà±à°• వాడà±à°•à°°à°¿ కాదà±."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2151,8 +2300,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాతà±à°°à°®à±‡ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2221,6 +2370,11 @@ msgstr "సందేశపౠవిషయం సరైనది కాదà±"
msgid "Login token expired."
msgstr "సైటౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±"
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2291,7 +2445,8 @@ msgstr "కొతà±à°¤ సంకేతపదానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à
msgid "Password saved."
msgstr "సంకేతపదం à°­à°¦à±à°°à°®à°¯à±à°¯à°¿à°‚ది."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2299,137 +2454,152 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "హోమౠపేజీ URL సరైనది కాదà±."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "సైటà±"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "సేవకి"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "కొతà±à°¤ సందేశం"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "అలంకారం"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "అలంకారాల సేవకి"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "అలంకార సంచయం"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "అవతారాలà±"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "అవతారాల సేవకి"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "అవతారానà±à°¨à°¿ తాజాకరించాం."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "అవతారాల సంచయం"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "నేపథà±à°¯à°¾à°²à±"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "నేపథà±à°¯à°¾à°² సేవకి"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
#, fuzzy
msgid "Background path"
msgstr "నేపథà±à°¯à°‚"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "నేపథà±à°¯à°¾à°² సంచయం"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "వైదొలగà±"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "కొనà±à°¨à°¿à°¸à°¾à°°à±à°²à±"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "à°Žà°²à±à°²à°ªà±à°ªà±à°¡à±‚"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "వైదొలగà±"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "కొతà±à°¤ సందేశం"
@@ -2457,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 ""
@@ -2486,13 +2656,13 @@ 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 "పూరà±à°¤à°¿ పేరà±"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "హోమౠపేజీ"
@@ -2514,8 +2684,8 @@ msgid "Bio"
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "à°ªà±à°°à°¾à°‚తం"
@@ -2539,7 +2709,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "భాష"
@@ -2565,7 +2735,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚ చాలా పెదà±à°¦à°—à°¾ ఉంది (%d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "కాలమండలానà±à°¨à°¿ à°Žà°‚à°šà±à°•à±‹à°²à±‡à°¦à±."
@@ -2578,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 "అమరికలౠభదà±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
@@ -2608,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2658,13 +2829,15 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: 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 ""
+"ఇది %%site.name%%, à°¸à±à°µà±‡à°šà±à°›à°¾ మృదూపకరమైన [à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà±](http://status.net/) అనే పనిమà±à°Ÿà±à°Ÿà±à°ªà±ˆ "
+"ఆధారపడిన à°’à°• [మైకà±à°°à±‹-à°¬à±à°²à°¾à°—à°¿à°‚à°—à±](http://en.wikipedia.org/wiki/Micro-blogging) సేవ."
#: actions/publictagcloud.php:57
#, fuzzy
@@ -2690,9 +2863,9 @@ msgstr ""
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post "
"one!"
-msgstr ""
+msgstr "[à°’à°• ఖాతాని నమోదà±à°šà±‡à°¸à±à°•à±à°¨à°¿](%%action.register%%) మీరే మొదట à°µà±à°°à°¾à°¸à±‡à°µà°¾à°°à± à°Žà°‚à°¦à±à°•à± కాకూడదà±!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "à°Ÿà±à°¯à°¾à°—ౠమేఘం"
@@ -2829,8 +3002,7 @@ msgstr "à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, తపà±à°ªà± ఆహà±à°µà°¾à°¨ à°¸à°
msgid "Registration successful"
msgstr "నమోదౠవిజయవంతం"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "నమోదà±"
@@ -2869,7 +3041,7 @@ msgid "Same as password above. Required."
msgstr "పై సంకేతపదం మరోసారి. తపà±à°ªà°¨à°¿à°¸à°°à°¿."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "ఈమెయిలà±"
@@ -2913,6 +3085,18 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
+"%1$s, అభినందనలà±! %%%%site.name%%%%à°•à°¿ à°¸à±à°µà°¾à°—తం. ఇకà±à°•à°¡ à°¨à±à°‚à°¡à°¿, మీరà±...\n"
+"\n"
+"* [మీ à°ªà±à°°à±Šà°«à±ˆà°²à±](%2$s)à°•à°¿ వెళà±à°³à°¿ మీ మొదటి సందేశానà±à°¨à°¿ à°µà±à°°à°¾à°¯à°‚à°¡à°¿.\n"
+"* [జాబరà±/జీటాకౠచిరà±à°¨à°¾à°®à°¾à°¨à°¿](%%%%action.imsettings%%%%) చేరà±à°šà±à°•à±‹à°‚à°¡à°¿ à°…à°ªà±à°ªà±à°¡à± తకà±à°·à°£ సందేశాల à°¦à±à°µà°¾à°°à°¾ "
+"మీరౠనోటీసà±à°²à°¨à°¿ పంపగలà±à°—à±à°¤à°¾à°°à±.\n"
+"* మీకౠతెలిసిన లేదా మీ ఆసకà±à°¤à±à°²à°¨à± పంచà±à°•à±à°¨à±‡ [à°µà±à°¯à°•à±à°¤à±à°² కోసం వెతకండి](%%%%action.peoplesearch%%"
+"%%).\n"
+"* మీ à°—à±à°°à°¿à°‚à°šà°¿ ఇతరà±à°²à°•à± మరింత చెపà±à°ªà°¡à°¾à°¨à°¿à°•à°¿ మీ [à°ªà±à°°à±Šà°«à±ˆà°²à± అమరికలని](%%%%action.profilesettings%%%"
+"%) తాజాకరించà±à°•à±‹à°‚à°¡à°¿. \n"
+"* సౌలభà±à°¯à°¾à°²à°¨à± తెలà±à°¸à±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ [ఆనà±&zwnj;లైనౠపతà±à°°à°¾à°µà°³à°¿](%%%%doc.help%%%%)ని చూడండి. \n"
+"\n"
+"నమోదà±à°šà±‡à°¸à±à°•à±à°¨à±à°¨à°‚à°¦à±à°•à± కృతజà±à°žà°¤à°²à± మరియౠఈ సేవని ఉపయోగిసà±à°¤à±‚ మీరౠఆనందిసà±à°¤à°¾à°°à°¨à°¿ మేం ఆశిసà±à°¤à±à°¨à±à°¨à°¾à°‚."
#: actions/register.php:562
msgid ""
@@ -2954,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 "చందాచేరà±"
@@ -2993,7 +3177,7 @@ msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోà
msgid "You already repeated that notice."
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించారà±."
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
@@ -3003,42 +3187,49 @@ 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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+
+#: 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 ""
+"మీరౠఇతర వాడà±à°•à°°à±à°²à°¤à±‹ సంభాషించవచà±à°šà±, మరింత మంది à°µà±à°¯à°•à±à°¤à±à°²à°•à± చందాచేరవచà±à°šà± లేదా [à°—à±à°‚à°ªà±à°²à°²à±‹ చేరవచà±à°šà±]"
+"(%%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 "
@@ -3050,6 +3241,20 @@ 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 "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà±"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3060,115 +3265,157 @@ msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡
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 ""
+
+#: actions/sessionsadminpanel.php:65
+#, fuzzy
+msgid "Session settings for this StatusNet site."
+msgstr "à°ˆ à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటౠసైటà±à°•à°¿ రూపà±à°°à±‡à°–à°² అమరికలà±."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "à°ªà±à°°à°¤à±€à°•à°‚"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "పేరà±"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "సంసà±à°§"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "వివరణ"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "గణాంకాలà±"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "ఉపకరణ à°šà°°à±à°¯à°²à±"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "ఉపకరణ సమాచారం"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
#, fuzzy
msgid "Authorize URL"
msgstr "రచయిత"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "మీరౠనిజంగానే à°ˆ నోటీసà±à°¨à°¿ తొలగించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%1$sà°•à°¿ ఇషà±à°Ÿà°®à±ˆà°¨ నోటీసà±à°²à±, పేజీ %2$d"
+
#: actions/showfavorites.php:132
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 "
@@ -3176,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 "మీకౠనచà±à°šà°¿à°¨à°µà°¿ పంచà±à°•à±‹à°¡à°¾à°¨à°¿à°•à°¿ ఇదొక మారà±à°—à°‚."
@@ -3185,67 +3432,72 @@ msgstr "మీకౠనచà±à°šà°¿à°¨à°µà°¿ పంచà±à°•à±‹à°¡à°¾à°¨à°¿à°•à
msgid "%s group"
msgstr "%s à°—à±à°‚à°ªà±"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "à°—à±à°‚పౠపà±à°°à±Šà°«à±ˆà°²à±"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3255,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."
@@ -3264,7 +3516,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
@@ -3295,6 +3547,11 @@ msgstr "నోటీసà±à°¨à°¿ తొలగించాం."
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s మరియౠమితà±à°°à±à°²à±, పేజీ %2$d"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3320,25 +3577,26 @@ msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "ఇది %s మరియౠమితà±à°°à±à°² కాలరేఖ కానీ ఇంకా ఎవరూ à°à°®à±€ రాయలేదà±."
-#: actions/showstream.php:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3347,7 +3605,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3355,10 +3613,10 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
-#, fuzzy, php-format
+#: actions/showstream.php:305
+#, php-format
msgid "Repeat of %s"
-msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+msgstr "%s యొకà±à°• à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°‚"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3370,201 +3628,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 "à°ˆ à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటౠసైటà±à°•à°¿ à°ªà±à°°à°¾à°§à°®à°¿à°• అమరికలà±."
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "సైటౠపేరౠతపà±à°ªà°¨à°¿à°¸à°°à°¿à°—à°¾ à°¸à±à°¨à±à°¨à°¾ కంటే à°Žà°•à±à°•à±à°µ పొడవà±à°‚డాలి."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "మీకౠసరైన సంపà±à°°à°¦à°¿à°‚పౠఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ ఉండాలి."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "à°—à±à°°à±à°¤à± తెలియని భాష \"%s\"."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "కనిషà±à°  పాఠà±à°¯ పరిమితి 140 à°…à°•à±à°·à°°à°¾à°²à±."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "సాధారణ"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "సైటౠపేరà±"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "మీ సైటౠయొకà±à°• పేరà±, ఇలా \"మీకంపెనీ మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±\""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à±ˆ నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°²à± à°à°®à±€ లేవà±."
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "à°¸à±à°¥à°¾à°¨à°¿à°•"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯ కాలమండలం"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "à°…à°ªà±à°°à°®à±‡à°¯ సైటౠభాష"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "వైదొలగà±"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "పరిమితà±à°²à±"
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr "పాఠà±à°¯à°ªà± పరిమితి"
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr "సందేశాలలోని à°…à°•à±à°·à°°à°¾à°² à°—à°°à°¿à°·à±à°  సంఖà±à°¯."
+
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:318
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Access"
-msgstr "అంగీకరించà±"
+msgid "Site Notice"
+msgstr "సైటౠగమనిక"
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "అంతరంగికం"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr "à°…à°œà±à°žà°¾à°¤ (à°ªà±à°°à°µà±‡à°¶à°¿à°‚చని) వాడà±à°•à°°à±à°²à°¨à°¿ సైటà±à°¨à°¿ చూడకà±à°‚à°¡à°¾ నిషేధించాలా?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à°•à± మాతà±à°°à°®à±‡"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "ఆహà±à°µà°¾à°¨à°¿à°¤à±à°²à± మాతà±à°°à°®à±‡ నమోదౠఅవà±à°µà°—లిగేలా చెయà±à°¯à°¿."
-
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:67
#, fuzzy
-msgid "Closed"
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "కొతà±à°¤ నమోదà±à°²à°¨à± అచేతనంచేయి."
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "తరచà±à°¦à°¨à°‚"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
+msgid "Edit site-wide message"
+msgstr "కొతà±à°¤ సందేశం"
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr "పరిమితà±à°²à±"
-
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr "పాఠà±à°¯à°ªà± పరిమితి"
-
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
-msgstr "సందేశాలలోని à°…à°•à±à°·à°°à°¾à°² à°—à°°à°¿à°·à±à°  సంఖà±à°¯."
-
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "సైటౠగమనిక"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "సైటౠగమనిక"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3624,7 +3818,7 @@ msgstr "ఇది ఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ ఫోనౠనెంబరà±
#: actions/smssettings.php:321
msgid "That phone number already belongs to another user."
-msgstr ""
+msgstr "à°† ఫోనౠనంబరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ వేరే వాడà±à°•à°°à°¿à°•à°¿ చెందినది."
#: actions/smssettings.php:347
#, fuzzy
@@ -3660,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:69
+#: 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:145
#, fuzzy
msgid "Subscribed"
msgstr "చందాదారà±à°²à±"
@@ -3684,29 +3948,30 @@ msgid "%s subscribers"
msgstr "%s చందాదారà±à°²à±"
#: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscribers, page %2$d"
-msgstr "%s చందాదారà±à°²à±, పేజీ %d"
+msgstr "%1$s చందాదారà±à°²à±, పేజీ %2$d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
-msgstr ""
+msgstr "వీళà±à°³à± మీ నోటీసà±à°²à°¨à°¿ వినే à°ªà±à°°à°œà°²à±."
#: actions/subscribers.php:67
#, php-format
msgid "These are the people who listen to %s's notices."
-msgstr ""
+msgstr "వీళà±à°³à± %s యొకà±à°• నోటీసà±à°²à°¨à°¿ వినే à°ªà±à°°à°œà°²à±."
#: actions/subscribers.php:108
msgid ""
"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 ""
+msgstr "%sà°•à°¿ చందాదారà±à°²à± ఎవరూ లేరà±. మీరే మొదటివారౠకావాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾?"
#: actions/subscribers.php:114
#, php-format
@@ -3721,9 +3986,9 @@ msgid "%s subscriptions"
msgstr "%s చందాలà±"
#: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
msgid "%1$s subscriptions, page %2$d"
-msgstr "%s చందాలà±, పేజీ %d"
+msgstr "%1$s చందాలà±, పేజీ %2$d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
@@ -3734,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 "
@@ -3744,30 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
+
+#: 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 యొకà±à°• సందేశమà±à°² ఫీడà±"
@@ -3786,7 +4056,8 @@ msgstr ""
msgid "User profile"
msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "ఫొటో"
@@ -3817,7 +4088,7 @@ msgstr ""
msgid "No such tag."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°Ÿà±à°¯à°¾à°—ౠలేదà±."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3844,18 +4115,20 @@ msgstr ""
msgid "Unsubscribed"
msgstr "చందాదారà±à°²à±"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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;నెటౠసైటà±à°•à°¿ వాడà±à°•à°°à°¿ అమరికలà±."
@@ -3898,9 +4171,8 @@ msgid "Welcome text for new users (Max 255 chars)."
msgstr "కొతà±à°¤ వాడà±à°•à°°à±à°²à°•à±ˆ à°¸à±à°µà°¾à°—à°¤ సందేశం (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚)."
#: actions/useradminpanel.php:241
-#, fuzzy
msgid "Default subscription"
-msgstr "à°…à°¨à±à°¨à°¿ చందాలà±"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯ చందా"
#: actions/useradminpanel.php:242
#, fuzzy
@@ -3912,37 +4184,16 @@ msgid "Invitations"
msgstr "ఆహà±à°µà°¾à°¨à°¾à°²à±"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "ఆహà±à°µà°¾à°¨à°®à±(à°²)ని పంపించాం"
+msgstr "ఆహà±à°µà°¾à°¨à°¾à°²à°¨à°¿ చేతనంచేసాం"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
msgstr "వాడà±à°•à°°à±à°²à°¨à± కొతà±à°¤ వారిని ఆహà±à°µà°¾à°¨à°¿à°‚చడానికి à°…à°¨à±à°®à°¤à°¿à°‚చాలా వదà±à°¦à°¾."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
-msgstr ""
+msgstr "చందాని అధీకరించండి"
#: actions/userauthorization.php:110
msgid ""
@@ -3951,84 +4202,84 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "లైసెనà±à°¸à±"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "అంగీకరించà±"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ చందాచేరà±"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "తిరసà±à°•à°°à°¿à°‚à°šà±"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "à°ˆ చందాని తిరసà±à°•à°°à°¿à°‚à°šà±"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr ""
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "చందాని తిరసà±à°•à°°à°¿à°‚చారà±."
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "'%s' అనే అవతారపౠURL తపà±à°ªà±"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "'%s' కొరకౠతపà±à°ªà±à°¡à± బొమà±à°® à°°à°•à°‚"
@@ -4047,20 +4298,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4073,10 +4335,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà±"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4108,7 +4366,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "సంచిక"
@@ -4138,14 +4396,18 @@ msgid "Group join failed."
msgstr "à°—à±à°‚à°ªà±à°²à±‹ చేరడం విఫలమైంది."
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
+msgstr "à°—à±à°‚à°ªà±à°²à±‹ భాగం కాదà±."
#: classes/Group_member.php:60
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"
@@ -4163,62 +4425,102 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "à°ˆ సైటà±à°²à±‹ నోటీసà±à°²à± రాయడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr ""
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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
@@ -4259,128 +4561,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "à°®à±à°‚గిలి"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+#, fuzzy
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
+
+#: lib/action.php:443
msgid "Connect"
msgstr "à°…à°¨à±à°¸à°‚ధానించà±"
-#: lib/action.php:438
-msgid "Connect to services"
-msgstr ""
-
-#: lib/action.php:442
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "చందాలà±"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "సైటౠనà±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "సహాయం"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "సహాయం కావాలి!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "వెతà±à°•à±"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "సహాయం"
-#: lib/action.php:466
+#. 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:487
+#: 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 "కొతà±à°¤ సందేశం"
+msgstr "సైటౠగమనిక"
-#: lib/action.php:553
+#: lib/action.php:579
msgid "Local views"
msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• వీకà±à°·à°£à°²à±"
-#: lib/action.php:619
-#, fuzzy
+#: lib/action.php:645
msgid "Page notice"
-msgstr "కొతà±à°¤ సందేశం"
+msgstr "పేజీ గమనిక"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "చందాలà±"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "సహాయం"
+
+#: lib/action.php:754
msgid "About"
msgstr "à°—à±à°°à°¿à°‚à°šà°¿"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "à°ªà±à°°à°¶à±à°¨à°²à±"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "సేవా నియమాలà±"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "అంతరంగికత"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "మూలమà±"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "సంపà±à°°à°¦à°¿à°‚à°šà±"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "బాడà±à°œà°¿"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà± మృదూపకరణ లైసెనà±à°¸à±"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4389,12 +4750,12 @@ msgstr ""
"**%%site.name%%** అనేది [%%site.broughtby%%](%%site.broughtbyurl%%) వారౠ"
"అందిసà±à°¤à±à°¨à±à°¨ మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚. "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** అనేది మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚."
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4405,137 +4766,215 @@ msgstr ""
"html) à°•à°¿à°‚à°¦ లభà±à°¯à°®à°¯à±à°¯à±‡ [à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటà±](http://status.net/) మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠఉపకరణం సంచిక %s "
"పై నడà±à°¸à±à°¤à±à°‚ది."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "కొతà±à°¤ సందేశం"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "à°…à°¨à±à°¨à±€ "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "పేజీకరణ"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "తరà±à°µà°¾à°¤"
-#: lib/action.php:1141
+#: 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 "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం"
+
+#. 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 "వాడà±à°•à°°à°¿ à°¸à±à°µà°°à±‚పణం"
+
+#. 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:322 lib/adminpanelaction.php:327
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS నిరà±à°§à°¾à°°à°£"
-#: lib/applicationeditform.php:186
-msgid "Icon for this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం"
+
+#. 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/applicationeditform.php:206
-#, fuzzy, php-format
+#: 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 "ఉపకరణానà±à°¨à°¿ మారà±à°šà±"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr "à°ˆ ఉపకరణానికి à°ªà±à°°à°¤à±€à°•à°‚"
+
+#: lib/applicationeditform.php:204
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "మీ à°—à±à°°à°¿à°‚à°šà°¿ మరియౠమీ ఆసకà±à°¤à±à°² à°—à±à°°à°¿à°‚à°šà°¿ 140 à°…à°•à±à°·à°°à°¾à°²à±à°²à±‹ చెపà±à°ªà°‚à°¡à°¿"
+msgstr "మీ ఉపకరణం à°—à±à°°à°¿à°‚à°šà°¿ %d à°…à°•à±à°·à°°à°¾à°²à±à°²à±‹ వివరించండి"
-#: lib/applicationeditform.php:209
-#, fuzzy
+#: lib/applicationeditform.php:207
msgid "Describe your application"
-msgstr "మీ à°—à±à°°à°¿à°‚à°šà°¿ మరియౠమీ ఆసకà±à°¤à±à°² à°—à±à°°à°¿à°‚à°šà°¿ 140 à°…à°•à±à°·à°°à°¾à°²à±à°²à±‹ చెపà±à°ªà°‚à°¡à°¿"
+msgstr "మీ ఉపకరణానà±à°¨à°¿ వివరించండి"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "మూలమà±"
-#: lib/applicationeditform.php:220
-#, fuzzy
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr "మీ హోమౠపేజీ, à°¬à±à°²à°¾à°—à±, లేదా వేరే సేటà±à°²à±‹à°¨à°¿ మీ à°ªà±à°°à±Šà°«à±ˆà°²à± యొకà±à°• à°šà°¿à°°à±à°¨à°¾à°®à°¾"
+msgstr "à°ˆ ఉపకరణం యొకà±à°• హోమà±&zwnj;పేజీ à°šà°¿à°°à±à°¨à°¾à°®à°¾"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "à°ˆ ఉపకరణానికి బాధà±à°¯à°¤à°¾à°¯à±à°¤à°®à±ˆà°¨ సంసà±à°¥"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "మీ హోమౠపేజీ, à°¬à±à°²à°¾à°—à±, లేదా వేరే సేటà±à°²à±‹à°¨à°¿ మీ à°ªà±à°°à±Šà°«à±ˆà°²à± యొకà±à°• à°šà°¿à°°à±à°¨à°¾à°®à°¾"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "విహారిణి"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "చదవడం-మాతà±à°°à°®à±‡"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "చదవడం-à°µà±à°°à°¾à°¯à°¡à°‚"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4565,12 +5004,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "సంకేతపదం మారà±à°ªà±"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "సంకేతపదం మారà±à°ªà±"
@@ -4690,14 +5129,12 @@ msgid "Error sending direct message."
msgstr ""
#: lib/command.php:413
-#, fuzzy
msgid "Cannot repeat your own notice"
-msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోతే మీరౠనమోదà±à°šà±‡à°¸à±à°•à±‹à°²à±‡à°°à±."
+msgstr "మీ నోటిసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±"
#: lib/command.php:418
-#, fuzzy
msgid "Already repeated that notice"
-msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±"
+msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±"
#: lib/command.php:426
#, fuzzy, php-format
@@ -4728,80 +5165,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"
@@ -4815,6 +5261,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"
@@ -4842,20 +5289,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం లేదà±."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4872,9 +5319,8 @@ msgid "Updates by SMS"
msgstr ""
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "à°…à°¨à±à°¸à°‚ధానించà±"
+msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
@@ -4954,6 +5400,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"
@@ -5046,33 +5497,33 @@ 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 "కిబై"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "à°—à±à°°à±à°¤à± తెలియని భాష \"%s\""
@@ -5118,7 +5569,7 @@ msgstr ""
#: lib/mail.php:236
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
-msgstr ""
+msgstr "%1$s ఇపà±à°ªà±à°¡à± %2$sలో మీ నోటీసà±à°²à°¨à°¿ వింటà±à°¨à±à°¨à°¾à°°à±."
#: lib/mail.php:241
#, php-format
@@ -5134,13 +5585,21 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
+"%1$s ఇపà±à°ªà±à°¡à± %2$sలో మీ నోటీసà±à°²à°¨à°¿ వింటà±à°¨à±à°¨à°¾à°°à±.\n"
+"\n"
+"%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"మీ విధేయà±à°²à±,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"మీ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¨à°¿ లేదా గమనింపà±à°² ఎంపికలనౠ%8$s వదà±à°¦ మారà±à°šà±à°•à±‹à°‚à°¡à°¿\n"
#: lib/mail.php:258
-#, fuzzy, php-format
+#, php-format
msgid "Bio: %s"
-msgstr ""
-"à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚: %s\n"
-"\n"
+msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚: %s"
#: lib/mail.php:286
#, php-format
@@ -5243,7 +5702,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
@@ -5259,6 +5718,16 @@ msgid ""
"\t%4$s\n"
"\n"
msgstr ""
+"%1$s (@%9$s) %2$sలో మీకౠ('@-à°¸à±à°ªà°‚దన') à°’à°• నోటీసà±à°¨à°¿ పంపించారౠ.\n"
+"\n"
+"à°† నోటీసౠఇకà±à°•à°¡:\n"
+"\n"
+"%3$s\n"
+"\n"
+"ఇదీ పాఠà±à°¯à°‚:\n"
+"\n"
+"%4$s\n"
+"\n"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
@@ -5270,7 +5739,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 "à°¨à±à°‚à°¡à°¿"
@@ -5360,6 +5829,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"
@@ -5394,49 +5869,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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "సందరà±à°­à°‚లో"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "నోటీసà±à°¨à°¿ తొలగించాం."
@@ -5471,11 +5946,7 @@ msgstr "దూరపౠపà±à°°à±Šà°ªà±ˆà°²à±à°¨à°¿ చేరà±à°šà°Ÿà°‚à°²à
msgid "Duplicate notice"
msgstr "కొతà±à°¤ సందేశం"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "చందాచేరడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr ""
@@ -5491,19 +5962,19 @@ msgstr "à°¸à±à°ªà°‚దనలà±"
msgid "Favorites"
msgstr "ఇషà±à°Ÿà°¾à°‚శాలà±"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "వచà±à°šà°¿à°¨à°µà°¿"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "మీకౠవచà±à°šà°¿à°¨ సందేశాలà±"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "పంపినవి"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "మీరౠపంపిన సందేశాలà±"
@@ -5516,7 +5987,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 "చందాలà±"
@@ -5524,23 +5995,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 "à°…à°¨à±à°¨à°¿ à°—à±à°‚à°ªà±à°²à±"
@@ -5574,14 +6045,21 @@ 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/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 ""
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5600,6 +6078,10 @@ msgstr "సైటà±à°¨à°¿ వెతà±à°•à±"
msgid "Keyword(s)"
msgstr "కీపదమà±(à°²à±)"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "వెతà±à°•à±"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "సహాయంలో వెతà±à°•à±"
@@ -5641,48 +6123,27 @@ msgstr "à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
#: lib/subgroupnav.php:83
#, php-format
msgid "People %s subscribes to"
-msgstr ""
+msgstr "%s చందాచేరిన à°µà±à°¯à°•à±à°¤à±à°²à±"
#: lib/subgroupnav.php:91
-#, fuzzy, php-format
+#, php-format
msgid "People subscribed to %s"
-msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+msgstr "%sà°•à°¿ చందాచేరిన à°µà±à°¯à°•à±à°¤à±à°²à±"
#: lib/subgroupnav.php:99
#, php-format
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"
@@ -5735,68 +6196,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 ""
+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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "à°“ నిమిషం à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "à°’à°• à°—à°‚à°Ÿ à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d à°—à°‚à°Ÿà°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "à°“ రోజౠకà±à°°à°¿à°¤à°‚"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d రోజà±à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "à°“ నెల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "à°’à°• సంవతà±à°¸à°°à°‚ à°•à±à°°à°¿à°¤à°‚"
@@ -5810,7 +6287,7 @@ msgstr "%s అనేది సరైన రంగౠకాదà±!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s అనేది సరైన రంగౠకాదà±! 3 లేదా 6 హెకà±à°¸à± à°…à°•à±à°·à°°à°¾à°²à°¨à± వాడండి."
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %1$d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%2$d పంపించారà±."
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index bcec74af8..80dba9abf 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Turkish
#
+# Author@translatewiki.net: Joseph
# Author@translatewiki.net: McDutchie
# --
# This file is distributed under the same license as the StatusNet package.
@@ -8,24 +9,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:37+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:42+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "Kabul et"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Ayarlar"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Kayıt"
+
+#. 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"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Böyle bir kullanıcı yok."
+
+#. 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/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
@@ -34,84 +100,93 @@ msgstr "Böyle bir durum mesajı yok."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -121,22 +196,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -152,7 +227,7 @@ msgstr "Onay kodu bulunamadı."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -171,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."
@@ -183,7 +259,7 @@ msgstr "Profil kaydedilemedi."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -197,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."
@@ -305,17 +381,17 @@ msgstr "Kullanıcı güncellenemedi."
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Kullanıcı güncellenemedi."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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."
@@ -323,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -390,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"
@@ -409,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"
@@ -429,98 +505,112 @@ msgstr ""
msgid "groups on %s"
msgstr ""
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Geçersiz kullanıcı adı veya parola."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Kullanıcı ayarlamada hata oluştu."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Cevap eklenirken veritabanı hatası: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "BeklenmeÄŸen form girdisi."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "Hakkında"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Takma ad"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Parola"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -556,18 +646,18 @@ msgstr "Avatar güncellendi."
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr ""
"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr ""
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -582,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"
@@ -619,27 +697,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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"
@@ -657,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"
@@ -670,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"
@@ -687,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -719,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 ""
@@ -753,23 +825,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 ""
-#: actions/block.php:144 actions/groupmembers.php:346 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."
@@ -778,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."
@@ -871,16 +948,61 @@ 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ı"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Kullanıcı güncellenemedi."
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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:1217
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Böyle bir durum mesajı yok."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Böyle bir durum mesajı yok."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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ı."
@@ -908,7 +1030,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Böyle bir durum mesajı yok."
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -926,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 ""
@@ -1051,12 +1173,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1072,34 +1195,26 @@ msgstr ""
msgid "Add to favorites"
msgstr ""
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Böyle bir belge yok."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Bize o profili yollamadınız"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Böyle bir durum mesajı yok."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1108,47 +1223,52 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Tam isim çok uzun (azm: 255 karakter)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "Takma ad kullanımda. Başka bir tane deneyin."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Abonelikler"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Yer bilgisi çok uzun (azm: 255 karakter)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Kullanıcı güncellenemedi."
@@ -1162,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."
@@ -1223,8 +1343,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Ä°ptal et"
@@ -1305,7 +1425,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geçersiz bir eposta adresi."
@@ -1317,7 +1437,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Onay kodu eklenemedi."
@@ -1376,7 +1496,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1498,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
@@ -1529,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Böyle bir kullanıcı yok."
@@ -1565,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 ""
@@ -1824,6 +1969,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Bu sizin Jabber ID'niz deÄŸil."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1900,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"
@@ -1944,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 ""
@@ -1953,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ı "
@@ -1976,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "GiriÅŸ"
@@ -2016,21 +2173,21 @@ msgstr ""
"duruyorsunuz, hemen bir [yeni hesap oluÅŸturun](%%action.register%%) ya da "
"[OpenID](%%action.openidlogin%%) ile giriş yapın."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "Kullanıcının profili yok."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "OpenID formu yaratılamadı: %s"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Kullanıcının profili yok."
@@ -2040,8 +2197,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Böyle bir durum mesajı yok."
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2051,11 +2209,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Avatar bilgisi kaydedilemedi"
@@ -2184,29 +2342,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Bize o profili yollamadınız"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2228,8 +2386,8 @@ msgstr "BaÄŸlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2300,6 +2458,11 @@ msgstr "Geçersiz durum mesajı"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2372,7 +2535,8 @@ msgstr "Yeni parola kaydedilemedi."
msgid "Password saved."
msgstr "Parola kaydedildi."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2380,140 +2544,155 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Sunucu"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Yeni durum mesajı"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Avatar"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Ayarlar"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Avatar güncellendi."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Avatar güncellendi."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Geri al"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Durum mesajları"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Geri al"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Yeni durum mesajı"
@@ -2542,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 ""
@@ -2574,13 +2753,13 @@ 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"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Başlangıç Sayfası"
@@ -2604,8 +2783,8 @@ msgid "Bio"
msgstr "Hakkında"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Yer"
@@ -2629,7 +2808,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2655,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2668,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."
@@ -2699,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Genel Durum Akış RSS Beslemesi"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2749,7 +2929,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2783,7 +2963,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2922,8 +3102,7 @@ msgstr "Onay kodu hatası."
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Kayıt"
@@ -2962,7 +3141,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Eposta"
@@ -3051,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"
@@ -3091,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Yarat"
@@ -3101,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "%s için cevaplar"
+
+#: 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 "
@@ -3148,6 +3332,21 @@ 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"
+msgstr "Avatar güncellendi."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3158,117 +3357,158 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Ayarlar"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Takma ad"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "Yer"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "Abonelikler"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Ä°statistikler"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s ve arkadaşları"
+
#: actions/showfavorites.php:132
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 "
@@ -3276,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 ""
@@ -3285,71 +3525,76 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Bütün abonelikler"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Böyle bir durum mesajı yok."
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3359,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."
@@ -3368,7 +3613,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3400,6 +3645,11 @@ msgstr "Durum mesajları"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s ve arkadaşları"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3425,25 +3675,25 @@ msgstr "%s için durum RSS beslemesi"
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3452,7 +3702,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3460,7 +3710,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "%s için cevaplar"
@@ -3475,206 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Geçersiz bir eposta adresi."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Yer"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Geri al"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Kabul et"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Gizlilik"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "Böyle bir kullanıcı yok."
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
-
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Durum mesajını kaydederken hata oluştu."
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Ayarlar"
+msgid "Save site notice"
+msgstr "Yeni durum mesajı"
#: actions/smssettings.php:58
#, fuzzy
@@ -3771,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"
@@ -3847,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 "
@@ -3857,31 +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:86
+#: 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: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"
@@ -3901,7 +4157,8 @@ msgstr ""
msgid "User profile"
msgstr "Kullanıcının profili yok."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3934,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 ""
@@ -3963,18 +4220,19 @@ msgstr "Yetkilendirme isteÄŸi yok!"
msgid "Unsubscribed"
msgstr "Aboneliği sonlandır"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4039,26 +4297,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Takip isteÄŸini onayla"
@@ -4074,86 +4312,86 @@ msgstr ""
"detayları gözden geçirin. Kimsenin durumunu taki etme isteğinde "
"bulunmadıysanız \"İptal\" tuşuna basın. "
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Kabul et"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "Takip talebine izin verildi"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Reddet"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Bütün abonelikler"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Yetkilendirme isteÄŸi yok!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Takip talebine izin verildi"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abonelik reddedildi."
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Avatar URLi '%s' okunamıyor"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "%s için yanlış resim türü"
@@ -4173,20 +4411,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Bütün abonelikler"
+
#: actions/usergroups.php:130
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"
@@ -4199,11 +4448,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Avatar güncellendi."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4235,7 +4479,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "KiÅŸisel"
@@ -4276,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"
@@ -4293,65 +4542,107 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Cevap eklenirken veritabanı hatası: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 ""
@@ -4391,131 +4682,185 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Başlangıç"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: lib/action.php:433
+#, fuzzy
+msgctxt "MENU"
+msgid "Personal"
+msgstr "KiÅŸisel"
+
+#. 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:438
-msgid "Connect"
-msgstr "BaÄŸlan"
+msgstr "Parolayı değiştir"
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Çıkış"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "Geçersiz büyüklük."
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Yardım"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "GiriÅŸ"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Yardım"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Ara"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "Yardım"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Yeni durum mesajı"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Abonelikler"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Yardım"
+
+#: lib/action.php:754
msgid "About"
msgstr "Hakkında"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "SSS"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Gizlilik"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Kaynak"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Ä°letiÅŸim"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4524,12 +4869,12 @@ msgstr ""
"**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından "
"hazırlanan anında mesajlaşma ağıdır. "
-#: lib/action.php:778
+#: 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:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4540,142 +4885,224 @@ 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:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Yeni durum mesajı"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Sonra"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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ı"
+
+#. 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ı"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Eposta adresi onayı"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Eposta adresi onayı"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Kaynak"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr ""
"Web Sitenizin, blogunuzun ya da varsa baÅŸka bir sitedeki profilinizin adresi"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr ""
"Web Sitenizin, blogunuzun ya da varsa baÅŸka bir sitedeki profilinizin adresi"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4705,12 +5132,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Parola kaydedildi."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Parola kaydedildi."
@@ -4865,80 +5292,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"
@@ -4952,6 +5389,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"
@@ -4979,20 +5417,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Onay kodu yok."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5094,6 +5532,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"
@@ -5190,33 +5633,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5421,7 +5864,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 ""
@@ -5512,6 +5955,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"
@@ -5546,51 +5995,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "İçerik yok!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Yarat"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "cevapla"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Durum mesajları"
@@ -5624,11 +6073,7 @@ msgstr "Uzak profil eklemede hata oluÅŸtu"
msgid "Duplicate notice"
msgstr "Yeni durum mesajı"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Yeni abonelik eklenemedi."
@@ -5644,19 +6089,19 @@ msgstr "Cevaplar"
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5669,7 +6114,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"
@@ -5677,24 +6122,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 ""
@@ -5738,6 +6183,15 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Repeat this notice"
msgstr "Böyle bir durum mesajı yok."
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5756,6 +6210,10 @@ msgstr "Ara"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Ara"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5810,37 +6268,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"
@@ -5894,68 +6330,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
@@ -5969,7 +6420,7 @@ msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index 886b60cc3..145eb3854 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -10,24 +10,84 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:40+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:45+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "ПогодитиÑÑŒ"
+
+#. 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 "РеєÑтраціÑ"
+
+#. 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 "Приватно"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Зробити регіÑтрацію лише за запрошеннÑми."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Лише за запрошеннÑми"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "СкаÑувати подальшу регіÑтрацію."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Закрито"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Зберегти параметри доÑтупу"
+
+#: 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
@@ -36,57 +96,64 @@ msgstr "Ðемає такої Ñторінки"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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 "
@@ -95,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 "
@@ -104,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:202
+#: 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 "
@@ -113,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!"
@@ -128,22 +197,22 @@ msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API метод не знайдено."
@@ -158,7 +227,7 @@ msgstr "API метод не знайдено."
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Цей метод потребує POST."
@@ -177,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 "КориÑтувач не має профілю."
@@ -188,7 +258,7 @@ msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -204,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."
@@ -307,15 +377,15 @@ msgstr "Ви не можете відпиÑатиÑÑŒ від Ñамого Ñеб
msgid "Two user ids or screen_names must be supplied."
msgstr "Два ID або імені_у_мережі повинні підтримуватиÑÑŒ."
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
msgid "Could not determine source user."
msgstr "Ðе вдалоÑÑŒ вÑтановити джерело кориÑтувача."
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
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."
@@ -323,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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 "Додаткове Ñ–Ð¼â€™Ñ Ð½Ðµ може бути таким Ñамим що й оÑновне."
@@ -389,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."
@@ -406,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."
@@ -426,42 +496,46 @@ msgstr "%s групи"
msgid "groups on %s"
msgstr "групи на %s"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
-msgstr "Ðевірний запит."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Жодного параметру oauth_token не забезпечено."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Ðевірний токен."
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: 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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
"Виникли певні проблеми з токеном поточної ÑеÑÑ–Ñ—. Спробуйте знов, будь лаÑка."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
msgid "Invalid nickname / password!"
msgstr "ÐедійÑне Ñ–Ð¼â€™Ñ / пароль!"
-#: actions/apioauthauthorize.php:170
-msgid "DB error deleting OAuth app user."
-msgstr "Помилка бази даних при видаленні OAuth кориÑтувача."
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr "Помилка бази даних при видаленні кориÑтувача OAuth-додатку."
-#: actions/apioauthauthorize.php:196
-msgid "DB error inserting OAuth app user."
-msgstr "Помилка бази даних при додаванні OAuth кориÑтувача."
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr "Помилка бази даних при додаванні кориÑтувача OAuth-додатку."
-#: actions/apioauthauthorize.php:231
+#: actions/apioauthauthorize.php:214
#, php-format
msgid ""
"The request token %s has been authorized. Please exchange it for an access "
@@ -470,53 +544,66 @@ msgstr ""
"Токен запиту %s було авторизовано. Будь лаÑка, обмінÑйте його на токен "
"доÑтупу."
-#: actions/apioauthauthorize.php:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
-msgstr "Токен запиту %s було відхилено."
+msgid "The request token %s has been denied and revoked."
+msgstr "Токен запиту %s було ÑкаÑовано Ñ– відхилено."
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "ÐеÑподіване предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð¸."
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr "Запит на дозвіл під’єднатиÑÑ Ð´Ð¾ Вашого облікового запиÑу"
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr "Дозволити або заборонити доÑтуп"
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 ""
+"Додаток <strong>%1$s</strong> від <strong>%2$s</strong> запитує дозвіл на "
+"<strong>%3$s</strong> дані Вашого акаунту %4$s. Ви повинні надавати дозвіл "
+"на доÑтуп до Вашого акаунту %4$s лише тим Ñтороннім додаткам, Ñким Ви "
+"довірÑєте."
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Ðкаунт"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Пароль"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr "Відхилити"
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr "Дозволити"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr "Дозволити або заборонити доÑтуп до Вашого облікового запиÑу."
@@ -535,11 +622,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."
@@ -549,17 +636,17 @@ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾."
msgid "No status with that ID found."
msgstr "Ðе знайдено жодних ÑтатуÑів з таким ID."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 "Ðадто довго. МакÑимальний розмір допиÑу — %d знаків."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Ðе знайдено"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -575,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"
@@ -612,27 +687,22 @@ msgstr "%s загальна Ñтрічка"
msgid "%s updates from everyone!"
msgstr "%s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ уÑÑ–Ñ…!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ %s"
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
msgid "Repeated to %s"
-msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° %s"
+msgstr "Повторено Ð´Ð»Ñ %s"
-#: actions/apitimelineretweetsofme.php:112
+#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
-msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ %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!"
@@ -648,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 "Ðемає імені."
@@ -661,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 "Ðватара"
@@ -678,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "Ð’Ñ‚Ñти"
@@ -709,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 "Дані Вашого файлу деÑÑŒ загубилиÑÑŒ."
@@ -743,22 +812,23 @@ msgstr ""
"відпиÑано від ВаÑ, він не зможе підпиÑитаÑÑ‚ÑŒ до Ð’Ð°Ñ Ñƒ майбутньому Ñ– Ви "
"більше не отримуватимете жодних допиÑів від нього."
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Так"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
msgid "Block this user"
msgstr "Блокувати кориÑтувача"
@@ -766,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 "Розблокувати цього кориÑтувача"
@@ -854,16 +928,58 @@ 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
+msgid "You must be logged in to delete an application."
+msgstr "Ви маєте Ñпочатку увійти, аби мати змогу видалити додаток."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "Додаток не виÑвлено."
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "Ви не Ñ” влаÑником цього додатку."
+
+#: 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 "Видалити додаток"
+
+#: 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 "Ðе видалÑти додаток"
+
+#: actions/deleteapplication.php:160
+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 "Ðе увійшли."
@@ -890,7 +1006,7 @@ msgstr "Ви впевненні, що бажаєте видалити цей дÐ
msgid "Do not delete this notice"
msgstr "Ðе видалÑти цей допиÑ"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr "Видалити допиÑ"
@@ -906,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."
@@ -914,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 "Дизайн"
@@ -1024,12 +1140,13 @@ msgstr "ПовернутиÑÑŒ до початкових налаштувань"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "Зберегти"
@@ -1045,32 +1162,24 @@ msgstr "Цей Ð´Ð¾Ð¿Ð¸Ñ Ð½Ðµ Ñ” обраним!"
msgid "Add to favorites"
msgstr "Додати до обраних"
-#: actions/doc.php:69
-msgid "No such document."
-msgstr "Такого документа немає."
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "Ðемає такого документа «%s»"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
+#: actions/editapplication.php:54
+msgid "Edit Application"
msgstr "Керувати додатками"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr "Ви маєте Ñпочатку увійти, аби мати змогу керувати додатком."
-#: actions/editapplication.php:77 actions/showapplication.php:94
-msgid "You are not the owner of this application."
-msgstr "Ви не Ñ” влаÑником цього додатку."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
msgid "No such application."
msgstr "Такого додатку немає."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr "Виникли певні проблеми з токеном поточної ÑеÑÑ–Ñ—."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr "СкориÑтайтеÑÑŒ цією формою, щоб відредагувати додаток."
@@ -1079,43 +1188,47 @@ msgstr "СкориÑтайтеÑÑŒ цією формою, щоб відредаÐ
msgid "Name is required."
msgstr "Потрібне ім’Ñ."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
msgid "Name is too long (max 255 chars)."
msgstr "Ð†Ð¼â€™Ñ Ð·Ð°Ð´Ð¾Ð²Ð³Ðµ (255 знаків макÑимум)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Це Ñ–Ð¼â€™Ñ Ð²Ð¶Ðµ викориÑтовуєтьÑÑ. Спробуйте інше."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
msgstr "Потрібен опиÑ."
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr "URL-адреÑа надто довга."
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
msgid "Source URL is not valid."
msgstr "URL-адреÑа не Ñ” дійÑною."
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr "Потрібна організаціÑ."
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
msgid "Organization is too long (max 255 chars)."
msgstr "Ðазва організації надто довга (255 знаків макÑимум)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr "Потрібна Ð´Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка організації."
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr "Форма зворотнього дзвінка надто довга."
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr "URL-адреÑа Ð´Ð»Ñ Ð·Ð²Ð¾Ñ€Ð¾Ñ‚Ð½ÑŒÐ¾Ð³Ð¾ дзвінка не Ñ” дійÑною."
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
msgid "Could not update application."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ додаток."
@@ -1128,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 "Опції збережено."
@@ -1187,8 +1300,8 @@ msgstr ""
"Ñпамом також!), там має бути Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· подальшими інÑтрукціÑми."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "СкаÑувати"
@@ -1268,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "Ðе можна полагодити цю поштову адреÑу"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Це недійÑна електронна адреÑа."
@@ -1280,7 +1393,7 @@ msgstr "Це Ñ– Ñ” Вашою адреÑою."
msgid "That email address already belongs to another user."
msgstr "Ð¦Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð° адреÑа належить іншому кориÑтувачу."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ код підтвердженнÑ."
@@ -1342,7 +1455,7 @@ msgstr "Цей Ð´Ð¾Ð¿Ð¸Ñ Ð²Ð¶Ðµ Ñ” обраним!"
msgid "Disfavor favorite"
msgstr "Видалити з обраних"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
msgstr "ПопулÑрні допиÑи"
@@ -1459,6 +1572,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
@@ -1488,7 +1617,7 @@ msgstr "КориÑтувача заблоковано в цій групі."
msgid "User is not a member of group."
msgstr "КориÑтувач не Ñ” учаÑником групи."
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
msgstr "Блокувати кориÑтувача в групі"
@@ -1523,11 +1652,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."
@@ -1535,20 +1664,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."
@@ -1556,62 +1685,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "Ðдмін"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "Блок"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr "Ðадати кориÑтувачеві права адмініÑтратора"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr "Зробити адміном"
-#: actions/groupmembers.php:473
+#: 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 "Групи"
@@ -1785,6 +1920,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Це не Ваш Jabber ID."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Вхідні Ð´Ð»Ñ %1$s — Ñторінка %2$d"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1867,16 +2007,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"
@@ -1938,7 +2080,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"
@@ -1947,11 +2093,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 +2114,7 @@ msgstr "Ðеточне Ñ–Ð¼â€™Ñ Ð°Ð±Ð¾ пароль."
msgid "Error setting user. You are probably not authorized."
msgstr "Помилка. Можливо, Ви не авторизовані."
-#: actions/login.php:188 actions/login.php:241 lib/action.php:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Увійти"
@@ -2008,22 +2153,22 @@ msgstr ""
"Увійти викриÑтовуючи Ñ–Ð¼â€™Ñ Ñ‚Ð° пароль. Ще не маєте імені кориÑтувача? "
"[ЗареєÑтрувати](%%action.register%%) новий акаунт."
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
"Лише кориÑтувач з правами адмініÑтратора може призначити інших адмінів групи."
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s вже є адміном у групі «%2$s»."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Ðе можна отримати Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ %1$s щодо членÑтва у групі %2$s."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Ðе можна надати %1$s права адміна в групі %2$s."
@@ -2033,7 +2178,7 @@ msgid "No current status"
msgstr "ÐÑ–Ñкого поточного ÑтатуÑу"
#: actions/newapplication.php:52
-msgid "New application"
+msgid "New Application"
msgstr "Ðовий додаток"
#: actions/newapplication.php:64
@@ -2044,11 +2189,11 @@ msgstr "Ви маєте Ñпочатку увійти, аби мати змогÑ
msgid "Use this form to register a new application."
msgstr "СкориÑтайтеÑÑŒ цією формою, щоб зареєÑтрувати новий додаток."
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr "Потрібна URL-адреÑа."
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
msgid "Could not create application."
msgstr "Ðе вдалоÑÑ Ñтворити додаток."
@@ -2182,29 +2327,29 @@ msgstr "Додатки, Ñкі Ви зареєÑтрували"
msgid "You have not registered any applications yet."
msgstr "Поки що Ви не зареєÑтрували жодних додатків."
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr "Під’єднані додатки"
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
"Ви маєте дозволити наÑтупним додаткам доÑтуп до Вашого облікового запиÑу."
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
msgid "You are not a user of that application."
msgstr "Ви не Ñ” кориÑтувачем даного додатку."
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr "Ðе вдалоÑÑ ÑкаÑувати доÑтуп Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑƒ: "
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr "Ви не дозволили жодним додаткам викориÑтовувати Ваш акаунт."
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr "Розробники можуть змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑ”Ñтрації Ð´Ð»Ñ Ñ—Ñ…Ð½Ñ–Ñ… додатків "
@@ -2225,8 +2370,8 @@ msgstr "тип зміÑту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "Такий формат даних не підтримуєтьÑÑ."
@@ -2290,6 +2435,11 @@ msgstr "Токен Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ визначено Ñк неправильÐ
msgid "Login token expired."
msgstr "Токен Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ втратив чинніÑÑ‚ÑŒ."
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Вихідні Ð´Ð»Ñ %1$s — Ñторінка %2$d"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2362,7 +2512,8 @@ msgstr "Ðеможна зберегти новий пароль."
msgid "Password saved."
msgstr "Пароль збережено."
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "ШлÑÑ…"
@@ -2370,132 +2521,147 @@ msgstr "ШлÑÑ…"
msgid "Path and server settings for this StatusNet site."
msgstr "ШлÑÑ… та Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñерверу Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, php-format
msgid "Theme directory not readable: %s"
msgstr "Дирикторію теми неможна прочитати: %s"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr "ЩоÑÑŒ не так із напиÑаннÑм директорії аватари: %s"
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr "ЩоÑÑŒ не так із напиÑаннÑм директорії фону: %s"
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr "Ðе можу прочитати директорію локалі: %s"
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr "Помилковий SSL-Ñервер. МакÑимальна довжина 255 знаків."
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr "Сайт"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Сервер"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr "Ð†Ð¼â€™Ñ Ñ…Ð¾Ñту Ñервера на Ñкому знаходитьÑÑ Ñайт."
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr "ШлÑÑ…"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
msgid "Site path"
msgstr "ШлÑÑ… до Ñайту"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr "ШлÑÑ… до локалей"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ ÑˆÐ»Ñху до локалей"
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "Ðадзвичайні URL-адреÑи"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr "ВикориÑтовувати надзвичайні (найбільш пам’Ñтні Ñ– визначні) URL-адреÑи?"
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr "Тема"
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr "Сервер теми"
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr "ШлÑÑ… до теми"
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ Ñ‚ÐµÐ¼Ð¸"
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
msgid "Avatars"
msgstr "Ðватари"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
msgid "Avatar server"
msgstr "Сервер аватари"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
msgid "Avatar path"
msgstr "ШлÑÑ… до аватари"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
msgid "Avatar directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ Ð°Ð²Ð°Ñ‚Ð°Ñ€Ð¸"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr "Фони"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr "Сервер фонів"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr "ШлÑÑ… до фонів"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ Ñ„Ð¾Ð½Ñ–Ð²"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr "SSL-шифруваннÑ"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ðіколи"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr "Іноді"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr "Завжди"
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr "ВикориÑтовувати SSL"
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr "Тоді викориÑтовувати SSL"
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
msgid "SSL server"
msgstr "SSL-Ñервер"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr "Сервер на Ñкий направлÑти SSL-запити"
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
msgid "Save paths"
msgstr "Зберегти шлÑхи"
@@ -2523,11 +2689,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»."
@@ -2552,13 +2718,13 @@ 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 "Повне ім’Ñ"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Веб-Ñторінка"
@@ -2580,11 +2746,11 @@ msgid "Bio"
msgstr "Про Ñебе"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
-msgstr "ЛокаціÑ"
+msgstr "РозташуваннÑ"
#: actions/profilesettings.php:134 actions/register.php:473
msgid "Where you are, like \"City, State (or Region), Country\""
@@ -2607,7 +2773,7 @@ msgstr ""
"Позначте Ñебе теґами (літери, цифри, -, . та _), відокремлюючи кожен комою "
"або пробілом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Мова"
@@ -2634,7 +2800,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Ви перевищили ліміт (%d знаків макÑимум)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "ЧаÑовий поÑÑ Ð½Ðµ обрано."
@@ -2647,23 +2813,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 "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾."
@@ -2676,28 +2843,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Стрічка публічних допиÑів (RSS 1.0)"
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Стрічка публічних допиÑів (RSS 2.0)"
-#: actions/public.php:159
+#: actions/public.php:168
msgid "Public Stream Feed (Atom)"
msgstr "Стрічка публічних допиÑів (Atom)"
-#: actions/public.php:179
+#: actions/public.php:188
#, php-format
msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
@@ -2705,11 +2872,11 @@ msgid ""
msgstr ""
"Це публічна Ñтрічка допиÑів Ñайту %%site.name%%, але вона поки що порожнÑ."
-#: actions/public.php:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr "Станьте першим! Ðапишіть щоÑÑŒ!"
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
@@ -2717,7 +2884,7 @@ msgstr ""
"Чому б не [зареєÑтруватиÑÑŒ](%%action.register%%) Ñ– не зробити Ñвій перший "
"допиÑ!"
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2731,7 +2898,7 @@ msgstr ""
"розділити Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ð· друзÑми, родиною Ñ– колегами! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%"
"doc.help%%))"
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2769,7 +2936,7 @@ msgstr ""
"Чому б не [зареєÑтруватиÑÑŒ](%%%%action.register%%%%) Ñ– не напиÑати щоÑÑŒ "
"цікаве!"
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "Хмарка теґів"
@@ -2911,8 +3078,7 @@ msgstr "Даруйте, помилка у коді запрошеннÑ."
msgid "Registration successful"
msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ ÑƒÑпішна"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "РеєÑтраціÑ"
@@ -2955,7 +3121,7 @@ msgid "Same as password above. Required."
msgstr "Такий Ñамо, Ñк Ñ– пароль вище. Ðеодмінно."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Пошта"
@@ -3060,7 +3226,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 "ПідпиÑатиÑÑŒ"
@@ -3083,7 +3249,7 @@ msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ токен запиту."
#: actions/repeat.php:57
msgid "Only logged-in users can repeat notices."
-msgstr "Лише кориÑтувачі, що знаходÑÑ‚ÑŒÑÑ Ñƒ ÑиÑтемі, можуть вторувати допиÑам."
+msgstr "Лише кориÑтувачі, що знаходÑÑ‚ÑŒÑÑ Ñƒ ÑиÑтемі, можуть повторювати допиÑи."
#: actions/repeat.php:64 actions/repeat.php:71
msgid "No notice specified."
@@ -3091,42 +3257,47 @@ 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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "ВторуваннÑ"
+msgstr "Повторено"
#: actions/repeat.php:119
msgid "Repeated!"
-msgstr "Вторувати!"
+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:144
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Відповіді до %1$s, Ñторінка %2$d"
+
+#: 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 "
@@ -3135,7 +3306,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 "
@@ -3144,7 +3315,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 "
@@ -3158,6 +3329,18 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Відповіді до %1$s на %2$s!"
+#: 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 "StatusNet"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
msgid "You cannot sandbox users on this site."
msgstr "Ви не можете нікого ізолювати на цьому Ñайті."
@@ -3166,75 +3349,106 @@ msgstr "Ви не можете нікого ізолювати на цьому Ñ
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 "СеÑÑ–Ñ—"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑеÑÑ–Ñ— Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "СеÑÑ–Ñ— обробки даних"
+
+#: 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:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr "Профіль додатку"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr "Іконка"
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
msgid "Name"
msgstr "Ім’Ñ"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
msgid "Organization"
msgstr "ОрганізаціÑ"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
-msgstr "Ñтворено %1$s — %2$s доÑтуп за замовч. — %3$d кориÑтувачів"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr "Створено %1$s — %2$s доÑтуп за замовч. — %3$d кориÑтувачів"
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr "МожливоÑÑ‚Ñ– додатку"
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr "Призначити новий ключ Ñ– таємне Ñлово"
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr "Інфо додатку"
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr "Ключ Ñпоживача"
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr "Таємно Ñлово Ñпоживача"
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr "URL-адреÑа токена запиту"
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr "URL-адреÑа токена дозволу"
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr "Ðвторизувати URL-адреÑу"
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
@@ -3242,26 +3456,35 @@ msgstr ""
"До уваги: Ð’ÑÑ– підпиÑи шифруютьÑÑ Ð·Ð° методом HMAC-SHA1. Ми не підтримуємо "
"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñів відкритим текÑтом."
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Ви впевнені, що бажаєте Ñкинути Ваш ключ Ñпоживача Ñ– таємну фразу?"
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Обрані допиÑи %1$s, Ñторінка %2$d"
+
#: actions/showfavorites.php:132
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."
@@ -3270,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 "
@@ -3279,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 "
@@ -3290,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 "Це ÑпоÑіб поділитиÑÑŒ з уÑіма тим, що вам подобаєтьÑÑ."
@@ -3299,67 +3522,72 @@ msgstr "Це ÑпоÑіб поділитиÑÑŒ з уÑіма тим, що вам
msgid "%s group"
msgstr "Група %s"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Група %1$s, Ñторінка %2$d"
+
+#: actions/showgroup.php:226
msgid "Group profile"
msgstr "Профіль групи"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3374,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."
@@ -3387,7 +3615,7 @@ msgstr ""
"забезпеченні [StatusNet](http://status.net/). Члени цієї групи роблÑÑ‚ÑŒ "
"короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. "
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Ðдміни"
@@ -3418,6 +3646,11 @@ msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð¾."
msgid " tagged %s"
msgstr " позначено з %s"
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr "%1$s, Ñторінка %2$d"
+
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3443,12 +3676,12 @@ msgstr "Стрічка допиÑів Ð´Ð»Ñ %s (Atom)"
msgid "FOAF for %s"
msgstr "FOAF Ð´Ð»Ñ %s"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "Це Ñтрічка допиÑів %1$s, але %2$s ще нічого не напиÑав."
-#: actions/showstream.php:196
+#: actions/showstream.php:205
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
@@ -3456,7 +3689,7 @@ msgstr ""
"Побачили щоÑÑŒ цікаве нещодавно? Ви ще нічого не напиÑали Ñ– це Ñлушна нагода "
"аби розпочати! :)"
-#: actions/showstream.php:198
+#: actions/showstream.php:207
#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
@@ -3465,7 +3698,7 @@ msgstr ""
"Ви можете «розштовхати» %1$s або [щоÑÑŒ йому напиÑати](%%%%action.newnotice%%%"
"%?status_textarea=%2$s)."
-#: actions/showstream.php:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3479,7 +3712,7 @@ msgstr ""
"register%%) зараз Ñ– Ñлідкуйте за допиÑами **%s**, також на Ð’Ð°Ñ Ñ‡ÐµÐºÐ°Ñ” багато "
"іншого! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%doc.help%%))"
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3490,10 +3723,10 @@ msgstr ""
"(http://uk.wikipedia.org/wiki/Мікроблоґ), Ñкий працює на вільному "
"програмному забезпеченні [StatusNet](http://status.net/). "
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
-msgstr "Ð’Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ %s"
+msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð° %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3504,203 +3737,135 @@ msgid "User is already silenced."
msgstr "КориÑтувачу наразі заклеїли рота Ñкотчем."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Загальні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "ОÑновні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet"
-#: actions/siteadminpanel.php:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Ð†Ð¼â€™Ñ Ñайту не може бути порожнім."
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Електронна адреÑа має бути чинною."
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Ðевідома мова «%s»."
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr "Помилковий Ñнепшот URL."
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr "Помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñнепшоту."
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr "ЧаÑтота Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñнепшотів має міÑтити цифру."
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr "Ліміт текÑтових повідомлень Ñтановить 140 знаків."
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
"ЧаÑове Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ надÑиланні дублікату Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” Ñтановити від 1 Ñ– "
"більше Ñекунд."
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "ОÑновні"
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Ðазва Ñайту"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Ðазва Вашого Ñайту, штибу \"Мікроблоґи компанії ...\""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Ðадано"
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "ТекÑÑ‚ викориÑтаний Ð´Ð»Ñ Ð¿Ð¾Ñілань кредитів унизу кожної Ñторінки"
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Ðаданий URL"
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL викориÑтаний Ð´Ð»Ñ Ð¿Ð¾Ñілань кредитів унизу кожної Ñторінки"
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна електронна адреÑа Ð´Ð»Ñ Ð’Ð°ÑˆÐ¾Ð³Ð¾ Ñайту"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локаль"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "ЧаÑовий поÑÑ Ð·Ð° замовчуваннÑм"
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "ЧаÑовий поÑÑ Ð·Ð° замовчуваннÑм Ð´Ð»Ñ Ñайту; зазвичай UTC."
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr "Мова Ñайту за замовчуваннÑм"
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr "URL-адреÑи"
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr "Сервер"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
-msgstr "Ð†Ð¼â€™Ñ Ñ…Ð¾Ñту Ñервера на Ñкому знаходитьÑÑ Ñайт."
-
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr "Ðадзвичайні URL-адреÑи"
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr "ВикориÑтовувати надзвичайні (найбільш пам’Ñтні Ñ– визначні) URL-адреÑи?"
-
-#: actions/siteadminpanel.php:318
-msgid "Access"
-msgstr "ПогодитиÑÑŒ"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
-msgstr "Приватно"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Мова за замовчуваннÑм"
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Заборонити анонімним відвідувачам (Ñ‚Ñ–, що не увійшли до ÑиÑтеми) переглÑдати "
-"Ñайт?"
-
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
-msgstr "Лише за запрошеннÑми"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr "Зробити регіÑтрацію лише за запрошеннÑми."
-
-#: actions/siteadminpanel.php:333
-msgid "Closed"
-msgstr "Закрито"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr "СкаÑувати подальшу регіÑтрацію."
+"Мова Ñайту на випадок, коли Ð°Ð²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð²Ð¸ за наÑтройками браузера не "
+"доÑтупно"
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr "Снепшоти"
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr "Випадково під Ñ‡Ð°Ñ Ð²ÐµÐ±-хіта"
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr "Згідно плану робіт"
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr "Снепшоти даних"
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr "Коли надÑилати ÑтатиÑтичні дані до Ñерверів status.net"
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr "ЧаÑтота"
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снепшоти надÑилатимутьÑÑ Ñ€Ð°Ð· на N веб-хітів"
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr "Ð—Ð²Ñ–Ñ‚Ð½Ñ URL-адреÑа"
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr "Снепшоти надÑилатимутьÑÑ Ð½Ð° цю URL-адреÑу"
-
-#: actions/siteadminpanel.php:367
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "ОбмеженнÑ"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "ТекÑтові обмеженнÑ"
-#: actions/siteadminpanel.php:370
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "МакÑимальна кількіÑÑ‚ÑŒ знаків у допиÑÑ–."
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "ЧаÑове обмеженнÑ"
-#: actions/siteadminpanel.php:374
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Як довго кориÑтувачі мають зачекати (в Ñекундах) аби надіÑлати той Ñамий "
"Ð´Ð¾Ð¿Ð¸Ñ Ñ‰Ðµ раз."
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
-msgid "Save site settings"
-msgstr "Зберегти Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñайту"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Змінити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "МакÑимальна довжина Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту Ñтановить 255 Ñимволів"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "ТекÑÑ‚ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "ТекÑÑ‚ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту (255 Ñимволів макÑимум; HTML дозволено)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Зберегти Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñайту"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3801,19 +3966,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 "Помилковий Ñнепшот 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
+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 "ПідпиÑані"
@@ -3877,7 +4109,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 "
@@ -3893,30 +4125,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:86
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "ДопиÑи з теґом %1$s, Ñторінка %2$d"
+
+#: 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)"
@@ -3934,7 +4171,8 @@ msgstr "Позначити %s"
msgid "User profile"
msgstr "Профіль кориÑтувача."
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "Фото"
@@ -3969,7 +4207,7 @@ msgstr "СкориÑтайтеÑÑŒ цією формою, щоб додати Ñ‚
msgid "No such tag."
msgstr "Такого теґу немає."
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API метод наразі знаходитьÑÑ Ñƒ розробці."
@@ -3993,18 +4231,19 @@ msgstr "У запиті відÑутній ID профілю."
msgid "Unsubscribed"
msgstr "ВідпиÑано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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."
@@ -4067,26 +4306,6 @@ msgid "Whether to allow users to invite new users."
msgstr ""
"Ð’ той чи інший ÑпоÑіб дозволити кориÑтувачам вітати нових кориÑтувачів."
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr "СеÑÑ–Ñ—"
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr "СеÑÑ–Ñ— обробки даних"
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr "Обробка даних ÑеÑій ÑамоÑтійно."
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr "СеÑÑ–Ñ Ð½Ð°Ð»Ð°Ð´ÐºÐ¸"
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr "Виводити дані ÑеÑÑ–Ñ— наладки."
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Ðвторизувати підпиÑку"
@@ -4101,36 +4320,36 @@ msgstr ""
"підпиÑатиÑÑŒ на допиÑи цього кориÑтувача. Якщо Ви не збиралиÑÑŒ підпиÑуватиÑÑŒ "
"ні на чиї допиÑи, проÑто натиÑніть «Відмінити»."
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr "ЛіцензіÑ"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "ПогодитиÑÑŒ"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr "ПідпиÑатиÑÑŒ до цього кориÑтувача"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Забраковано"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
msgid "Reject this subscription"
msgstr "Відмінити цю підпиÑку"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Ðемає запиту на авторизацію!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "ПідпиÑку авторизовано"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
@@ -4140,11 +4359,11 @@ msgstr ""
"ЗвіртеÑÑŒ з інÑтрукціÑми на Ñайті Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ конкретної інформації про те, Ñк "
"авторизувати підпиÑку. Ваш підпиÑний токен:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "ПідпиÑку Ñкинуто"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
@@ -4154,37 +4373,37 @@ msgstr ""
"з інÑтрукціÑми на Ñайті Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ конкретної інформації про те, Ñк Ñкинути "
"підпиÑку."
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr "URI Ñлухача «%s» тут не знайдено"
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr "URI Ñлухача ‘%s’ задовге."
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr "URI Ñлухача ‘%s’ це локальний кориÑтувач"
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr "URL-адреÑа профілю ‘%s’ Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ кориÑтувача."
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr "URL-адреÑа автари ‘%s’ помилкова."
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Ðе можна прочитати URL аватари ‘%s’."
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Ðеправильний тип Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ URL-адреÑи аватари ‘%s’."
@@ -4205,21 +4424,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr "ПолаÑуйте бутербродом!"
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Групи %1$s, Ñторінка %2$d"
+
#: actions/usergroups.php:130
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"
@@ -4234,10 +4464,6 @@ msgstr ""
"Цей Ñайт працює на %1$s, верÑÑ–Ñ %2$s. ÐвторÑькі права 2008-2010 StatusNet, "
"Inc. і розробники."
-#: actions/version.php:157
-msgid "StatusNet"
-msgstr "StatusNet"
-
#: actions/version.php:161
msgid "Contributors"
msgstr "Розробники"
@@ -4279,7 +4505,7 @@ msgstr ""
msgid "Plugins"
msgstr "Додатки"
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "ВерÑÑ–Ñ"
@@ -4318,6 +4544,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"
@@ -4335,27 +4565,27 @@ msgstr "Ðе можна долучити повідомленнÑ."
msgid "Could not update message with new URI."
msgstr "Ðе можна оновити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· новим URI."
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Помилка бази даних при додаванні теґу: %s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблема при збереженні допиÑу. Ðадто довге."
-#: classes/Notice.php:229
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при збереженні допиÑу. Ðевідомий кориÑтувач."
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Дуже багато допиÑів за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:240
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4363,37 +4593,72 @@ msgstr ""
"Дуже багато повідомлень за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам заборонено надÑилати допиÑи до цього Ñайту."
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблема при збереженні допиÑу."
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "Помилка бази даних при додаванні відповіді: %s"
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr "Проблема при збереженні вхідних допиÑів Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
-#: classes/User.php:382
+#: 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
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ токен підпиÑки OMB."
+
+#: 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 "Змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
@@ -4431,124 +4696,170 @@ msgstr "%1$s — %2$s"
msgid "Untitled page"
msgstr "Сторінка без заголовку"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Відправна Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ð¿Ð¾ Ñайту"
-#: lib/action.php:433
-msgid "Home"
-msgstr "Дім"
-
-#: lib/action.php:433
+#. 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 "Змінити електронну адреÑу, аватару, пароль, профіль"
-#: lib/action.php:438
-msgid "Connect"
-msgstr "З’єднаннÑ"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· ÑервіÑами"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "З’єднаннÑ"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Змінити конфігурацію Ñайту"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ЗапроÑити"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr "Ðдмін"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Вийти"
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ЗапроÑити"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Вийти з Ñайту"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Допомога"
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr "Увійти"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Допоможіть!"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "Пошук"
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr "Довідка"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пошук людей або текÑтів"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "ОглÑд"
-#: lib/action.php:619
+#: lib/action.php:645
msgid "Page notice"
msgstr "Ð—Ð°ÑƒÐ²Ð°Ð¶ÐµÐ½Ð½Ñ Ñторінки"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "ДругорÑдна Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ð¿Ð¾ Ñайту"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "Допомога"
+
+#: lib/action.php:754
msgid "About"
msgstr "Про"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаПи"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr "Умови"
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "КонфіденційніÑÑ‚ÑŒ"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Джерело"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ StatusNet"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4557,12 +4868,12 @@ msgstr ""
"**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð² наданий вам [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð². "
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4573,130 +4884,209 @@ msgstr ""
"Ð´Ð»Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð², верÑÑ–Ñ %s, доÑтупному під [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
msgid "Site content license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð·Ð¼Ñ–Ñту Ñайту"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "ЗміÑÑ‚ Ñ– дані %1$s Ñ” приватними Ñ– конфіденційними."
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать %1$s. Ð’ÑÑ– права захищено."
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать розробникам. Ð’ÑÑ– права захищено."
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "Ð’ÑÑ– "
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "ліцензіÑ."
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "ÐÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ Ñторінок"
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr "Вперед"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "КориÑтувач"
+
+#. 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 "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÑˆÐ»Ñху"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ ÑеÑій"
+
+#. 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 ""
+"API-реÑÑƒÑ€Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” дозвіл типу «читаннÑ-запиÑ», але у Ð²Ð°Ñ Ñ” лише доÑтуп Ð´Ð»Ñ "
+"читаннÑ."
+
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+"Ðевдала Ñпроба авторизації API, nickname = %1$s, proxy = %2$s, ip = %3$s"
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Керувати додатками"
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr "Іконка Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ додатку"
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, php-format
msgid "Describe your application in %d characters"
msgstr "Опишіть додаток, вкладаючиÑÑŒ у %d знаків"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
msgid "Describe your application"
msgstr "Опишіть Ваш додаток"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr "URL-адреÑа"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr "URL-адреÑа веб-Ñторінки цього додатку"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr "ОрганізаціÑ, відповідальна за цей додаток"
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr "URL-адреÑа веб-Ñторінки організації"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr "URL-адреÑа, на Ñку перенаправлÑти піÑÐ»Ñ Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—"
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr "Браузер"
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr "ДеÑктоп"
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr "Тип додатку, браузер або деÑктоп"
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr "Лише читаннÑ"
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr "Читати-пиÑати"
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
"Дозвіл за замовчуваннÑм Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ додатку: лише Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ читати-пиÑати"
@@ -4725,11 +5115,11 @@ msgstr "ДопиÑи, до Ñких прикріплено це вкладенн
msgid "Tags for this attachment"
msgstr "Теґи Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вкладеннÑ"
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пароль"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr "Змінювати пароль не дозволено"
@@ -4847,20 +5237,20 @@ msgstr "Помилка при відправці прÑмого повідомл
#: lib/command.php:413
msgid "Cannot repeat your own notice"
-msgstr "Ðе можу вторувати Вашому влаÑному допиÑу"
+msgstr "Ðе можу повторити Ваш влаÑний допиÑ"
#: lib/command.php:418
msgid "Already repeated that notice"
-msgstr "Цьому допиÑу вже вторували"
+msgstr "Цей Ð´Ð¾Ð¿Ð¸Ñ Ð²Ð¶Ðµ повторили"
#: lib/command.php:426
#, php-format
msgid "Notice from %s repeated"
-msgstr "ДопиÑу від %s вторували"
+msgstr "Ð”Ð¾Ð¿Ð¸Ñ %s повторили"
#: lib/command.php:428
msgid "Error repeating notice."
-msgstr "Помилка із вторуваннÑм допиÑу."
+msgstr "Помилка при повторенні допиÑу."
#: lib/command.php:482
#, php-format
@@ -4880,84 +5270,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"
@@ -4971,6 +5370,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,19 +5433,19 @@ msgstr ""
"tracks — наразі не виконуєтьÑÑ\n"
"tracking — наразі не виконуєтьÑÑ\n"
-#: lib/common.php:131
+#: lib/common.php:148
msgid "No configuration file found. "
msgstr "Файлу конфігурації не знайдено. "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr "Шукав файли конфігурації в цих міÑцÑÑ…: "
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ файл інÑталÑції, аби полагодити це."
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr "Іти до файлу інÑталÑції."
@@ -5144,6 +5544,11 @@ msgstr "Оберіть теґ до звуженого ÑпиÑку"
msgid "Go"
msgstr "Вперед"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Ðадати цьому кориÑтувачеві роль \"%s\""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL-адреÑа веб-Ñторінки, блоґу групи, або тематичного блоґу"
@@ -5234,32 +5639,32 @@ 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 "кб"
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr "Ðевідоме джерело вхідного Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ %d."
@@ -5540,7 +5945,7 @@ msgstr ""
"Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¸ долучити кориÑтувачів до розмови. Такі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ð°Ñ‡Ð¸Ñ‚Ðµ "
"лише Ви."
-#: lib/mailbox.php:227 lib/noticelist.php:477
+#: lib/mailbox.php:227 lib/noticelist.php:482
msgid "from"
msgstr "від"
@@ -5632,6 +6037,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 "ÐадіÑлати допиÑ"
@@ -5665,50 +6075,50 @@ 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:531
+#: lib/noticelist.php:566
msgid "in context"
msgstr "в контекÑÑ‚Ñ–"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Вторуванні"
+msgstr "Повторено"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr "ВідповіÑти на цей допиÑ"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "ВідповіÑти"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð²Ñ‚Ð¾Ñ€ÑƒÐ²Ð°Ð»Ð¸"
+msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ð»Ð¸"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -5738,11 +6148,7 @@ msgstr "Помилка при додаванні віддаленого проф
msgid "Duplicate notice"
msgstr "Дублікат допиÑу"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr "Ð’Ð°Ñ Ð¿Ð¾Ð·Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ можливоÑÑ‚Ñ– підпиÑатиÑÑŒ."
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ нову підпиÑку."
@@ -5758,19 +6164,19 @@ msgstr "Відповіді"
msgid "Favorites"
msgstr "Обрані"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Вхідні"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Ваші вхідні повідомленнÑ"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Вихідні"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "ÐадіÑлані вами повідомленнÑ"
@@ -5783,7 +6189,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 "ПідпиÑки"
@@ -5791,23 +6197,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 "Ð’ÑÑ– групи"
@@ -5845,7 +6251,16 @@ msgstr "Повторити цей допиÑ?"
#: lib/repeatform.php:132
msgid "Repeat this notice"
-msgstr "Вторувати цьому допиÑу"
+msgstr "Повторити цей допиÑ"
+
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Відкликати роль \"%s\" Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr "КориÑтувача Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÐºÐ¾Ñ€Ð¸Ñтувацького режиму не визначено."
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5863,6 +6278,10 @@ msgstr "Пошук"
msgid "Keyword(s)"
msgstr "Ключові Ñлова"
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Пошук"
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr "Пошук"
@@ -5914,33 +6333,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
@@ -5992,67 +6392,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "міÑÑць тому"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "близько %d міÑÑців тому"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "рік тому"
@@ -6066,7 +6480,7 @@ msgstr "%s Ñ” неприпуÑтимим кольором!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s неприпуÑтимий колір! ВикориÑтайте 3 або 6 знаків (HEX-формат)"
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index 4b977cee4..dec9eeeba 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,24 +7,90 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:43+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:36:48+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. 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"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "Thay đổi hình đại diện"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "Äăng ký"
+
+#. 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ư"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "ThÆ° má»i"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "Ban user"
+
+#. 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/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
@@ -33,84 +99,93 @@ msgstr "Không có tin nhắn nào."
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -120,22 +195,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +226,7 @@ msgstr "Phương thức API không tìm thấy!"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Phương thức này yêu cầu là POST."
@@ -170,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."
@@ -182,7 +258,7 @@ msgstr "Không thể lưu hồ sơ cá nhân."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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
@@ -309,78 +385,78 @@ msgstr "Không thể cập nhật thành viên."
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "Không thể lấy lại các tin nhắn ưa thích"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -392,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."
@@ -411,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."
@@ -431,98 +507,112 @@ msgstr "%s và nhóm"
msgid "groups on %s"
msgstr "Mã nhóm"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "Tên đăng nhập hoặc mật khẩu không hợp lệ."
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "Lỗi xảy ra khi tạo thành viên."
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "Bất ngỠgửi mẫu thông tin. "
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "Giới thiệu"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "Biệt danh"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Mật khẩu"
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -558,17 +648,17 @@ msgstr "Hình đại diện đã được cập nhật."
msgid "No status with that ID found."
msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "Quá dài. Tối đa là 140 ký tự."
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "Không tìm thấy"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -583,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"
@@ -620,27 +698,22 @@ msgstr "Dòng tin công cộng"
msgid "%s updates from everyone!"
msgstr "%s cập nhật từ tất cả má»i ngÆ°á»i!"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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"
@@ -658,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."
@@ -671,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"
@@ -691,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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"
@@ -724,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 ""
@@ -758,23 +830,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "Có"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "Ban user"
@@ -783,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"
@@ -875,16 +952,62 @@ 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"
+#: actions/deleteapplication.php:63
+#, fuzzy
+msgid "You must be logged in to delete an application."
+msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "Tin nhắn không có hồ sơ cá nhân"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+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: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."
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "Không có tin nhắn nào."
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "Không thể xóa tin nhắn này."
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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."
@@ -913,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:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "Xóa tin nhắn"
@@ -933,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 ""
@@ -1062,12 +1185,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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"
@@ -1086,36 +1210,27 @@ msgstr "Tin nhắn này đã có trong danh sách tin nhắn Æ°a thích của bá
msgid "Add to favorites"
msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "Không có tài liệu nào."
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "Tin nhắn không có hồ sơ cá nhân"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "Không có tin nhắn nào."
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-#, 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."
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1125,47 +1240,52 @@ msgstr ""
msgid "Name is required."
msgstr "Cùng mật khẩu ở trên. Bắt buộc."
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "Tên đầy đủ quá dài (tối đa là 255 ký tự)."
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name 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/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "Mô tả"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "Trang chủ không phải là URL"
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "Không thể cập nhật thành viên."
@@ -1180,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."
@@ -1244,8 +1364,8 @@ msgstr ""
"để nhận tin nhắn và lá»i hÆ°á»›ng dẫn."
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "Hủy"
@@ -1331,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:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Äịa chỉ email không hợp lệ."
@@ -1345,7 +1465,7 @@ msgstr "Bạn đã dùng địa chỉ email này rồi"
msgid "That email address already belongs to another user."
msgstr "Äịa chỉ email GTalk này đã có ngÆ°á»i khác sá»­ dụng rồi."
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "Không thể chèn mã xác nhận."
@@ -1412,7 +1532,7 @@ msgstr "Tin nhắn này đã có trong danh sách tin nhắn Æ°a thích của bá
msgid "Disfavor favorite"
msgstr "Không thích"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1537,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
@@ -1569,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:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "Ban user"
@@ -1606,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: 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:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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"
@@ -1870,6 +2015,11 @@ msgstr ""
msgid "That is not your Jabber ID."
msgstr "Äây không phải Jabber ID của bạn."
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Hộp thư đến của %s"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1953,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"
@@ -2024,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"
@@ -2034,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"
@@ -2057,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "Äăng nhập"
@@ -2096,21 +2253,21 @@ msgstr ""
"khoản, [hãy đăng ký](%%action.register%%) tài khoản mới, hoặc thử đăng nhập "
"bằng [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "NgÆ°á»i dùng không có thông tin."
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
@@ -2120,8 +2277,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "Không có tin nhắn nào."
#: actions/newapplication.php:64
#, fuzzy
@@ -2132,11 +2290,11 @@ msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "Không thể tạo favorite."
@@ -2273,29 +2431,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2317,8 +2475,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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."
@@ -2390,6 +2548,11 @@ msgstr "Nội dung tin nhắn không hợp lệ"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Hộp thư đi của %s"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2465,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:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2473,146 +2637,162 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "Trang này không phải là phÆ°Æ¡ng tiện truyá»n thông mà bạn chấp nhận."
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "ThÆ° má»i"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "Khôi phục"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "Thông báo mới"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "Hình đại diện"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "Thay đổi hình đại diện"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "Hình đại diện đã được cập nhật."
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "Hình đại diện đã được cập nhật."
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
#, fuzzy
msgid "Backgrounds"
msgstr "Background Theme:"
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
#, fuzzy
msgid "Background server"
msgstr "Background Theme:"
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
#, fuzzy
msgid "Background path"
msgstr "Background Theme:"
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
#, fuzzy
msgid "Background directory"
msgstr "Background Theme:"
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Khôi phục"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "Tin nhắn"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "Khôi phục"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "Thông báo mới"
@@ -2640,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 ""
@@ -2670,13 +2850,13 @@ 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 đủ"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "Trang chủ hoặc Blog"
@@ -2699,8 +2879,8 @@ msgid "Bio"
msgstr "Lý lịch"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "Thành phố"
@@ -2724,7 +2904,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Ngôn ngữ"
@@ -2750,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:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2764,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."
@@ -2797,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "Dòng tin công cộng"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2847,7 +3028,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2881,7 +3062,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -3021,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:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "Äăng ký"
@@ -3064,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:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3168,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"
@@ -3209,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:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "Tạo"
@@ -3219,42 +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:144
+#: 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: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 "
@@ -3266,6 +3451,21 @@ 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"
+msgstr "Hình đại diện đã được cập nhật."
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3276,117 +3476,159 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "Thay đổi hình đại diện"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "Tin nhắn không có hồ sơ cá nhân"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "Biệt danh"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "ThÆ° má»i đã gá»­i"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Mô tả"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: 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ê"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "Những tin nhắn ưa thích của %s"
+
#: actions/showfavorites.php:132
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 "
@@ -3394,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 ""
@@ -3403,72 +3645,77 @@ msgstr ""
msgid "%s group"
msgstr "%s và nhóm"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "Thành viên"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "Thông tin nhóm"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: actions/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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3478,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."
@@ -3487,7 +3734,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3520,6 +3767,11 @@ msgstr "Tin đã gửi"
msgid " tagged %s"
msgstr "Thông báo được gắn thẻ %s"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s và bạn bè"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3545,25 +3797,25 @@ msgstr "Dòng tin nhắn cho %s"
msgid "FOAF for %s"
msgstr "Hộp thư đi của %s"
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3572,7 +3824,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3580,7 +3832,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "Trả lá»i cho %s"
@@ -3596,208 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: 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:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: 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:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Thành phố"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ngôn ngữ bạn thích"
-#: actions/siteadminpanel.php:303
-msgid "URLs"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "Khôi phục"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "Chấp nhận"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "Riêng tư"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "ThÆ° má»i"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "Ban user"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Tin mới nhất"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-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:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "Thay đổi hình đại diện"
+msgid "Save site notice"
+msgstr "Thông báo mới"
#: actions/smssettings.php:58
#, fuzzy
@@ -3909,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: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:69
+#: actions/subscribe.php:145
#, fuzzy
msgid "Subscribed"
msgstr "Theo bạn này"
@@ -3985,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 "
@@ -3995,31 +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:86
+#: 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: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"
@@ -4039,7 +4297,8 @@ msgstr "Từ khóa"
msgid "User profile"
msgstr "Hồ sơ"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -4073,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."
@@ -4102,18 +4361,19 @@ msgstr "Không có URL cho hồ sÆ¡ để quay vá»."
msgid "Unsubscribed"
msgstr "Hết theo"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: actions/updateprofile.php: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 ""
@@ -4180,26 +4440,6 @@ msgstr "ThÆ° má»i đã gá»­i"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "Äăng nhận cho phép"
@@ -4215,38 +4455,38 @@ msgstr ""
"nhắn của các thành viên này. Nếu bạn không yêu cầu đăng nhận xem tin nhắn "
"của há», hãy nhấn \"Hủy bá»\""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "Chấp nhận"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "Theo nhóm này"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "Từ chối"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "Tất cả đăng nhận"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "Không có yêu cầu!"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "Äăng nhận được phép"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4257,11 +4497,11 @@ msgstr ""
"hÆ°á»›ng dẫn chi tiết trên site để biết cách cho phép đăng ký. Äăng nhận token "
"của bạn là:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Äăng nhận từ chối"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4271,37 +4511,37 @@ msgstr ""
"Äăng nhận này đã bị từ chối, nhÆ°ng không có URL nào để quay vá». Hãy kiểm tra "
"các hướng dẫn chi tiết trên site để "
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "Không thể Ä‘á»c URL cho hình đại diện '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "Kiểu file ảnh không phù hợp với '%s'"
@@ -4321,20 +4561,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "Thành viên"
+
#: actions/usergroups.php:130
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"
@@ -4347,11 +4598,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "Hình đại diện đã được cập nhật."
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4383,7 +4629,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Cá nhân"
@@ -4424,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"
@@ -4444,65 +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:171
+#: 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:225
+#: 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:229
+#: 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:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: 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:1059
-#, 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:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
-#: classes/User.php:382
+#: 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"
@@ -4543,135 +4836,188 @@ msgstr "%s (%s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "Trang chủ"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "Kết nối"
-
-#: lib/action.php:438
+#. 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:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "ThÆ° má»i"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "Thoát"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "ThÆ° má»i"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "Hướng dẫn"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "Äăng nhập"
-#: lib/action.php:463
+#. 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:466 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:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Thông báo mới"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Tôi theo"
-#: lib/action.php:728
+#: 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:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "Riêng tư"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "Nguồn"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "Liên hệ"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tin đã gửi"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4680,12 +5026,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:778
+#: 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:780
+#: lib/action.php:806
#, fuzzy, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4696,143 +5042,225 @@ msgstr ""
"quyá»n [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Tìm theo nội dung của tin nhắn"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "Sau"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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"
+
+#. 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"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Xác nhận SMS"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "Xác nhận SMS"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "Nói vỠnhững sở thích của nhóm trong vòng 140 ký tự"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "Nói vỠnhững sở thích của nhóm trong vòng 140 ký tự"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "Nguồn"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "URL vỠTrang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "URL vỠTrang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4862,12 +5290,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "Äã lÆ°u mật khẩu."
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "Äã lÆ°u mật khẩu."
@@ -5027,82 +5455,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"
@@ -5116,6 +5554,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,20 +5582,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "Không có mã số xác nhận."
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -5263,6 +5702,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"
@@ -5360,34 +5804,34 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5642,7 +6086,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ừ "
@@ -5736,6 +6180,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"
@@ -5770,52 +6220,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "Không có nội dung!"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "Tạo"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "Trả lá»i tin nhắn này"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr "Trả lá»i"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "Tin đã gửi"
@@ -5852,11 +6302,7 @@ msgstr "Lỗi xảy ra khi thêm mới hồ sơ cá nhân"
msgid "Duplicate notice"
msgstr "Xóa tin nhắn"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "Không thể chèn thêm vào đăng nhận."
@@ -5872,19 +6318,19 @@ msgstr "Trả lá»i"
msgid "Favorites"
msgstr "Ưa thích"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Hộp thư đến"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "Thư đến của bạn"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "Há»™p thÆ° Ä‘i"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "Thư bạn đã gửi"
@@ -5898,7 +6344,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"
@@ -5906,24 +6352,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"
@@ -5970,6 +6416,15 @@ msgstr "Trả lá»i tin nhắn này"
msgid "Repeat this notice"
msgstr "Trả lá»i tin nhắn này"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5989,6 +6444,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"
@@ -6044,38 +6503,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
@@ -6133,70 +6570,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1 giá» trÆ°á»›c"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d giá» trÆ°á»›c"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1 năm trước"
@@ -6210,7 +6662,7 @@ msgstr "Trang chủ không phải là URL"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index aec8ae047..36e3a7946 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -10,23 +10,89 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:46+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:37:13+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "接å—"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "头åƒè®¾ç½®"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "注册"
+
+#. 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 "éšç§"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+#, fuzzy
+msgid "Invite only"
+msgstr "邀请"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "阻止"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "头åƒè®¾ç½®"
+
+#: 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
@@ -35,84 +101,93 @@ msgstr "没有该页é¢"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 和好å‹çš„æ›´æ–°ï¼"
@@ -122,22 +197,22 @@ msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼"
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -153,7 +228,7 @@ msgstr "API 方法未实现ï¼"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "此方法接å—POST请求。"
@@ -172,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 "用户没有个人信æ¯ã€‚"
@@ -184,7 +260,7 @@ msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -198,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
@@ -307,78 +383,78 @@ msgstr "无法更新用户。"
msgid "Two user ids or screen_names must be supplied."
msgstr "å¿…é¡»æ供两个用户å¸å·æˆ–昵称。"
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "无法获å–收è—的通告。"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -390,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 组"
@@ -409,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 "无法订阅用户:未找到。"
@@ -429,98 +505,112 @@ msgstr "%s 群组"
msgid "groups on %s"
msgstr "组动作"
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "用户å或密ç ä¸æ­£ç¡®ã€‚"
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "ä¿å­˜ç”¨æˆ·è®¾ç½®æ—¶å‡ºé”™ã€‚"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "添加标签时数æ®åº“出错:%s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr "未预料的表å•æ交。"
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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 "å¸å·"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "昵称"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr "密ç "
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
#, fuzzy
msgid "Allow"
msgstr "全部"
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -556,17 +646,17 @@ msgstr "头åƒå·²æ›´æ–°ã€‚"
msgid "No status with that ID found."
msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚"
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
#, fuzzy, php-format
msgid "That's too long. Max notice size is %d chars."
msgstr "超出长度é™åˆ¶ã€‚ä¸èƒ½è¶…过 140 个字符。"
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr "未找到"
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -581,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"
@@ -618,27 +696,22 @@ msgstr "%s 公众时间表"
msgid "%s updates from everyone!"
msgstr "æ¥è‡ªæ‰€æœ‰äººçš„ %s 消æ¯ï¼"
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, fuzzy, php-format
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 çš„æ›´æ–°ï¼"
@@ -656,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 "没有昵称。"
@@ -669,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 "头åƒ"
@@ -686,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 "剪è£"
@@ -718,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 "文件数æ®ä¸¢å¤±"
@@ -752,23 +824,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 "是"
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "阻止该用户"
@@ -777,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 "å–消阻止次用户"
@@ -871,16 +948,62 @@ 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 "您必须登录æ‰èƒ½åˆ›å»ºå°ç»„。"
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "通告没有关è”个人信æ¯"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "您未告知此个人信æ¯"
+
+#: actions/deleteapplication.php:102 actions/editapplication.php:127
+#: actions/newapplication.php:110 actions/showapplication.php:118
+#: lib/action.php:1217
+#, fuzzy
+msgid "There was a problem with your session token."
+msgstr "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+#, fuzzy
+msgid "Delete application"
+msgstr "没有这份通告。"
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "无法删除通告。"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 "未登录。"
@@ -909,7 +1032,7 @@ msgstr "确定è¦åˆ é™¤è¿™æ¡æ¶ˆæ¯å—?"
msgid "Do not delete this notice"
msgstr "无法删除通告。"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
#, fuzzy
msgid "Delete this notice"
msgstr "删除通告"
@@ -929,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 ""
@@ -1054,12 +1177,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 "ä¿å­˜"
@@ -1075,36 +1199,27 @@ msgstr "此通告未被收è—ï¼"
msgid "Add to favorites"
msgstr "加入收è—"
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "没有这份文档。"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "其他选项"
#: actions/editapplication.php:66
#, fuzzy
msgid "You must be logged in to edit an application."
msgstr "您必须登录æ‰èƒ½åˆ›å»ºå°ç»„。"
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "您未告知此个人信æ¯"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "没有这份通告。"
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-#, fuzzy
-msgid "There was a problem with your session token."
-msgstr "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
-
#: actions/editapplication.php:161
#, fuzzy
msgid "Use this form to edit your application."
@@ -1115,47 +1230,52 @@ msgstr "使用这个表å•æ¥ç¼–辑组"
msgid "Name is required."
msgstr "相åŒçš„密ç ã€‚此项必填。"
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "å…¨å过长(ä¸èƒ½è¶…过 255 个字符)。"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "昵称已被使用,æ¢ä¸€ä¸ªå§ã€‚"
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "æè¿°"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "主页的URLä¸æ­£ç¡®ã€‚"
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "ä½ç½®è¿‡é•¿(ä¸èƒ½è¶…过255个字符)。"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "无法更新组"
@@ -1169,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 "选项已ä¿å­˜ã€‚"
@@ -1231,8 +1351,8 @@ msgstr ""
"指示。"
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "å–消"
@@ -1314,7 +1434,7 @@ msgid "Cannot normalize that email address"
msgstr "无法识别此电å­é‚®ä»¶"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„电å­é‚®ä»¶ã€‚"
@@ -1326,7 +1446,7 @@ msgstr "您已登记此电å­é‚®ä»¶ã€‚"
msgid "That email address already belongs to another user."
msgstr "此电å­é‚®ä»¶å±žäºŽå…¶ä»–用户。"
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "无法æ’入验è¯ç ã€‚"
@@ -1388,7 +1508,7 @@ msgstr "已收è—此通告ï¼"
msgid "Disfavor favorite"
msgstr "å–消收è—"
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1513,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
@@ -1547,7 +1686,7 @@ msgstr "用户没有个人信æ¯ã€‚"
msgid "User is not a member of group."
msgstr "您未告知此个人信æ¯"
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "阻止用户"
@@ -1584,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr "阻止"
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
#, fuzzy
msgid "Make user an admin of the group"
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
#, fuzzy
msgid "Make Admin"
msgstr "admin管ç†å‘˜"
-#: actions/groupmembers.php:473
+#: 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 "组"
@@ -1841,6 +1986,11 @@ msgstr "验è¯ç å·²è¢«å‘é€åˆ°æ‚¨æ–°å¢žçš„å³æ—¶é€šè®¯å¸å·ã€‚您必须å…许
msgid "That is not your Jabber ID."
msgstr "è¿™ä¸æ˜¯æ‚¨çš„Jabberå¸å·ã€‚"
+#: actions/inbox.php:59
+#, fuzzy, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "%s 的收件箱"
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1917,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"
@@ -1982,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 组"
@@ -1992,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"
@@ -2015,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "登录"
@@ -2051,21 +2208,21 @@ msgstr ""
"请使用你的å¸å·å’Œå¯†ç ç™»å…¥ã€‚没有å¸å·ï¼Ÿ[注册](%%action.register%%) 一个新å¸å·, "
"或使用 [OpenID](%%action.openidlogin%%). "
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, fuzzy, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "用户没有个人信æ¯ã€‚"
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "无法订阅用户:未找到。"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "åªæœ‰adminæ‰èƒ½ç¼–辑这个组"
@@ -2075,8 +2232,9 @@ msgid "No current status"
msgstr "没有当å‰çŠ¶æ€"
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "没有这份通告。"
#: actions/newapplication.php:64
#, fuzzy
@@ -2088,11 +2246,11 @@ msgstr "您必须登录æ‰èƒ½åˆ›å»ºå°ç»„。"
msgid "Use this form to register a new application."
msgstr "使用此表格创建组。"
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "无法创建收è—。"
@@ -2223,29 +2381,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "您未告知此个人信æ¯"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2267,8 +2425,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚"
@@ -2340,6 +2498,11 @@ msgstr "通告内容ä¸æ­£ç¡®"
msgid "Login token expired."
msgstr "登录"
+#: actions/outbox.php:58
+#, fuzzy, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "%s çš„å‘件箱"
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2412,7 +2575,8 @@ msgstr "无法ä¿å­˜æ–°å¯†ç ã€‚"
msgid "Password saved."
msgstr "密ç å·²ä¿å­˜ã€‚"
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2420,142 +2584,158 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "这个页é¢ä¸æ供您想è¦çš„媒体类型"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
#, fuzzy
msgid "Site"
msgstr "邀请"
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+#, fuzzy
+msgid "Server"
+msgstr "æ¢å¤"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "新通告"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "头åƒ"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "头åƒè®¾ç½®"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "头åƒå·²æ›´æ–°ã€‚"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "头åƒå·²æ›´æ–°ã€‚"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
#, fuzzy
msgid "SSL"
msgstr "SMS短信"
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "æ¢å¤"
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
#, fuzzy
msgid "Sometimes"
msgstr "通告"
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "æ¢å¤"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "新通告"
@@ -2583,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 ""
@@ -2611,13 +2791,13 @@ 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 "å…¨å"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "主页"
@@ -2640,8 +2820,8 @@ msgid "Bio"
msgstr "自述"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "ä½ç½®"
@@ -2665,7 +2845,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "你的标签 (å­—æ¯letters, æ•°å­—numbers, -, ., å’Œ _), 以逗å·æˆ–空格分隔"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "语言"
@@ -2691,7 +2871,7 @@ msgstr "自动订阅任何订阅我的更新的人(这个选项最适åˆæœºå™¨äº
msgid "Bio is too long (max %d chars)."
msgstr "自述过长(ä¸èƒ½è¶…过140字符)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "未选择时区。"
@@ -2704,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 "设置已ä¿å­˜ã€‚"
@@ -2736,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:151
+#: actions/public.php:160
#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
msgstr "公开的èšåˆ"
-#: actions/public.php:155
+#: actions/public.php:164
#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
msgstr "公开的èšåˆ"
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "公开的èšåˆ"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2786,7 +2967,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, fuzzy, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2822,7 +3003,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr "标签云èšé›†"
@@ -2959,8 +3140,7 @@ msgstr "验è¯ç å‡ºé”™ã€‚"
msgid "Registration successful"
msgstr "注册æˆåŠŸã€‚"
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr "注册"
@@ -2999,7 +3179,7 @@ msgid "Same as password above. Required."
msgstr "相åŒçš„密ç ã€‚此项必填。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "电å­é‚®ä»¶"
@@ -3100,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 "订阅"
@@ -3143,7 +3323,7 @@ msgstr "您必须åŒæ„此授æƒæ–¹å¯æ³¨å†Œã€‚"
msgid "You already repeated that notice."
msgstr "您已æˆåŠŸé˜»æ­¢è¯¥ç”¨æˆ·ï¼š"
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "创建"
@@ -3153,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯"
+
+#: 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 "
@@ -3200,6 +3385,21 @@ 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"
+msgstr "头åƒå·²æ›´æ–°ã€‚"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3210,118 +3410,160 @@ msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
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 ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "头åƒè®¾ç½®"
+
#: actions/showapplication.php:82
#, fuzzy
msgid "You must be logged in to view an application."
msgstr "您必须登录æ‰èƒ½é‚€è¯·å…¶ä»–人使用 %s"
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
#, fuzzy
msgid "Application profile"
msgstr "通告没有关è”个人信æ¯"
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "昵称"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "分页"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "æè¿°"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "统计"
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+#, fuzzy
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr "确定è¦åˆ é™¤è¿™æ¡æ¶ˆæ¯å—?"
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s 收è—的通告"
+
#: actions/showfavorites.php:132
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 "
@@ -3329,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 ""
@@ -3338,71 +3580,76 @@ msgstr ""
msgid "%s group"
msgstr "%s 组"
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "%s 组æˆå‘˜, 第 %d 页"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "组资料"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3412,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."
@@ -3423,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管ç†å‘˜"
@@ -3456,6 +3703,11 @@ msgstr "消æ¯å·²å‘布。"
msgid " tagged %s"
msgstr "带 %s 标签的通告"
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s åŠå¥½å‹"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3481,25 +3733,25 @@ msgstr "%s 的通告èšåˆ"
msgid "FOAF for %s"
msgstr "%s çš„å‘件箱"
-#: actions/showstream.php:191
+#: actions/showstream.php:200
#, fuzzy, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr "这是 %s 和好å‹çš„时间线,但是没有任何人å‘布内容。"
-#: actions/showstream.php:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3508,7 +3760,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, fuzzy, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3518,7 +3770,7 @@ msgstr ""
"**%s** 有一个å¸å·åœ¨ %%%%site.name%%%%, 一个微åšå®¢æœåŠ¡ [micro-blogging]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, fuzzy, php-format
msgid "Repeat of %s"
msgstr "%s 的回å¤"
@@ -3534,209 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "ä¸æ˜¯æœ‰æ•ˆçš„电å­é‚®ä»¶"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新通告"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "新的电å­é‚®ä»¶åœ°å€ï¼Œç”¨äºŽå‘布 %s ä¿¡æ¯"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "本地显示"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "首选语言"
-#: actions/siteadminpanel.php:303
-#, fuzzy
-msgid "URLs"
-msgstr "URL 互è”网地å€"
-
-#: actions/siteadminpanel.php:306
-#, fuzzy
-msgid "Server"
-msgstr "æ¢å¤"
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
-
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "接å—"
-
-#: actions/siteadminpanel.php:321
-#, fuzzy
-msgid "Private"
-msgstr "éšç§"
-
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
-
-#: actions/siteadminpanel.php:327
-#, fuzzy
-msgid "Invite only"
-msgstr "邀请"
-
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
-msgstr ""
-
-#: actions/siteadminpanel.php:333
-#, fuzzy
-msgid "Closed"
-msgstr "阻止"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "新通告"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "新消æ¯"
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "无法ä¿å­˜ Twitter 设置ï¼"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新通告"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "头åƒè®¾ç½®"
+msgid "Save site notice"
+msgstr "新通告"
#: actions/smssettings.php:58
#, fuzzy
@@ -3839,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 "订阅"
@@ -3915,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 "
@@ -3925,31 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "用户自加标签 %s - 第 %d 页"
+
+#: 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 的通告èšåˆ"
@@ -3969,7 +4226,8 @@ msgstr "标签"
msgid "User profile"
msgstr "用户没有个人信æ¯ã€‚"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr "相片"
@@ -4004,7 +4262,7 @@ msgstr "使用这个表格给你的关注者或你的订阅加注标签。"
msgid "No such tag."
msgstr "未找到此消æ¯ã€‚"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr "API 方法尚未实现。"
@@ -4033,18 +4291,20 @@ msgstr "æœåŠ¡å™¨æ²¡æœ‰è¿”回个人信æ¯URL。"
msgid "Unsubscribed"
msgstr "退订"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -4111,26 +4371,6 @@ msgstr "å·²å‘é€é‚€è¯·"
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "确认订阅"
@@ -4145,39 +4385,39 @@ msgstr ""
"请检查详细信æ¯ï¼Œç¡®è®¤å¸Œæœ›è®¢é˜…此用户的通告。如果您刚æ‰æ²¡æœ‰è¦æ±‚订阅任何人的通"
"告,请点击\"å–消\"。"
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
#, fuzzy
msgid "License"
msgstr "注册è¯"
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "接å—"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
#, fuzzy
msgid "Subscribe to this user"
msgstr "订阅 %s"
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr "æ‹’ç»"
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "所有订阅"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "未收到认è¯è¯·æ±‚ï¼"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr "订阅已确认"
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
@@ -4186,11 +4426,11 @@ msgid ""
msgstr ""
"订阅已确认,但是没有回传URL。请到此网站查看如何确认订阅。您的订阅标识是:"
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "订阅被拒ç»"
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
@@ -4198,37 +4438,37 @@ msgid ""
"subscription."
msgstr "订阅已被拒ç»ï¼Œä½†æ˜¯æ²¡æœ‰å›žä¼ URL。请到此网站查看如何拒ç»è®¢é˜…。"
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "无法访问头åƒURL '%s'"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, fuzzy, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr "'%s' 图åƒæ ¼å¼é”™è¯¯"
@@ -4248,21 +4488,32 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "%s 组æˆå‘˜, 第 %d 页"
+
#: actions/usergroups.php:130
#, fuzzy
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"
@@ -4275,11 +4526,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "头åƒå·²æ›´æ–°ã€‚"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4311,7 +4557,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "个人"
@@ -4352,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"
@@ -4370,65 +4621,108 @@ msgstr "无法添加信æ¯ã€‚"
msgid "Could not update message with new URI."
msgstr "无法添加新URIçš„ä¿¡æ¯ã€‚"
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "添加标签时数æ®åº“出错:%s"
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚"
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "在这个网站你被ç¦æ­¢å‘布消æ¯ã€‚"
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "添加回å¤æ—¶æ•°æ®åº“出错:%s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
-#: classes/User.php:382
+#: 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 "修改您的个人信æ¯"
@@ -4467,133 +4761,191 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "无标题页"
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "主站导航"
-#: lib/action.php:433
-msgid "Home"
-msgstr "主页"
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "个人资料åŠæœ‹å‹å¹´è¡¨"
+#: 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:438
-msgid "Connect"
-msgstr "连接"
-
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "无法é‡å®šå‘到æœåŠ¡å™¨ï¼š%s"
-#: lib/action.php:442
+#: lib/action.php:443
+msgid "Connect"
+msgstr "连接"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "主站导航"
-#: lib/action.php:446 lib/subgroupnav.php:105
-msgid "Invite"
-msgstr "邀请"
+#: lib/action.php:449
+#, fuzzy
+msgctxt "MENU"
+msgid "Admin"
+msgstr "admin管ç†å‘˜"
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "登出"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "邀请"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "登出本站"
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "帮助"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "登录"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "帮助"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr "æœç´¢"
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "帮助"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+#, fuzzy
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "检索人或文字"
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr "本地显示"
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新通告"
-#: lib/action.php:721
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "次项站导航"
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "帮助"
+
+#: lib/action.php:754
msgid "About"
msgstr "关于"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "常è§é—®é¢˜FAQ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr "éšç§"
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr "æ¥æº"
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "è”系人"
-#: lib/action.php:745
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "呼å«"
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4602,12 +4954,12 @@ msgstr ""
"**%%site.name%%** 是一个微åšå®¢æœåŠ¡ï¼Œæ供者为 [%%site.broughtby%%](%%site."
"broughtbyurl%%)。"
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 是一个微åšå®¢æœåŠ¡ã€‚"
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4618,145 +4970,227 @@ msgstr ""
"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
"授æƒã€‚"
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr "全部"
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr "注册è¯"
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr "分页"
-#: lib/action.php:1133
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« 之åŽ"
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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短信确认"
+
+#. 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短信确认"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS短信确认"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "SMS短信确认"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "用ä¸è¶…过140个字符æ述您自己和您的爱好"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "用ä¸è¶…过140个字符æ述您自己和您的爱好"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
#, fuzzy
msgid "Source URL"
msgstr "æ¥æº"
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
#, fuzzy
msgid "URL of the homepage of this application"
msgstr "您的主页ã€åšå®¢æˆ–在其他站点的URL"
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
#, fuzzy
msgid "URL for the homepage of the organization"
msgstr "您的主页ã€åšå®¢æˆ–在其他站点的URL"
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4786,12 +5220,12 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
#, fuzzy
msgid "Password changing failed"
msgstr "密ç å·²ä¿å­˜ã€‚"
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
#, fuzzy
msgid "Password changing is not allowed"
msgstr "密ç å·²ä¿å­˜ã€‚"
@@ -4945,80 +5379,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"
@@ -5032,6 +5475,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"
@@ -5059,20 +5503,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "没有验è¯ç "
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
#, fuzzy
msgid "Go to the installer."
msgstr "登入本站"
@@ -5178,6 +5622,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"
@@ -5272,33 +5721,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5511,7 +5960,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 " 从 "
@@ -5604,6 +6053,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"
@@ -5638,53 +6093,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "没有内容ï¼"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "创建"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
#, fuzzy
msgid "Reply to this notice"
msgstr "无法删除通告。"
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
#, fuzzy
msgid "Reply"
msgstr "回å¤"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "消æ¯å·²å‘布。"
@@ -5719,12 +6174,7 @@ msgstr "添加远程的个人信æ¯å‡ºé”™"
msgid "Duplicate notice"
msgstr "删除通告"
-#: lib/oauthstore.php:466 lib/subs.php:48
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "那个用户阻止了你的订阅。"
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "无法添加新的订阅。"
@@ -5740,19 +6190,19 @@ msgstr "回å¤"
msgid "Favorites"
msgstr "收è—夹"
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "收件箱"
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr "您接收的消æ¯"
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr "å‘件箱"
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr "您å‘é€çš„消æ¯"
@@ -5766,7 +6216,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 "订阅"
@@ -5774,25 +6224,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 "所有组"
@@ -5837,6 +6287,15 @@ msgstr "无法删除通告。"
msgid "Repeat this notice"
msgstr "无法删除通告。"
+#: 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 ""
+
#: lib/sandboxform.php:67
#, fuzzy
msgid "Sandbox"
@@ -5856,6 +6315,10 @@ msgstr "æœç´¢"
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "æœç´¢"
+
#: lib/searchaction.php:162
#, fuzzy
msgid "Search help"
@@ -5911,36 +6374,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
@@ -5999,70 +6440,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "一分钟å‰"
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟å‰"
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "一å°æ—¶å‰"
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d å°æ—¶å‰"
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "一天å‰"
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d 天å‰"
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "一个月å‰"
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d 个月å‰"
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "一年å‰"
@@ -6076,7 +6533,7 @@ msgstr "主页的URLä¸æ­£ç¡®ã€‚"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index cbcbf1248..2829f707e 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,24 +7,87 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-21 22:36+0000\n"
-"PO-Revision-Date: 2010-01-21 22:38:49+0000\n"
+"POT-Creation-Date: 2010-03-04 18:55+0000\n"
+"PO-Revision-Date: 2010-03-05 22:37:16+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 (r61339); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63299); 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/all.php:63 actions/public.php:97 actions/replies.php:92
-#: actions/showfavorites.php:137 actions/tag.php:51
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+#, fuzzy
+msgid "Access"
+msgstr "接å—"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+#, fuzzy
+msgid "Site access settings"
+msgstr "線上å³æ™‚通設定"
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+#, fuzzy
+msgid "Registration"
+msgstr "所有訂閱"
+
+#. 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 ""
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr ""
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr ""
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr ""
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+#, fuzzy
+msgid "Closed"
+msgstr "無此使用者"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+#, fuzzy
+msgid "Save access settings"
+msgstr "線上å³æ™‚通設定"
+
+#: 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
@@ -33,84 +96,93 @@ msgstr "無此通知"
#: 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:149 actions/apisubscriptions.php:87
+#: 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/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/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:202
+#: 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 ""
@@ -120,22 +192,22 @@ msgstr ""
#: actions/apiaccountupdateprofile.php:97
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apidirectmessage.php:156 actions/apifavoritecreate.php:99
-#: actions/apifavoritedestroy.php:100 actions/apifriendshipscreate.php:100
-#: actions/apifriendshipsdestroy.php:100 actions/apifriendshipsshow.php:129
-#: actions/apigroupcreate.php:136 actions/apigroupismember.php:114
-#: actions/apigroupjoin.php:155 actions/apigroupleave.php:141
-#: actions/apigrouplist.php:132 actions/apigrouplistall.php:120
-#: actions/apigroupmembership.php:106 actions/apigroupshow.php:115
-#: actions/apihelptest.php:88 actions/apistatusesdestroy.php:102
-#: actions/apistatusesretweets.php:112 actions/apistatusesshow.php:108
-#: actions/apistatusnetconfig.php:133 actions/apistatusnetversion.php:93
-#: actions/apisubscriptions.php:111 actions/apitimelinefavorites.php:146
-#: actions/apitimelinefriends.php:155 actions/apitimelinegroup.php:150
-#: actions/apitimelinehome.php:156 actions/apitimelinementions.php:151
-#: actions/apitimelinepublic.php:131 actions/apitimelineretweetedbyme.php:122
+#: 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:122 actions/apitimelinetag.php:141
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
@@ -151,7 +223,7 @@ msgstr "確èªç¢¼éºå¤±"
#: 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:119
+#: actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -170,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 ""
@@ -182,7 +255,7 @@ msgstr "無法儲存個人資料"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
#: actions/apiaccountupdateprofileimage.php:97
-#: actions/apistatusesupdate.php:132 actions/avatarsettings.php:257
+#: 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
@@ -196,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."
@@ -302,78 +375,78 @@ msgstr "無法更新使用者"
msgid "Two user ids or screen_names must be supplied."
msgstr ""
-#: actions/apifriendshipsshow.php:135
+#: actions/apifriendshipsshow.php:134
#, fuzzy
msgid "Could not determine source user."
msgstr "無法更新使用者"
-#: actions/apifriendshipsshow.php:143
+#: actions/apifriendshipsshow.php:142
#, fuzzy
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:212
-#: actions/editgroup.php:195 actions/newapplication.php:200
+#: 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:187
-#: actions/newapplication.php:169
+#: 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 ""
@@ -385,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"
@@ -403,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"
@@ -423,98 +496,112 @@ msgstr ""
msgid "groups on %s"
msgstr ""
-#: actions/apioauthauthorize.php:108 actions/apioauthauthorize.php:114
-msgid "Bad request."
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
msgstr ""
-#: actions/apioauthauthorize.php:134 actions/avatarsettings.php:268
+#: actions/apioauthauthorize.php:106
+#, fuzzy
+msgid "Invalid token."
+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:50
-#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: 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:139
+#: 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: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 ""
-#: actions/apioauthauthorize.php:146
+#: actions/apioauthauthorize.php:135
#, fuzzy
msgid "Invalid nickname / password!"
msgstr "使用者å稱或密碼無效"
-#: actions/apioauthauthorize.php:170
+#: actions/apioauthauthorize.php:159
#, fuzzy
-msgid "DB error deleting OAuth app user."
+msgid "Database error deleting OAuth application user."
msgstr "使用者設定發生錯誤"
-#: actions/apioauthauthorize.php:196
+#: actions/apioauthauthorize.php:185
#, fuzzy
-msgid "DB error inserting OAuth app user."
+msgid "Database error inserting OAuth application user."
msgstr "增加回覆時,資料庫發生錯誤: %s"
-#: actions/apioauthauthorize.php:231
+#: 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:241
+#: actions/apioauthauthorize.php:227
#, php-format
-msgid "The request token %s has been denied."
+msgid "The request token %s has been denied and revoked."
msgstr ""
-#: actions/apioauthauthorize.php:246 actions/avatarsettings.php:281
+#: 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:151 actions/recoverpassword.php:44
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
msgstr ""
-#: actions/apioauthauthorize.php:273
+#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
msgstr ""
-#: actions/apioauthauthorize.php:290
+#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
msgstr ""
-#: actions/apioauthauthorize.php:320 lib/action.php:435
+#: 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
#, fuzzy
msgid "Account"
msgstr "關於"
-#: actions/apioauthauthorize.php:323 actions/login.php:230
+#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:236 actions/tagother.php:94 lib/groupeditform.php:152
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
#: lib/userprofile.php:131
msgid "Nickname"
msgstr "暱稱"
-#: actions/apioauthauthorize.php:326 actions/login.php:233
+#: actions/apioauthauthorize.php:316 actions/login.php:233
#: actions/register.php:429 lib/accountsettingsaction.php:116
msgid "Password"
msgstr ""
-#: actions/apioauthauthorize.php:338
+#: actions/apioauthauthorize.php:328
msgid "Deny"
msgstr ""
-#: actions/apioauthauthorize.php:344
+#: actions/apioauthauthorize.php:334
msgid "Allow"
msgstr ""
-#: actions/apioauthauthorize.php:361
+#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
msgstr ""
@@ -550,17 +637,17 @@ msgstr "更新個人圖åƒ"
msgid "No status with that ID found."
msgstr ""
-#: actions/apistatusesupdate.php:162 actions/newnotice.php:155
+#: 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 ""
-#: actions/apistatusesupdate.php:203
+#: actions/apistatusesupdate.php:202
msgid "Not found"
msgstr ""
-#: actions/apistatusesupdate.php:226 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
@@ -574,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"
@@ -611,27 +686,22 @@ msgstr ""
msgid "%s updates from everyone!"
msgstr ""
-#: actions/apitimelineretweetedbyme.php:112
-#, php-format
-msgid "Repeated by %s"
-msgstr ""
-
#: actions/apitimelineretweetedtome.php:111
#, php-format
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的微型部è½æ ¼"
@@ -649,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 "無暱稱"
@@ -662,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 "個人圖åƒ"
@@ -679,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 lib/deleteuserform.php:66
-#: lib/noticelist.php:611
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: 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 ""
@@ -711,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 ""
@@ -745,23 +814,24 @@ msgid ""
"will not be notified of any @-replies from them."
msgstr ""
-#: actions/block.php:143 actions/deletenotice.php:145
-#: actions/deleteuser.php:147 actions/groupblock.php:178
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: 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/deletenotice.php:146
-#: actions/deleteuser.php:148 actions/groupblock.php:179
-#: lib/repeatform.php:132
+#: 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 ""
-#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
#, fuzzy
msgid "Block this user"
msgstr "無此使用者"
@@ -770,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 "無此使用者"
@@ -863,16 +937,61 @@ 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 "無法更新使用者"
+
+#: actions/deleteapplication.php:71
+#, fuzzy
+msgid "Application not found."
+msgstr "確èªç¢¼éºå¤±"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+#, fuzzy
+msgid "You are not the owner of this application."
+msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
+
+#: 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
+#, fuzzy
+msgid "Delete application"
+msgstr "無此通知"
+
+#: 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
+#, fuzzy
+msgid "Do not delete this application"
+msgstr "無此通知"
+
+#: actions/deleteapplication.php:160
+#, fuzzy
+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 ""
@@ -900,7 +1019,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "無此通知"
-#: actions/deletenotice.php:146 lib/noticelist.php:611
+#: actions/deletenotice.php:146 lib/noticelist.php:655
msgid "Delete this notice"
msgstr ""
@@ -918,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 ""
@@ -1041,12 +1160,13 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:324 actions/profilesettings.php:174
-#: actions/siteadminpanel.php:388 actions/smssettings.php:181
-#: actions/subscriptions.php:203 actions/tagother.php:154
-#: actions/useradminpanel.php:313 lib/applicationeditform.php:335
-#: lib/applicationeditform.php:336 lib/designsettings.php:256
-#: lib/groupeditform.php:202
+#: 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 ""
@@ -1062,34 +1182,26 @@ msgstr ""
msgid "Add to favorites"
msgstr ""
-#: actions/doc.php:69
-msgid "No such document."
+#: actions/doc.php:158
+#, fuzzy, php-format
+msgid "No such document \"%s\""
msgstr "無此文件"
-#: actions/editapplication.php:54 lib/applicationeditform.php:136
-msgid "Edit application"
-msgstr ""
+#: actions/editapplication.php:54
+#, fuzzy
+msgid "Edit Application"
+msgstr "無此通知"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
msgstr ""
-#: actions/editapplication.php:77 actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:163
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
#: actions/showapplication.php:87
#, fuzzy
msgid "No such application."
msgstr "無此通知"
-#: actions/editapplication.php:127 actions/newapplication.php:110
-#: actions/showapplication.php:118 lib/action.php:1189
-msgid "There was a problem with your session token."
-msgstr ""
-
#: actions/editapplication.php:161
msgid "Use this form to edit your application."
msgstr ""
@@ -1098,47 +1210,52 @@ msgstr ""
msgid "Name is required."
msgstr ""
-#: actions/editapplication.php:180 actions/newapplication.php:162
+#: actions/editapplication.php:180 actions/newapplication.php:165
#, fuzzy
msgid "Name is too long (max 255 chars)."
msgstr "å…¨åéŽé•·ï¼ˆæœ€å¤š255字元)"
-#: actions/editapplication.php:183 actions/newapplication.php:165
+#: actions/editapplication.php:183 actions/newapplication.php:162
+#, fuzzy
+msgid "Name already in use. Try another one."
+msgstr "此暱稱已有人使用。å†è©¦è©¦çœ‹åˆ¥çš„å§ã€‚"
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
#, fuzzy
msgid "Description is required."
msgstr "所有訂閱"
-#: actions/editapplication.php:191
+#: actions/editapplication.php:194
msgid "Source URL is too long."
msgstr ""
-#: actions/editapplication.php:197 actions/newapplication.php:182
+#: actions/editapplication.php:200 actions/newapplication.php:185
#, fuzzy
msgid "Source URL is not valid."
msgstr "個人首é ä½å€éŒ¯èª¤"
-#: actions/editapplication.php:200 actions/newapplication.php:185
+#: actions/editapplication.php:203 actions/newapplication.php:188
msgid "Organization is required."
msgstr ""
-#: actions/editapplication.php:203 actions/newapplication.php:188
+#: actions/editapplication.php:206 actions/newapplication.php:191
#, fuzzy
msgid "Organization is too long (max 255 chars)."
msgstr "地點éŽé•·ï¼ˆå…±255個字)"
-#: actions/editapplication.php:206 actions/newapplication.php:191
+#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
msgstr ""
-#: actions/editapplication.php:215 actions/newapplication.php:203
+#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
msgstr ""
-#: actions/editapplication.php:222 actions/newapplication.php:212
+#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
msgstr ""
-#: actions/editapplication.php:255
+#: actions/editapplication.php:258
#, fuzzy
msgid "Could not update application."
msgstr "無法更新使用者"
@@ -1152,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 ""
@@ -1212,8 +1329,8 @@ msgid ""
msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
-#: actions/smssettings.php:126 lib/applicationeditform.php:333
-#: lib/applicationeditform.php:334
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
msgid "Cancel"
msgstr "å–消"
@@ -1294,7 +1411,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:157
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "此信箱無效"
@@ -1306,7 +1423,7 @@ msgstr ""
msgid "That email address already belongs to another user."
msgstr ""
-#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
msgstr "無法輸入確èªç¢¼"
@@ -1365,7 +1482,7 @@ msgstr ""
msgid "Disfavor favorite"
msgstr ""
-#: actions/favorited.php:65 lib/popularnoticesection.php:88
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
#, fuzzy
msgid "Popular notices"
@@ -1486,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
@@ -1515,7 +1650,7 @@ msgstr ""
msgid "User is not a member of group."
msgstr ""
-#: actions/groupblock.php:136 actions/groupmembers.php:314
+#: actions/groupblock.php:136 actions/groupmembers.php:323
#, fuzzy
msgid "Block user from group"
msgstr "無此使用者"
@@ -1551,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:442 lib/groupnav.php:107
+#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
msgstr ""
-#: actions/groupmembers.php:346 lib/blockform.php:69
+#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
msgstr ""
-#: actions/groupmembers.php:441
+#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
msgstr ""
-#: actions/groupmembers.php:473
+#: actions/groupmembers.php:482
msgid "Make Admin"
msgstr ""
-#: actions/groupmembers.php:473
+#: 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 ""
@@ -1796,6 +1937,11 @@ msgstr "確èªä¿¡å·²å¯„到你的線上å³æ™‚通信箱。%sé€çµ¦ä½ å¾—訊æ¯è¦å
msgid "That is not your Jabber ID."
msgstr ""
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
@@ -1872,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"
@@ -1916,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 ""
@@ -1925,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"
@@ -1946,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:460
-#: lib/logingroupnav.php:79
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
msgstr "登入"
@@ -1980,21 +2132,21 @@ msgid ""
"(%%action.register%%) a new account."
msgstr ""
-#: actions/makeadmin.php:91
+#: actions/makeadmin.php:92
msgid "Only an admin can make another user an admin."
msgstr ""
-#: actions/makeadmin.php:95
+#: actions/makeadmin.php:96
#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
msgstr ""
-#: actions/makeadmin.php:132
+#: actions/makeadmin.php:133
#, fuzzy, php-format
msgid "Can't get membership record for %1$s in group %2$s."
msgstr "無法從 %s 建立OpenID"
-#: actions/makeadmin.php:145
+#: actions/makeadmin.php:146
#, fuzzy, php-format
msgid "Can't make %1$s an admin for group %2$s."
msgstr "無法從 %s 建立OpenID"
@@ -2004,8 +2156,9 @@ msgid "No current status"
msgstr ""
#: actions/newapplication.php:52
-msgid "New application"
-msgstr ""
+#, fuzzy
+msgid "New Application"
+msgstr "無此通知"
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2015,11 +2168,11 @@ msgstr ""
msgid "Use this form to register a new application."
msgstr ""
-#: actions/newapplication.php:173
+#: actions/newapplication.php:176
msgid "Source URL is required."
msgstr ""
-#: actions/newapplication.php:255 actions/newapplication.php:264
+#: actions/newapplication.php:258 actions/newapplication.php:267
#, fuzzy
msgid "Could not create application."
msgstr "無法存å–個人圖åƒè³‡æ–™"
@@ -2145,29 +2298,29 @@ msgstr ""
msgid "You have not registered any applications yet."
msgstr ""
-#: actions/oauthconnectionssettings.php:71
+#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
msgstr ""
-#: actions/oauthconnectionssettings.php:87
+#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
-#: actions/oauthconnectionssettings.php:170
+#: actions/oauthconnectionssettings.php:175
#, fuzzy
msgid "You are not a user of that application."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: actions/oauthconnectionssettings.php:180
+#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
msgstr ""
-#: actions/oauthconnectionssettings.php:192
+#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
-#: actions/oauthconnectionssettings.php:205
+#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
@@ -2189,8 +2342,8 @@ msgstr "連çµ"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:1038
-#: lib/api.php:1066 lib/api.php:1176
+#: 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 ""
@@ -2260,6 +2413,11 @@ msgstr "新訊æ¯"
msgid "Login token expired."
msgstr ""
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr ""
+
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
@@ -2331,7 +2489,8 @@ msgstr "無法存å–新密碼"
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:326
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2339,138 +2498,153 @@ msgstr ""
msgid "Path and server settings for this StatusNet site."
msgstr ""
-#: actions/pathsadminpanel.php:140
+#: actions/pathsadminpanel.php:157
#, fuzzy, php-format
msgid "Theme directory not readable: %s"
msgstr "個人首é ä½å€éŒ¯èª¤"
-#: actions/pathsadminpanel.php:146
+#: actions/pathsadminpanel.php:163
#, php-format
msgid "Avatar directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:152
+#: actions/pathsadminpanel.php:169
#, php-format
msgid "Background directory not writable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:160
+#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
msgstr ""
-#: actions/pathsadminpanel.php:166
+#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
msgstr ""
-#: actions/pathsadminpanel.php:217 actions/siteadminpanel.php:58
-#: lib/adminpanelaction.php:311
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
msgid "Site"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr ""
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
msgid "Path"
msgstr ""
-#: actions/pathsadminpanel.php:221
+#: actions/pathsadminpanel.php:242
#, fuzzy
msgid "Site path"
msgstr "新訊æ¯"
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:225
+#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
msgstr ""
-#: actions/pathsadminpanel.php:232
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
msgid "Theme"
msgstr ""
-#: actions/pathsadminpanel.php:237
+#: actions/pathsadminpanel.php:264
msgid "Theme server"
msgstr ""
-#: actions/pathsadminpanel.php:241
+#: actions/pathsadminpanel.php:268
msgid "Theme path"
msgstr ""
-#: actions/pathsadminpanel.php:245
+#: actions/pathsadminpanel.php:272
msgid "Theme directory"
msgstr ""
-#: actions/pathsadminpanel.php:252
+#: actions/pathsadminpanel.php:279
#, fuzzy
msgid "Avatars"
msgstr "個人圖åƒ"
-#: actions/pathsadminpanel.php:257
+#: actions/pathsadminpanel.php:284
#, fuzzy
msgid "Avatar server"
msgstr "線上å³æ™‚通設定"
-#: actions/pathsadminpanel.php:261
+#: actions/pathsadminpanel.php:288
#, fuzzy
msgid "Avatar path"
msgstr "更新個人圖åƒ"
-#: actions/pathsadminpanel.php:265
+#: actions/pathsadminpanel.php:292
#, fuzzy
msgid "Avatar directory"
msgstr "更新個人圖åƒ"
-#: actions/pathsadminpanel.php:274
+#: actions/pathsadminpanel.php:301
msgid "Backgrounds"
msgstr ""
-#: actions/pathsadminpanel.php:278
+#: actions/pathsadminpanel.php:305
msgid "Background server"
msgstr ""
-#: actions/pathsadminpanel.php:282
+#: actions/pathsadminpanel.php:309
msgid "Background path"
msgstr ""
-#: actions/pathsadminpanel.php:286
+#: actions/pathsadminpanel.php:313
msgid "Background directory"
msgstr ""
-#: actions/pathsadminpanel.php:293
+#: actions/pathsadminpanel.php:320
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:296 actions/siteadminpanel.php:346
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
-#: actions/pathsadminpanel.php:297
+#: actions/pathsadminpanel.php:324
msgid "Sometimes"
msgstr ""
-#: actions/pathsadminpanel.php:298
+#: actions/pathsadminpanel.php:325
msgid "Always"
msgstr ""
-#: actions/pathsadminpanel.php:302
+#: actions/pathsadminpanel.php:329
msgid "Use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:303
+#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
msgstr ""
-#: actions/pathsadminpanel.php:308
+#: actions/pathsadminpanel.php:335
#, fuzzy
msgid "SSL server"
msgstr "線上å³æ™‚通設定"
-#: actions/pathsadminpanel.php:309
+#: actions/pathsadminpanel.php:336
msgid "Server to direct SSL requests to"
msgstr ""
-#: actions/pathsadminpanel.php:325
+#: actions/pathsadminpanel.php:352
#, fuzzy
msgid "Save paths"
msgstr "新訊æ¯"
@@ -2496,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 ""
@@ -2523,13 +2697,13 @@ 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 "å…¨å"
#: actions/profilesettings.php:115 actions/register.php:453
-#: lib/applicationeditform.php:230 lib/groupeditform.php:161
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
msgid "Homepage"
msgstr "個人首é "
@@ -2552,8 +2726,8 @@ msgid "Bio"
msgstr "自我介紹"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:256 actions/tagother.php:112
-#: actions/userauthorization.php:158 lib/groupeditform.php:177
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
#: lib/userprofile.php:164
msgid "Location"
msgstr "地點"
@@ -2577,7 +2751,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:294
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2603,7 +2777,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "自我介紹éŽé•·(å…±140個字元)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:164
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2616,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 ""
@@ -2647,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:151
+#: actions/public.php:160
msgid "Public Stream Feed (RSS 1.0)"
msgstr ""
-#: actions/public.php:155
+#: actions/public.php:164
msgid "Public Stream Feed (RSS 2.0)"
msgstr ""
-#: actions/public.php:159
+#: actions/public.php:168
#, fuzzy
msgid "Public Stream Feed (Atom)"
msgstr "%s的公開內容"
-#: actions/public.php:179
+#: 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:182
+#: actions/public.php:191
msgid "Be the first to post!"
msgstr ""
-#: actions/public.php:186
+#: actions/public.php:195
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
-#: actions/public.php:233
+#: actions/public.php:242
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2695,7 +2870,7 @@ msgid ""
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
-#: actions/public.php:238
+#: actions/public.php:247
#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
@@ -2728,7 +2903,7 @@ msgid ""
"one!"
msgstr ""
-#: actions/publictagcloud.php:131
+#: actions/publictagcloud.php:134
msgid "Tag cloud"
msgstr ""
@@ -2865,8 +3040,7 @@ msgstr "確èªç¢¼ç™¼ç”ŸéŒ¯èª¤"
msgid "Registration successful"
msgstr ""
-#: actions/register.php:114 actions/register.php:503 lib/action.php:457
-#: lib/logingroupnav.php:85
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
msgid "Register"
msgstr ""
@@ -2905,7 +3079,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:270 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "é›»å­ä¿¡ç®±"
@@ -2990,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 ""
@@ -3029,7 +3203,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "無此使用者"
-#: actions/repeat.php:114 lib/noticelist.php:629
+#: actions/repeat.php:114 lib/noticelist.php:674
#, fuzzy
msgid "Repeated"
msgstr "新增"
@@ -3039,42 +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:144
+#: actions/replies.php:128
+#, fuzzy, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "&s的微型部è½æ ¼"
+
+#: 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 "
@@ -3086,6 +3265,20 @@ 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"
+msgstr "更新個人圖åƒ"
+
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
@@ -3095,116 +3288,157 @@ 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:390
+msgid "Sessions"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr ""
+
+#: 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
+#, fuzzy
+msgid "Save site settings"
+msgstr "線上å³æ™‚通設定"
+
#: actions/showapplication.php:82
msgid "You must be logged in to view an application."
msgstr ""
-#: actions/showapplication.php:158
+#: actions/showapplication.php:157
msgid "Application profile"
msgstr ""
-#: actions/showapplication.php:160 lib/applicationeditform.php:182
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
msgstr ""
-#: actions/showapplication.php:170 actions/version.php:195
-#: lib/applicationeditform.php:197
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
#, fuzzy
msgid "Name"
msgstr "暱稱"
-#: actions/showapplication.php:179 lib/applicationeditform.php:224
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
#, fuzzy
msgid "Organization"
msgstr "地點"
-#: actions/showapplication.php:188 actions/version.php:198
-#: lib/applicationeditform.php:211 lib/groupeditform.php:172
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
#, fuzzy
msgid "Description"
msgstr "所有訂閱"
-#: actions/showapplication.php:193 actions/showgroup.php:429
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
-#: actions/showapplication.php:204
+#: actions/showapplication.php:203
#, php-format
-msgid "created by %1$s - %2$s access by default - %3$d users"
+msgid "Created by %1$s - %2$s access by default - %3$d users"
msgstr ""
-#: actions/showapplication.php:214
+#: actions/showapplication.php:213
msgid "Application actions"
msgstr ""
-#: actions/showapplication.php:233
+#: actions/showapplication.php:236
msgid "Reset key & secret"
msgstr ""
-#: actions/showapplication.php:241
+#: actions/showapplication.php:261
msgid "Application info"
msgstr ""
-#: actions/showapplication.php:243
+#: actions/showapplication.php:263
msgid "Consumer key"
msgstr ""
-#: actions/showapplication.php:248
+#: actions/showapplication.php:268
msgid "Consumer secret"
msgstr ""
-#: actions/showapplication.php:253
+#: actions/showapplication.php:273
msgid "Request token URL"
msgstr ""
-#: actions/showapplication.php:258
+#: actions/showapplication.php:278
msgid "Access token URL"
msgstr ""
-#: actions/showapplication.php:263
+#: actions/showapplication.php:283
msgid "Authorize URL"
msgstr ""
-#: actions/showapplication.php:268
+#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, fuzzy, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr "%s與好å‹"
+
#: actions/showfavorites.php:132
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 "
@@ -3212,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 ""
@@ -3221,70 +3455,75 @@ msgstr ""
msgid "%s group"
msgstr ""
-#: actions/showgroup.php:218
+#: actions/showgroup.php:84
+#, fuzzy, php-format
+msgid "%1$s group, page %2$d"
+msgstr "所有訂閱"
+
+#: actions/showgroup.php:226
#, fuzzy
msgid "Group profile"
msgstr "無此通知"
-#: actions/showgroup.php:263 actions/tagother.php:118
-#: actions/userauthorization.php:167 lib/userprofile.php:177
+#: 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/userauthorization.php:179 lib/userprofile.php:194
+#: 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."
@@ -3294,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."
@@ -3303,7 +3542,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:482
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3335,6 +3574,11 @@ msgstr "更新個人圖åƒ"
msgid " tagged %s"
msgstr ""
+#: actions/showstream.php:79
+#, fuzzy, php-format
+msgid "%1$s, page %2$d"
+msgstr "%s與好å‹"
+
#: actions/showstream.php:122
#, fuzzy, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
@@ -3360,25 +3604,25 @@ msgstr ""
msgid "FOAF for %s"
msgstr ""
-#: actions/showstream.php:191
+#: 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:196
+#: 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:198
+#: 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:234
+#: actions/showstream.php:243
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3387,7 +3631,7 @@ msgid ""
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showstream.php:239
+#: actions/showstream.php:248
#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3395,7 +3639,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. "
msgstr ""
-#: actions/showstream.php:313
+#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
msgstr ""
@@ -3409,204 +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:146
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:154
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "此信箱無效"
-#: actions/siteadminpanel.php:172
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
-#: actions/siteadminpanel.php:179
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:185
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:191
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:197
+#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:203
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:256
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:261
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:262
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:266
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:267
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:271
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "查無此使用者所註冊的信箱"
-#: actions/siteadminpanel.php:277
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "地點"
-#: actions/siteadminpanel.php:288
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:289
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:303
-msgid "URLs"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Server"
-msgstr ""
-
-#: actions/siteadminpanel.php:306
-msgid "Site's server hostname."
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:310
-msgid "Fancy URLs"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:312
-msgid "Use fancy (more readable and memorable) URLs?"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:318
-#, fuzzy
-msgid "Access"
-msgstr "接å—"
-
-#: actions/siteadminpanel.php:321
-msgid "Private"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:323
-msgid "Prohibit anonymous users (not logged in) from viewing site?"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:327
-msgid "Invite only"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:329
-msgid "Make registration invitation only."
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:333
+#: actions/sitenoticeadminpanel.php:56
#, fuzzy
-msgid "Closed"
-msgstr "無此使用者"
-
-#: actions/siteadminpanel.php:335
-msgid "Disable new registrations."
-msgstr ""
-
-#: actions/siteadminpanel.php:341
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:344
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:345
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:347
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:348
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:353
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:354
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:359
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:360
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgid "Site Notice"
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:367
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:370
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:370
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:374
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新訊æ¯"
-#: actions/siteadminpanel.php:374
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:388 actions/useradminpanel.php:313
+#: actions/sitenoticeadminpanel.php:198
#, fuzzy
-msgid "Save site settings"
-msgstr "線上å³æ™‚通設定"
+msgid "Save site notice"
+msgstr "新訊æ¯"
#: actions/smssettings.php:58
#, fuzzy
@@ -3703,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 "此帳號已註冊"
@@ -3778,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 "
@@ -3788,31 +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:86
+#: actions/tag.php:69
+#, fuzzy, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr "&s的微型部è½æ ¼"
+
+#: 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 ""
@@ -3832,7 +4083,8 @@ msgstr ""
msgid "User profile"
msgstr "無此通知"
-#: actions/tagother.php:81 lib/userprofile.php:102
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
msgid "Photo"
msgstr ""
@@ -3865,7 +4117,7 @@ msgstr ""
msgid "No such tag."
msgstr "無此通知"
-#: actions/twitapitrends.php:87
+#: actions/twitapitrends.php:85
msgid "API method under construction."
msgstr ""
@@ -3892,18 +4144,19 @@ msgstr "無確èªè«‹æ±‚"
msgid "Unsubscribed"
msgstr "此帳號已註冊"
-#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#: 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 ""
@@ -3967,26 +4220,6 @@ msgstr ""
msgid "Whether to allow users to invite new users."
msgstr ""
-#: actions/useradminpanel.php:265
-msgid "Sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:270
-msgid "Handle sessions"
-msgstr ""
-
-#: actions/useradminpanel.php:272
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
-#: actions/useradminpanel.php:276
-msgid "Session debugging"
-msgstr ""
-
-#: actions/useradminpanel.php:278
-msgid "Turn on debugging output for sessions."
-msgstr ""
-
#: actions/userauthorization.php:105
msgid "Authorize subscription"
msgstr "註冊確èª"
@@ -3998,85 +4231,85 @@ msgid ""
"click “Rejectâ€."
msgstr ""
-#: actions/userauthorization.php:188 actions/version.php:165
+#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
msgstr ""
-#: actions/userauthorization.php:209
+#: actions/userauthorization.php:217
msgid "Accept"
msgstr "接å—"
-#: actions/userauthorization.php:210 lib/subscribeform.php:115
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
msgstr ""
-#: actions/userauthorization.php:211
+#: actions/userauthorization.php:219
msgid "Reject"
msgstr ""
-#: actions/userauthorization.php:212
+#: actions/userauthorization.php:220
#, fuzzy
msgid "Reject this subscription"
msgstr "所有訂閱"
-#: actions/userauthorization.php:225
+#: actions/userauthorization.php:232
msgid "No authorization request!"
msgstr "無確èªè«‹æ±‚"
-#: actions/userauthorization.php:247
+#: actions/userauthorization.php:254
msgid "Subscription authorized"
msgstr ""
-#: actions/userauthorization.php:249
+#: actions/userauthorization.php:256
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-#: actions/userauthorization.php:259
+#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr ""
-#: actions/userauthorization.php:261
+#: actions/userauthorization.php:268
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-#: actions/userauthorization.php:296
+#: actions/userauthorization.php:303
#, php-format
msgid "Listener URI ‘%s’ not found here."
msgstr ""
-#: actions/userauthorization.php:301
+#: actions/userauthorization.php:308
#, php-format
msgid "Listenee URI ‘%s’ is too long."
msgstr ""
-#: actions/userauthorization.php:307
+#: actions/userauthorization.php:314
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
msgstr ""
-#: actions/userauthorization.php:322
+#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
msgstr ""
-#: actions/userauthorization.php:338
+#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
msgstr ""
-#: actions/userauthorization.php:343
+#: actions/userauthorization.php:350
#, fuzzy, php-format
msgid "Can’t read avatar URL ‘%s’."
msgstr "無法讀å–æ­¤%sURL的圖åƒ"
-#: actions/userauthorization.php:348
+#: actions/userauthorization.php:355
#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
msgstr ""
@@ -4095,20 +4328,31 @@ msgstr ""
msgid "Enjoy your hotdog!"
msgstr ""
+#: actions/usergroups.php:64
+#, fuzzy, php-format
+msgid "%1$s groups, page %2$d"
+msgstr "所有訂閱"
+
#: actions/usergroups.php:130
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"
@@ -4121,11 +4365,6 @@ msgid ""
"Inc. and contributors."
msgstr ""
-#: actions/version.php:157
-#, fuzzy
-msgid "StatusNet"
-msgstr "更新個人圖åƒ"
-
#: actions/version.php:161
msgid "Contributors"
msgstr ""
@@ -4157,7 +4396,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:741
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "地點"
@@ -4198,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"
@@ -4215,65 +4459,106 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:171
+#: classes/Notice.php:172
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:225
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:229
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:234
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:240
+#: 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:246
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:305 classes/Notice.php:330
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:1059
-#, php-format
-msgid "DB error inserting reply: %s"
-msgstr "增加回覆時,資料庫發生錯誤: %s"
+#: classes/Notice.php:927
+#, fuzzy
+msgid "Problem saving group inbox."
+msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:1441
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
-#: classes/User.php:382
+#: 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 ""
@@ -4313,129 +4598,183 @@ msgstr "%1$s的狀態是%2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:427
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
-#: lib/action.php:433
-msgid "Home"
-msgstr "主é "
-
-#: lib/action.php:433
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
+#: 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:438
-msgid "Connect"
-msgstr "連çµ"
+msgstr "更改密碼"
-#: lib/action.php:438
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/action.php:442
+#: lib/action.php:443
+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:446 lib/subgroupnav.php:105
-msgid "Invite"
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
msgstr ""
-#: lib/action.php:447 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:452
-msgid "Logout"
-msgstr "登出"
+#: lib/action.php:456
+#, fuzzy
+msgctxt "MENU"
+msgid "Invite"
+msgstr "尺寸錯誤"
-#: lib/action.php:452
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:457
+#: 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:460
+#: 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:463 lib/action.php:726
-msgid "Help"
-msgstr "求救"
+#: lib/action.php:479
+#, fuzzy
+msgctxt "MENU"
+msgid "Login"
+msgstr "登入"
-#: lib/action.php:463
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
#, fuzzy
+msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "求救"
-#: lib/action.php:466 lib/searchaction.php:127
-msgid "Search"
-msgstr ""
+#: lib/action.php:485
+#, fuzzy
+msgctxt "MENU"
+msgid "Help"
+msgstr "求救"
-#: lib/action.php:466
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:487
+#: 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:553
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:619
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新訊æ¯"
-#: lib/action.php:721
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:728
+#: lib/action.php:752
+msgid "Help"
+msgstr "求救"
+
+#: lib/action.php:754
msgid "About"
msgstr "關於"
-#: lib/action.php:730
+#: lib/action.php:756
msgid "FAQ"
msgstr "常見å•é¡Œ"
-#: lib/action.php:734
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:737
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:739
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:743
+#: lib/action.php:769
msgid "Contact"
msgstr "好å‹åå–®"
-#: lib/action.php:745
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:773
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4444,12 +4783,12 @@ msgstr ""
"**%%site.name%%**是由[%%site.broughtby%%](%%site.broughtbyurl%%)所æ供的微型"
"部è½æ ¼æœå‹™"
-#: lib/action.php:778
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%**是個微型部è½æ ¼"
-#: lib/action.php:780
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4457,136 +4796,218 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:795
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "新訊æ¯"
-#: lib/action.php:800
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:805
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:808
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:820
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:825
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1124
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1133
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1141
+#: 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 lib/adminpanelaction.php:327
+#. 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 "確èªä¿¡ç®±"
+
+#. 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 "確èªä¿¡ç®±"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "確èªä¿¡ç®±"
-#: lib/applicationeditform.php:186
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+#, fuzzy
+msgid "Sessions configuration"
+msgstr "確èªä¿¡ç®±"
+
+#. 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: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 ""
+
+#: lib/applicationeditform.php:184
msgid "Icon for this application"
msgstr ""
-#: lib/applicationeditform.php:206
+#: lib/applicationeditform.php:204
#, fuzzy, php-format
msgid "Describe your application in %d characters"
msgstr "請在140個字以內æ述你自己與你的興趣"
-#: lib/applicationeditform.php:209
+#: lib/applicationeditform.php:207
#, fuzzy
msgid "Describe your application"
msgstr "請在140個字以內æ述你自己與你的興趣"
-#: lib/applicationeditform.php:218
+#: lib/applicationeditform.php:216
msgid "Source URL"
msgstr ""
-#: lib/applicationeditform.php:220
+#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
msgstr ""
-#: lib/applicationeditform.php:226
+#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
-#: lib/applicationeditform.php:232
+#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
msgstr ""
-#: lib/applicationeditform.php:238
+#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
msgstr ""
-#: lib/applicationeditform.php:260
+#: lib/applicationeditform.php:258
msgid "Browser"
msgstr ""
-#: lib/applicationeditform.php:276
+#: lib/applicationeditform.php:274
msgid "Desktop"
msgstr ""
-#: lib/applicationeditform.php:277
+#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
msgstr ""
-#: lib/applicationeditform.php:299
+#: lib/applicationeditform.php:297
msgid "Read-only"
msgstr ""
-#: lib/applicationeditform.php:317
+#: lib/applicationeditform.php:315
msgid "Read-write"
msgstr ""
-#: lib/applicationeditform.php:318
+#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
@@ -4614,11 +5035,11 @@ msgstr ""
msgid "Tags for this attachment"
msgstr ""
-#: lib/authenticationplugin.php:214 lib/authenticationplugin.php:219
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
msgid "Password changing failed"
msgstr ""
-#: lib/authenticationplugin.php:229
+#: lib/authenticationplugin.php:235
msgid "Password changing is not allowed"
msgstr ""
@@ -4771,80 +5192,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"
@@ -4858,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"
@@ -4885,20 +5317,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:131
+#: lib/common.php:148
#, fuzzy
msgid "No configuration file found. "
msgstr "無確èªç¢¼"
-#: lib/common.php:132
+#: lib/common.php:149
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:134
+#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:135
+#: lib/common.php:152
msgid "Go to the installer."
msgstr ""
@@ -4998,6 +5430,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 ""
@@ -5090,33 +5527,33 @@ 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 ""
-#: lib/jabber.php:202
+#: lib/jabber.php:220
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:385
+#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5321,7 +5758,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 ""
@@ -5412,6 +5849,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"
@@ -5446,50 +5888,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:531
+#: lib/noticelist.php:566
#, fuzzy
msgid "in context"
msgstr "無內容"
-#: lib/noticelist.php:556
+#: lib/noticelist.php:601
#, fuzzy
msgid "Repeated by"
msgstr "新增"
-#: lib/noticelist.php:585
+#: lib/noticelist.php:628
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:586
+#: lib/noticelist.php:629
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:673
#, fuzzy
msgid "Notice repeated"
msgstr "更新個人圖åƒ"
@@ -5523,11 +5965,7 @@ msgstr "新增外部個人資料發生錯誤(Error inserting remote profile)"
msgid "Duplicate notice"
msgstr "新訊æ¯"
-#: lib/oauthstore.php:466 lib/subs.php:48
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#: lib/oauthstore.php:491
+#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
msgstr "無法新增訂閱"
@@ -5543,19 +5981,19 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:124
+#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
-#: lib/personalgroupnav.php:125
+#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
msgstr ""
-#: lib/personalgroupnav.php:129
+#: lib/personalgroupnav.php:130
msgid "Outbox"
msgstr ""
-#: lib/personalgroupnav.php:130
+#: lib/personalgroupnav.php:131
msgid "Your sent messages"
msgstr ""
@@ -5568,7 +6006,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 ""
@@ -5576,24 +6014,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 ""
@@ -5636,6 +6074,15 @@ msgstr "無此通知"
msgid "Repeat this notice"
msgstr "無此通知"
+#: 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 ""
+
#: lib/sandboxform.php:67
msgid "Sandbox"
msgstr ""
@@ -5653,6 +6100,10 @@ msgstr ""
msgid "Keyword(s)"
msgstr ""
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
#: lib/searchaction.php:162
msgid "Search help"
msgstr ""
@@ -5706,36 +6157,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"
@@ -5789,68 +6219,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:875
+#: 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:877
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:879
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:881
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:883
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:885
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:887
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:889
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:891
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:893
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
@@ -5864,7 +6309,7 @@ msgstr "個人首é ä½å€éŒ¯èª¤"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: scripts/xmppdaemon.php:301
+#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/plugins/Adsense/AdsensePlugin.php b/plugins/Adsense/AdsensePlugin.php
new file mode 100644
index 000000000..ab2b9a6fb
--- /dev/null
+++ b/plugins/Adsense/AdsensePlugin.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin for Google Adsense
+ *
+ * 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 Ads
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Plugin to add Google Adsense to StatusNet sites
+ *
+ * This plugin lets you add Adsense ad units to your StatusNet site.
+ *
+ * We support the 4 ad sizes for the Universal Ad Platform (UAP):
+ *
+ * Medium Rectangle
+ * (Small) Rectangle
+ * Leaderboard
+ * Wide Skyscraper
+ *
+ * They fit in different places on the default theme. Some themes
+ * might interact quite poorly with this plugin.
+ *
+ * To enable advertising, you must sign up with Google Adsense and
+ * get a client ID.
+ *
+ * https://www.google.com/adsense/
+ *
+ * You'll also need to create an Adsense for Content unit in one
+ * of the four sizes described above. At the end of the process,
+ * note the "google_ad_client" and "google_ad_slot" values in the
+ * resultant Javascript.
+ *
+ * Add the plugin to config.php like so:
+ *
+ * addPlugin('Adsense', array('client' => 'Your client ID',
+ * 'rectangle' => 'slot'));
+ *
+ * Here, your client ID is the value of google_ad_client and the
+ * slot is the value of google_ad_slot. Note that if you create
+ * a different size, you'll need to provide different arguments:
+ * 'mediumRectangle', 'leaderboard', or 'wideSkyscraper'.
+ *
+ * If for some reason your ad server is different from the default,
+ * use the 'adScript' parameter to set the full path to the ad script.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @seeAlso UAPPlugin
+ */
+
+class AdsensePlugin extends UAPPlugin
+{
+ public $adScript = 'http://pagead2.googlesyndication.com/pagead/show_ads.js';
+ public $client = null;
+
+ /**
+ * Show a medium rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showMediumRectangle($action)
+ {
+ $this->showAdsenseCode($action, 300, 250, $this->mediumRectangle);
+ }
+
+ /**
+ * Show a rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showRectangle($action)
+ {
+ $this->showAdsenseCode($action, 180, 150, $this->rectangle);
+ }
+
+ /**
+ * Show a wide skyscraper ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showWideSkyscraper($action)
+ {
+ $this->showAdsenseCode($action, 160, 600, $this->wideSkyscraper);
+ }
+
+ /**
+ * Show a leaderboard ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showLeaderboard($action)
+ {
+ $this->showAdsenseCode($action, 728, 90, $this->leaderboard);
+ }
+
+ /**
+ * Output the bits of JavaScript code to show Adsense
+ *
+ * @param Action $action Action being shown
+ * @param integer $width Width of the block
+ * @param integer $height Height of the block
+ * @param string $slot Slot identifier
+ *
+ * @return void
+ */
+
+ protected function showAdsenseCode($action, $width, $height, $slot)
+ {
+ $code = 'google_ad_client = "'.$this->client.'"; ';
+ $code .= 'google_ad_slot = "'.$slot.'"; ';
+ $code .= 'google_ad_width = '.$width.'; ';
+ $code .= 'google_ad_height = '.$height.'; ';
+
+ $action->inlineScript($code);
+
+ $action->script($this->adScript);
+ }
+} \ No newline at end of file
diff --git a/plugins/Autocomplete/jquery-autocomplete/indicator.gif b/plugins/Autocomplete/jquery-autocomplete/indicator.gif
new file mode 100644
index 000000000..d0bce1542
--- /dev/null
+++ b/plugins/Autocomplete/jquery-autocomplete/indicator.gif
Binary files differ
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/BlankAd/BlankAdPlugin.php b/plugins/BlankAd/BlankAdPlugin.php
new file mode 100644
index 000000000..0e2719aed
--- /dev/null
+++ b/plugins/BlankAd/BlankAdPlugin.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin for testing ad layout
+ *
+ * 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 Ads
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Plugin for testing ad layout
+ *
+ * This plugin uses the UAPPlugin framework to output ad content. However,
+ * its ad content is just images with one red pixel stretched to the
+ * right size. It's mostly useful for debugging theme layout.
+ *
+ * To use this plugin, set the parameter for the ad size you want to use
+ * to true (or anything non-null). For example, to make a leaderboard:
+ *
+ * addPlugin('BlankAd', array('leaderboard' => true));
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @seeAlso Location
+ */
+
+class BlankAdPlugin extends UAPPlugin
+{
+ /**
+ * Show a medium rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showMediumRectangle($action)
+ {
+ $action->element('img',
+ array('width' => 300,
+ 'height' => 250,
+ 'src' => common_path('plugins/BlankAd/redpixel.png')),
+ '');
+ }
+
+ /**
+ * Show a rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showRectangle($action)
+ {
+ $action->element('img',
+ array('width' => 180,
+ 'height' => 150,
+ 'src' => common_path('plugins/BlankAd/redpixel.png')),
+ '');
+ }
+
+ /**
+ * Show a wide skyscraper ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showWideSkyscraper($action)
+ {
+ $action->element('img',
+ array('width' => 160,
+ 'height' => 600,
+ 'src' => common_path('plugins/BlankAd/redpixel.png')),
+ '');
+ }
+
+ /**
+ * Show a leaderboard ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showLeaderboard($action)
+ {
+ $action->element('img',
+ array('width' => 728,
+ 'height' => 90,
+ 'src' => common_path('plugins/BlankAd/redpixel.png')),
+ '');
+ }
+} \ No newline at end of file
diff --git a/plugins/BlankAd/redpixel.png b/plugins/BlankAd/redpixel.png
new file mode 100644
index 000000000..26299a552
--- /dev/null
+++ b/plugins/BlankAd/redpixel.png
Binary files differ
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/Comet/CometPlugin.php b/plugins/Comet/CometPlugin.php
index 300d1e9a2..29cb3004b 100644
--- a/plugins/Comet/CometPlugin.php
+++ b/plugins/Comet/CometPlugin.php
@@ -68,7 +68,7 @@ class CometPlugin extends RealtimePlugin
$ours = array('jquery.comet.js', 'cometupdate.js');
foreach ($ours as $script) {
- $scripts[] = common_path('plugins/Comet/'.$script);
+ $scripts[] = 'plugins/Comet/'.$script;
}
return $scripts;
diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php
index 4266b886d..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
*
@@ -181,7 +261,7 @@ class FacebookPlugin extends Plugin
if ($this->reqFbScripts($action)) {
$apikey = common_config('facebook', 'apikey');
- $plugin_path = common_path('plugins/Facebook');
+ $plugin_path = 'plugins/Facebook';
$login_url = common_local_url('FBConnectAuth');
$logout_url = common_local_url('logout');
@@ -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/facebookaction.php b/plugins/Facebook/facebookaction.php
index bf9c037a5..f65b97c86 100644
--- a/plugins/Facebook/facebookaction.php
+++ b/plugins/Facebook/facebookaction.php
@@ -89,7 +89,7 @@ class FacebookAction extends Action
function showScripts()
{
- $this->script('js/facebookapp.js');
+ $this->script('plugins/Facebook/facebookapp.js');
}
/**
@@ -397,8 +397,6 @@ class FacebookAction extends Action
return;
}
- common_broadcast_notice($notice);
-
}
}
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/js/facebookapp.js b/plugins/Facebook/facebookapp.js
index 5deb6e42b..5deb6e42b 100644
--- a/js/facebookapp.js
+++ b/plugins/Facebook/facebookapp.js
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/FeedSub/FeedSubPlugin.php b/plugins/FeedSub/FeedSubPlugin.php
deleted file mode 100644
index e49e2a648..000000000
--- a/plugins/FeedSub/FeedSubPlugin.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/*
-StatusNet Plugin: 0.9
-Plugin Name: FeedSub
-Plugin URI: http://status.net/wiki/Feed_subscription
-Description: FeedSub allows subscribing to real-time updates from external feeds supporting PubHubSubbub protocol.
-Version: 0.1
-Author: Brion Vibber <brion@status.net>
-Author URI: http://status.net/
-*/
-
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-define('FEEDSUB_SERVICE', 100); // fixme -- avoid hardcoding these?
-
-// We bundle the XML_Parse_Feed library...
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib');
-
-class FeedSubException extends Exception
-{
-}
-
-class FeedSubPlugin extends Plugin
-{
- /**
- * Hook for RouterInitialized event.
- *
- * @param Net_URL_Mapper $m path-to-action mapper
- * @return boolean hook return
- */
- function onRouterInitialized($m)
- {
- $m->connect('feedsub/callback/:feed',
- array('action' => 'feedsubcallback'),
- array('feed' => '[0-9]+'));
- $m->connect('settings/feedsub',
- array('action' => 'feedsubsettings'));
- return true;
- }
-
- /**
- * Add the feed settings page to the Connect Settings menu
- *
- * @param Action &$action The calling page
- *
- * @return boolean hook return
- */
- function onEndConnectSettingsNav(&$action)
- {
- $action_name = $action->trimmed('action');
-
- $action->menuItem(common_local_url('feedsubsettings'),
- _m('Feeds'),
- _m('Feed subscription options'),
- $action_name === 'feedsubsettings');
-
- return true;
- }
-
- /**
- * Automatically load the actions and libraries used by the plugin
- *
- * @param Class $cls the class
- *
- * @return boolean hook return
- *
- */
- function onAutoload($cls)
- {
- $base = dirname(__FILE__);
- $lower = strtolower($cls);
- $files = array("$base/$lower.php");
- if (substr($lower, -6) == 'action') {
- $files[] = "$base/actions/" . substr($lower, 0, -6) . ".php";
- }
- foreach ($files as $file) {
- if (file_exists($file)) {
- include_once $file;
- return false;
- }
- }
- return true;
- }
-
- function onCheckSchema() {
- // warning: the autoincrement doesn't seem to set.
- // alter table feedinfo change column id id int(11) not null auto_increment;
- $schema = Schema::get();
- $schema->ensureTable('feedinfo', Feedinfo::schemaDef());
- return true;
- }
-}
diff --git a/plugins/FeedSub/README b/plugins/FeedSub/README
deleted file mode 100644
index cbf3adbb9..000000000
--- a/plugins/FeedSub/README
+++ /dev/null
@@ -1,24 +0,0 @@
-Plugin to support importing updates from external RSS and Atom feeds into your timeline.
-
-Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
-
-Todo:
-* set feed icon avatar for actual profiles as well as for preview
-* use channel image and/or favicon for avatar?
-* garbage-collect subscriptions that are no longer being used
-* administrative way to kill feeds?
-* functional l10n
-* clean up subscription form look and workflow
-* use ajax for test/preview in subscription form
-* rssCloud support? (Does anything use it that doesn't support PuSH as well?)
-* possibly a polling daemon to support non-PuSH feeds?
-* likely problems with multiple feeds from the same site, such as category feeds on a blog
- (currently each feed would publish a separate notice on a separate profile, but pointing to the same post URI.)
- (could use the local URI I guess, but that's so icky!)
-* problems with Atom feeds that list <link rel="alternate" href="..."/> but don't have the type
- (such as http://atomgen.appspot.com/feed/5 demo feed); currently it's not recognized and we end up with the feed's master URI
-* make it easier to see what you're subscribed to and unsub from things
-* saner treatment of fullname/nickname?
-* make use of tags/categories from feeds
-* update feed profile data when it changes
-* XML_Feed_Parser has major problems with category and link tags; consider replacing?
diff --git a/plugins/FeedSub/actions/feedsubcallback.php b/plugins/FeedSub/actions/feedsubcallback.php
deleted file mode 100644
index 0c4280c1f..000000000
--- a/plugins/FeedSub/actions/feedsubcallback.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-
-class FeedSubCallbackAction extends Action
-{
- function handle()
- {
- parent::handle();
- if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- $this->handlePost();
- } else {
- $this->handleGet();
- }
- }
-
- /**
- * Handler for POST content updates from the hub
- */
- function handlePost()
- {
- $feedid = $this->arg('feed');
- common_log(LOG_INFO, "POST for feed id $feedid");
- if (!$feedid) {
- throw new ServerException('Empty or invalid feed id', 400);
- }
-
- $feedinfo = Feedinfo::staticGet('id', $feedid);
- if (!$feedinfo) {
- throw new ServerException('Unknown feed id ' . $feedid, 400);
- }
-
- $post = file_get_contents('php://input');
- $feedinfo->postUpdates($post);
- }
-
- /**
- * Handler for GET verification requests from the hub
- */
- function handleGet()
- {
- $mode = $this->arg('hub_mode');
- $topic = $this->arg('hub_topic');
- $challenge = $this->arg('hub_challenge');
- $lease_seconds = $this->arg('hub_lease_seconds');
- $verify_token = $this->arg('hub_verify_token');
-
- if ($mode != 'subscribe' && $mode != 'unsubscribe') {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with mode \"$mode\"");
- throw new ServerException("Bogus hub callback: bad mode", 404);
- }
-
- $feedinfo = Feedinfo::staticGet('feeduri', $topic);
- if (!$feedinfo) {
- common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback for unknown feed $topic");
- throw new ServerException("Bogus hub callback: unknown feed", 404);
- }
-
- # Can't currently set the token in our sub api
- #if ($feedinfo->verify_token !== $verify_token) {
- # common_log(LOG_WARNING, __METHOD__ . ": bogus hub callback with bad token \"$verify_token\" for feed $topic");
- # throw new ServerError("Bogus hub callback: bad token", 404);
- #}
-
- // OK!
- common_log(LOG_INFO, __METHOD__ . ': sub confirmed');
- $feedinfo->sub_start = common_sql_date(time());
- if ($lease_seconds > 0) {
- $feedinfo->sub_end = common_sql_date(time() + $lease_seconds);
- } else {
- $feedinfo->sub_end = null;
- }
- $feedinfo->update();
-
- print $challenge;
- }
-}
diff --git a/plugins/FeedSub/actions/feedsubsettings.php b/plugins/FeedSub/actions/feedsubsettings.php
deleted file mode 100644
index 0fba20a39..000000000
--- a/plugins/FeedSub/actions/feedsubsettings.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-class FeedSubSettingsAction extends ConnectSettingsAction
-{
- protected $feedurl;
- protected $preview;
- protected $munger;
-
- /**
- * Title of the page
- *
- * @return string Title of the page
- */
-
- function title()
- {
- return _m('Feed subscriptions');
- }
-
- /**
- * Instructions for use
- *
- * @return instructions for use
- */
-
- function getInstructions()
- {
- return _m('You can subscribe to feeds from other sites; ' .
- 'updates will appear in your personal timeline.');
- }
-
- /**
- * Content area of the page
- *
- * Shows a form for associating a Twitter account with this
- * StatusNet account. Also lets the user set preferences.
- *
- * @return void
- */
-
- function showContent()
- {
- $user = common_current_user();
-
- $profile = $user->getProfile();
-
- $fuser = null;
-
- $flink = Foreign_link::getByUserID($user->id, FEEDSUB_SERVICE);
-
- if (!empty($flink)) {
- $fuser = $flink->getForeignUser();
- }
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'form_settings_feedsub',
- 'class' => 'form_settings',
- 'action' =>
- common_local_url('feedsubsettings')));
-
- $this->hidden('token', common_session_token());
-
- $this->elementStart('fieldset', array('id' => 'settings_feeds'));
-
- $this->elementStart('ul', 'form_data');
- $this->elementStart('li', array('id' => 'settings_twitter_login_button'));
- $this->input('feedurl', _('Feed URL'), $this->feedurl, _('Enter the URL of a PubSubHubbub-enabled feed'));
- $this->elementEnd('li');
- $this->elementEnd('ul');
-
- if ($this->preview) {
- $this->submit('subscribe', _m('Subscribe'));
- } else {
- $this->submit('validate', _m('Continue'));
- }
-
- $this->elementEnd('fieldset');
-
- $this->elementEnd('form');
-
- if ($this->preview) {
- $this->previewFeed();
- }
- }
-
- /**
- * Handle posts to this form
- *
- * Based on the button that was pressed, muxes out to other functions
- * to do the actual task requested.
- *
- * All sub-functions reload the form with a message -- success or failure.
- *
- * @return void
- */
-
- function handlePost()
- {
- // CSRF protection
- $token = $this->trimmed('token');
- if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
- return;
- }
-
- if ($this->arg('validate')) {
- $this->validateAndPreview();
- } else if ($this->arg('subscribe')) {
- $this->saveFeed();
- } else {
- $this->showForm(_('Unexpected form submission.'));
- }
- }
-
- /**
- * Set up and add a feed
- *
- * @return boolean true if feed successfully read
- * Sends you back to input form if not.
- */
- function validateFeed()
- {
- $feedurl = trim($this->arg('feedurl'));
-
- if ($feedurl == '') {
- $this->showForm(_m('Empty feed URL!'));
- return;
- }
- $this->feedurl = $feedurl;
-
- // Get the canonical feed URI and check it
- try {
- $discover = new FeedDiscovery();
- $uri = $discover->discoverFromURL($feedurl);
- } catch (FeedSubBadURLException $e) {
- $this->showForm(_m('Invalid URL or could not reach server.'));
- return false;
- } catch (FeedSubBadResponseException $e) {
- $this->showForm(_m('Cannot read feed; server returned error.'));
- return false;
- } catch (FeedSubEmptyException $e) {
- $this->showForm(_m('Cannot read feed; server returned an empty page.'));
- return false;
- } catch (FeedSubBadHTMLException $e) {
- $this->showForm(_m('Bad HTML, could not find feed link.'));
- return false;
- } catch (FeedSubNoFeedException $e) {
- $this->showForm(_m('Could not find a feed linked from this URL.'));
- return false;
- } catch (FeedSubUnrecognizedTypeException $e) {
- $this->showForm(_m('Not a recognized feed type.'));
- return false;
- } catch (FeedSubException $e) {
- // Any new ones we forgot about
- $this->showForm(_m('Bad feed URL.'));
- return false;
- }
-
- $this->munger = $discover->feedMunger();
- $this->feedinfo = $this->munger->feedInfo();
-
- if ($this->feedinfo->huburi == '') {
- $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
- return false;
- }
-
- return true;
- }
-
- function saveFeed()
- {
- if ($this->validateFeed()) {
- $this->preview = true;
- $this->feedinfo = Feedinfo::ensureProfile($this->munger);
-
- // If not already in use, subscribe to updates via the hub
- if ($this->feedinfo->sub_start) {
- common_log(LOG_INFO, __METHOD__ . ": double the fun! new sub for {$this->feedinfo->feeduri} last subbed {$this->feedinfo->sub_start}");
- } else {
- $ok = $this->feedinfo->subscribe();
- common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
- if (!$ok) {
- $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
- return;
- }
- }
-
- // And subscribe the current user to the local profile
- $user = common_current_user();
- $profile = $this->feedinfo->getProfile();
-
- if ($user->isSubscribed($profile)) {
- $this->showForm(_m('Already subscribed!'));
- } elseif ($user->subscribeTo($profile)) {
- $this->showForm(_m('Feed subscribed!'));
- } else {
- $this->showForm(_m('Feed subscription failed!'));
- }
- }
- }
-
- function validateAndPreview()
- {
- if ($this->validateFeed()) {
- $this->preview = true;
- $this->showForm(_m('Previewing feed:'));
- }
- }
-
- function previewFeed()
- {
- $feedinfo = $this->munger->feedinfo();
- $notice = $this->munger->notice(0, true); // preview
-
- if ($notice) {
- $this->element('b', null, 'Preview of latest post from this feed:');
-
- $item = new NoticeList($notice, $this);
- $item->show();
- } else {
- $this->element('b', null, 'No posts in this feed yet.');
- }
- }
-
- function showScripts()
- {
- parent::showScripts();
- $this->autofocus('feedurl');
- }
-}
diff --git a/plugins/FeedSub/extlib/README b/plugins/FeedSub/extlib/README
deleted file mode 100644
index 799b40c47..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser.php b/plugins/FeedSub/extlib/XML/Feed/Parser.php
deleted file mode 100755
index ffe8220a5..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/Atom.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Atom.php
deleted file mode 100644
index c7e218a1e..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/AtomElement.php b/plugins/FeedSub/extlib/XML/Feed/Parser/AtomElement.php
deleted file mode 100755
index 063ecb617..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/Exception.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Exception.php
deleted file mode 100755
index 1e76e3f85..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS09.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09.php
deleted file mode 100755
index 07f38f911..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS09Element.php
deleted file mode 100755
index d41f36e8d..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS1.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1.php
deleted file mode 100755
index 60c9938ba..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS11.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11.php
deleted file mode 100755
index 3cd1ef15d..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS11Element.php
deleted file mode 100755
index 75918beda..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS1Element.php
deleted file mode 100755
index 8e36d5a9b..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS2.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2.php
deleted file mode 100644
index 0936bd2f5..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php b/plugins/FeedSub/extlib/XML/Feed/Parser/RSS2Element.php
deleted file mode 100755
index 6edf910dc..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/Parser/Type.php b/plugins/FeedSub/extlib/XML/Feed/Parser/Type.php
deleted file mode 100644
index 75052619b..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-entryonly.xml
deleted file mode 100755
index 02e1c5800..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example1.xml
deleted file mode 100755
index d181d2b6f..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml b/plugins/FeedSub/extlib/XML/Feed/samples/atom10-example2.xml
deleted file mode 100755
index 98abf9d54..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/delicious.feed b/plugins/FeedSub/extlib/XML/Feed/samples/delicious.feed
deleted file mode 100755
index 32f9fa493..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/flickr.feed b/plugins/FeedSub/extlib/XML/Feed/samples/flickr.feed
deleted file mode 100755
index 57e83af57..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml b/plugins/FeedSub/extlib/XML/Feed/samples/grwifi-atom.xml
deleted file mode 100755
index c351d3c16..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/hoder.xml b/plugins/FeedSub/extlib/XML/Feed/samples/hoder.xml
deleted file mode 100755
index 099463570..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml b/plugins/FeedSub/extlib/XML/Feed/samples/illformed_atom10.xml
deleted file mode 100755
index 612186897..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-complete.xml
deleted file mode 100755
index b0a1fee2d..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss091-international.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-international.xml
deleted file mode 100755
index cfe91691f..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss091-simple.xml
deleted file mode 100755
index f0964a227..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss092-sample.xml
deleted file mode 100755
index 5d75c352b..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example1.xml
deleted file mode 100755
index 0edecf58e..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss10-example2.xml
deleted file mode 100755
index 26235f78f..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/rss2sample.xml b/plugins/FeedSub/extlib/XML/Feed/samples/rss2sample.xml
deleted file mode 100755
index 53483cc51..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml b/plugins/FeedSub/extlib/XML/Feed/samples/sixapart-jp.xml
deleted file mode 100755
index f8a04bba5..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/samples/technorati.feed b/plugins/FeedSub/extlib/XML/Feed/samples/technorati.feed
deleted file mode 100755
index 6274a32cd..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/schemas/atom.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/atom.rnc
deleted file mode 100755
index e662d2626..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/schemas/rss10.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/rss10.rnc
deleted file mode 100755
index 725094788..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/XML/Feed/schemas/rss11.rnc b/plugins/FeedSub/extlib/XML/Feed/schemas/rss11.rnc
deleted file mode 100755
index c8633766f..000000000
--- a/plugins/FeedSub/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/FeedSub/extlib/xml-feed-parser-bug-16416.patch b/plugins/FeedSub/extlib/xml-feed-parser-bug-16416.patch
deleted file mode 100644
index c53bd9737..000000000
--- a/plugins/FeedSub/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/FeedSub/feedinfo.php b/plugins/FeedSub/feedinfo.php
deleted file mode 100644
index b166bd6e1..000000000
--- a/plugins/FeedSub/feedinfo.php
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/*
-
-Subscription flow:
-
- $feedinfo->subscribe()
- generate random verification token
- save to verify_token
- sends a sub request to the hub...
-
- feedsub/callback
- hub sends confirmation back to us via GET
- We verify the request, then echo back the challenge.
- On our end, we save the time we subscribed and the lease expiration
-
- feedsub/callback
- hub sends us updates via POST
- ?
-
-*/
-
-class FeedDBException extends FeedSubException
-{
- public $obj;
-
- function __construct($obj)
- {
- parent::__construct('Database insert failure');
- $this->obj = $obj;
- }
-}
-
-class Feedinfo extends Memcached_DataObject
-{
- public $__table = 'feedinfo';
-
- public $id;
- public $profile_id;
-
- public $feeduri;
- public $homeuri;
- public $huburi;
-
- // PuSH subscription data
- public $verify_token;
- public $sub_start;
- public $sub_end;
-
- public $created;
- public $lastupdate;
-
-
- public /*static*/ function staticGet($k, $v=null)
- {
- return parent::staticGet(__CLASS__, $k, $v);
- }
-
- /**
- * return table definition for DB_DataObject
- *
- * DB_DataObject needs to know something about the table to manipulate
- * instances. This method provides all the DB_DataObject needs to know.
- *
- * @return array array of column definitions
- */
-
- function table()
- {
- return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
- 'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
- 'feeduri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'homeuri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'huburi' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
- 'verify_token' => DB_DATAOBJECT_STR,
- 'sub_start' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'sub_end' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
- 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
- 'lastupdate' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
- }
-
- static function schemaDef()
- {
- return array(new ColumnDef('id', 'integer',
- /*size*/ null,
- /*nullable*/ false,
- /*key*/ 'PRI',
- /*default*/ '0',
- /*extra*/ null,
- /*auto_increment*/ true),
- new ColumnDef('profile_id', 'integer',
- null, false),
- new ColumnDef('feeduri', 'varchar',
- 255, false, 'UNI'),
- new ColumnDef('homeuri', 'varchar',
- 255, false),
- new ColumnDef('huburi', 'varchar',
- 255, false),
- new ColumnDef('verify_token', 'varchar',
- 32, true),
- new ColumnDef('sub_start', 'datetime',
- null, true),
- new ColumnDef('sub_end', 'datetime',
- null, true),
- new ColumnDef('created', 'datetime',
- null, false),
- new ColumnDef('lastupdate', 'datetime',
- null, false));
- }
-
- /**
- * return key definitions for DB_DataObject
- *
- * DB_DataObject needs to know about keys that the table has; this function
- * defines them.
- *
- * @return array key definitions
- */
-
- function keys()
- {
- return array('id' => 'P'); //?
- }
-
- /**
- * return key definitions for Memcached_DataObject
- *
- * Our caching system uses the same key definitions, but uses a different
- * method to get them.
- *
- * @return array key definitions
- */
-
- function keyTypes()
- {
- return $this->keys();
- }
-
- /**
- * Fetch the StatusNet-side profile for this feed
- * @return Profile
- */
- public function getProfile()
- {
- return Profile::staticGet('id', $this->profile_id);
- }
-
- /**
- * @param FeedMunger $munger
- * @return Feedinfo
- */
- public static function ensureProfile($munger)
- {
- $feedinfo = $munger->feedinfo();
-
- $current = self::staticGet('feeduri', $feedinfo->feeduri);
- if ($current) {
- // @fixme we should probably update info as necessary
- return $current;
- }
-
- $feedinfo->query('BEGIN');
-
- try {
- $profile = $munger->profile();
- $result = $profile->insert();
- if (empty($result)) {
- throw new FeedDBException($profile);
- }
-
- $feedinfo->profile_id = $profile->id;
- $result = $feedinfo->insert();
- if (empty($result)) {
- throw new FeedDBException($feedinfo);
- }
-
- $feedinfo->query('COMMIT');
- } catch (FeedDBException $e) {
- common_log_db_error($e->obj, 'INSERT', __FILE__);
- $feedinfo->query('ROLLBACK');
- return false;
- }
- return $feedinfo;
- }
-
- /**
- * Send a subscription request to the hub for this feed.
- * The hub will later send us a confirmation POST to /feedsub/callback.
- *
- * @return bool true on success, false on failure
- */
- public function subscribe()
- {
- // @fixme use the verification token
- #$token = md5(mt_rand() . ':' . $this->feeduri);
- #$this->verify_token = $token;
- #$this->update(); // @fixme
-
- try {
- $callback = common_local_url('feedsubcallback', array('feed' => $this->id));
- $headers = array('Content-Type: application/x-www-form-urlencoded');
- $post = array('hub.mode' => 'subscribe',
- 'hub.callback' => $callback,
- 'hub.verify' => 'async',
- //'hub.verify_token' => $token,
- //'hub.lease_seconds' => 0,
- 'hub.topic' => $this->feeduri);
- $client = new HTTPClient();
- $response = $client->post($this->huburi, $headers, $post);
- if ($response->getStatus() >= 200 && $response->getStatus() < 300) {
- common_log(LOG_INFO, __METHOD__ . ': sub req ok');
- return true;
- } else {
- common_log(LOG_INFO, __METHOD__ . ': sub req failed');
- return false;
- }
- } catch (Exception $e) {
- // wtf!
- common_log(LOG_ERR, __METHOD__ . ": error \"{$e->getMessage()}\" hitting hub $this->huburi subscribing to $this->feeduri");
- return false;
- }
- }
-
- /**
- * Read and post notices for updates from the feed.
- * Currently assumes that all items in the feed are new,
- * coming from a PuSH hub.
- *
- * @param string $xml source of Atom or RSS feed
- */
- public function postUpdates($xml)
- {
- common_log(LOG_INFO, __METHOD__ . ": packet for \"$this->feeduri\"! $xml");
- require_once "XML/Feed/Parser.php";
- $feed = new XML_Feed_Parser($xml, false, false, true);
- $munger = new FeedMunger($feed);
-
- $hits = 0;
- foreach ($feed as $index => $entry) {
- // @fixme this might sort in wrong order if we get multiple updates
-
- $notice = $munger->notice($index);
- $notice->profile_id = $this->profile_id;
-
- // Double-check for oldies
- // @fixme this could explode horribly for multiple feeds on a blog. sigh
- $dupe = new Notice();
- $dupe->uri = $notice->uri;
- $dupe->find();
- if ($dupe->fetch()) {
- common_log(LOG_WARNING, __METHOD__ . ": tried to save dupe notice for entry {$notice->uri} of feed {$this->feeduri}");
- continue;
- }
-
- if (Event::handle('StartNoticeSave', array(&$notice))) {
- $id = $notice->insert();
- Event::handle('EndNoticeSave', array($notice));
- }
- $notice->addToInboxes();
-
- common_log(LOG_INFO, __METHOD__ . ": saved notice {$notice->id} for entry $index of update to \"{$this->feeduri}\"");
- $hits++;
- }
- if ($hits == 0) {
- common_log(LOG_INFO, __METHOD__ . ": no updates in packet for \"$this->feeduri\"! $xml");
- }
- }
-}
diff --git a/plugins/FeedSub/feedinfo.sql b/plugins/FeedSub/feedinfo.sql
deleted file mode 100644
index e9b53d26e..000000000
--- a/plugins/FeedSub/feedinfo.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-CREATE TABLE `feedinfo` (
- `id` int(11) NOT NULL auto_increment,
- `profile_id` int(11) NOT NULL,
- `feeduri` varchar(255) NOT NULL,
- `homeuri` varchar(255) NOT NULL,
- `huburi` varchar(255) NOT NULL,
- `verify_token` varchar(32) default NULL,
- `sub_start` datetime default NULL,
- `sub_end` datetime default NULL,
- `created` datetime NOT NULL,
- `lastupdate` datetime NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `feedinfo_feeduri_idx` (`feeduri`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
diff --git a/plugins/FeedSub/feedmunger.php b/plugins/FeedSub/feedmunger.php
deleted file mode 100644
index f3618b8eb..000000000
--- a/plugins/FeedSub/feedmunger.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package FeedSubPlugin
- * @maintainer Brion Vibber <brion@status.net>
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-class FeedSubPreviewNotice extends Notice
-{
- protected $fetched = true;
-
- function __construct($profile)
- {
- //parent::__construct(); // uhhh?
- $this->profile = $profile;
- }
-
- function getProfile()
- {
- return $this->profile;
- }
-
- function find()
- {
- return true;
- }
-
- function fetch()
- {
- $got = $this->fetched;
- $this->fetched = false;
- return $got;
- }
-}
-
-class FeedSubPreviewProfile extends Profile
-{
- function getAvatar($width, $height=null)
- {
- return new FeedSubPreviewAvatar($width, $height);
- }
-}
-
-class FeedSubPreviewAvatar extends Avatar
-{
- function displayUrl() {
- return common_path('plugins/FeedSub/images/48px-Feed-icon.svg.png');
- }
-}
-
-class FeedMunger
-{
- /**
- * @param XML_Feed_Parser $feed
- */
- function __construct($feed, $url=null)
- {
- $this->feed = $feed;
- $this->url = $url;
- }
-
- function feedinfo()
- {
- $feedinfo = new Feedinfo();
- $feedinfo->feeduri = $this->url;
- $feedinfo->homeuri = $this->feed->link;
- $feedinfo->huburi = $this->getHubLink();
- return $feedinfo;
- }
-
- function getAtomLink($item, $attribs=array())
- {
- // XML_Feed_Parser gets confused by multiple <link> elements.
- $dom = $item->model;
-
- // Note that RSS feeds would embed an <atom:link> so this should work for both.
- /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
- // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
- $links = $dom->getElementsByTagNameNS('http://www.w3.org/2005/Atom', 'link');
- for ($i = 0; $i < $links->length; $i++) {
- $node = $links->item($i);
- if ($node->hasAttributes()) {
- $href = $node->attributes->getNamedItem('href');
- if ($href) {
- $matches = 0;
- foreach ($attribs as $name => $val) {
- $attrib = $node->attributes->getNamedItem($name);
- if ($attrib && $attrib->value == $val) {
- $matches++;
- }
- }
- if ($matches == count($attribs)) {
- return $href->value;
- }
- }
- }
- }
- return false;
- }
-
- function getRssLink($item)
- {
- // XML_Feed_Parser gets confused by multiple <link> elements.
- $dom = $item->model;
-
- // Note that RSS feeds would embed an <atom:link> so this should work for both.
- /// http://code.google.com/p/pubsubhubbub/wiki/RssFeeds
- // <link rel='hub' href='http://pubsubhubbub.appspot.com/'/>
- $links = $dom->getElementsByTagName('link');
- for ($i = 0; $i < $links->length; $i++) {
- $node = $links->item($i);
- if (!$node->hasAttributes()) {
- return $node->textContent;
- }
- }
- return false;
- }
-
- function getAltLink($item)
- {
- // Check for an atom link...
- $link = $this->getAtomLink($item, array('rel' => 'alternate', 'type' => 'text/html'));
- if (!$link) {
- $link = $this->getRssLink($item);
- }
- return $link;
- }
-
- function getHubLink()
- {
- return $this->getAtomLink($this->feed, array('rel' => 'hub'));
- }
-
- function profile($preview=false)
- {
- if ($preview) {
- $profile = new FeedSubPreviewProfile();
- } else {
- $profile = new Profile();
- }
-
- // @todo validate/normalize nick?
- $profile->nickname = $this->feed->title;
- $profile->fullname = $this->feed->title;
- $profile->homepage = $this->getAltLink($this->feed);
- $profile->bio = $this->feed->description;
- $profile->profileurl = $this->getAltLink($this->feed);
-
- // @todo tags from categories
- // @todo lat/lon/location?
-
- return $profile;
- }
-
- function notice($index=1, $preview=false)
- {
- $entry = $this->feed->getEntryByOffset($index);
- if (!$entry) {
- return null;
- }
-
- if ($preview) {
- $notice = new FeedSubPreviewNotice($this->profile(true));
- $notice->id = -1;
- } else {
- $notice = new Notice();
- }
-
- $link = $this->getAltLink($entry);
- $notice->uri = $link;
- $notice->url = $link;
- $notice->content = $this->noticeFromEntry($entry);
- $notice->rendered = common_render_content($notice->content, $notice);
- $notice->created = common_sql_date($entry->updated); // @fixme
- $notice->is_local = Notice::GATEWAY;
- $notice->source = 'feed';
-
- return $notice;
- }
-
- /**
- * @param XML_Feed_Type $entry
- * @return string notice text, within post size limit
- */
- function noticeFromEntry($entry)
- {
- $title = $entry->title;
- $link = $entry->link;
-
- // @todo We can get <category> entries like this:
- // $cats = $entry->getCategory('category', array(0, true));
- // but it feels like an awful hack. If it's accessible cleanly,
- // try adding #hashtags from the categories/tags on a post.
-
- // @todo Should we force a language here?
- $format = _m('New post: "%1$s" %2$s');
- $title = $entry->title;
- $link = $this->getAltLink($entry);
- $out = sprintf($format, $title, $link);
-
- // Trim link if needed...
- $max = Notice::maxContent();
- if (mb_strlen($out) > $max) {
- $link = common_shorten_url($link);
- $out = sprintf($format, $title, $link);
- }
-
- // Trim title if needed...
- if (mb_strlen($out) > $max) {
- $ellipsis = "\xe2\x80\xa6"; // U+2026 HORIZONTAL ELLIPSIS
- $used = mb_strlen($out) - mb_strlen($title);
- $available = $max - $used - mb_strlen($ellipsis);
- $title = mb_substr($title, 0, $available) . $ellipsis;
- $out = sprintf($format, $title, $link);
- }
-
- return $out;
- }
-}
diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/FeedSub/locale/FeedSub.po
deleted file mode 100644
index dedc018e3..000000000
--- a/plugins/FeedSub/locale/FeedSub.po
+++ /dev/null
@@ -1,104 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:38-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
-msgid "Feeds"
-msgstr ""
-
-#: FeedSubPlugin.php:77
-msgid "Feed subscription options"
-msgstr ""
-
-#: feedmunger.php:215
-#, php-format
-msgid "New post: \"%1$s\" %2$s"
-msgstr ""
-
-#: actions/feedsubsettings.php:41
-msgid "Feed subscriptions"
-msgstr ""
-
-#: actions/feedsubsettings.php:52
-msgid ""
-"You can subscribe to feeds from other sites; updates will appear in your "
-"personal timeline."
-msgstr ""
-
-#: actions/feedsubsettings.php:96
-msgid "Subscribe"
-msgstr ""
-
-#: actions/feedsubsettings.php:98
-msgid "Continue"
-msgstr ""
-
-#: actions/feedsubsettings.php:151
-msgid "Empty feed URL!"
-msgstr ""
-
-#: actions/feedsubsettings.php:161
-msgid "Invalid URL or could not reach server."
-msgstr ""
-
-#: actions/feedsubsettings.php:164
-msgid "Cannot read feed; server returned error."
-msgstr ""
-
-#: actions/feedsubsettings.php:167
-msgid "Cannot read feed; server returned an empty page."
-msgstr ""
-
-#: actions/feedsubsettings.php:170
-msgid "Bad HTML, could not find feed link."
-msgstr ""
-
-#: actions/feedsubsettings.php:173
-msgid "Could not find a feed linked from this URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:176
-msgid "Not a recognized feed type."
-msgstr ""
-
-#: actions/feedsubsettings.php:180
-msgid "Bad feed URL."
-msgstr ""
-
-#: actions/feedsubsettings.php:188
-msgid "Feed is not PuSH-enabled; cannot subscribe."
-msgstr ""
-
-#: actions/feedsubsettings.php:208
-msgid "Feed subscription failed! Bad response from hub."
-msgstr ""
-
-#: actions/feedsubsettings.php:218
-msgid "Already subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:220
-msgid "Feed subscribed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:222
-msgid "Feed subscription failed!"
-msgstr ""
-
-#: actions/feedsubsettings.php:231
-msgid "Previewing feed:"
-msgstr ""
diff --git a/plugins/FeedSub/tests/FeedMungerTest.php b/plugins/FeedSub/tests/FeedMungerTest.php
deleted file mode 100644
index 0ce24c9fb..000000000
--- a/plugins/FeedSub/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/GeonamesPlugin.php b/plugins/GeonamesPlugin.php
index 52cc9c97f..589462ed9 100644
--- a/plugins/GeonamesPlugin.php
+++ b/plugins/GeonamesPlugin.php
@@ -71,7 +71,7 @@ class GeonamesPlugin extends Plugin
$loc = $this->getCache(array('name' => $name,
'language' => $language));
- if (!empty($loc)) {
+ if ($loc !== false) {
$location = $loc;
return false;
}
@@ -87,12 +87,20 @@ class GeonamesPlugin extends Plugin
return true;
}
+ if (count($geonames) == 0) {
+ // no results
+ $this->setCache(array('name' => $name,
+ 'language' => $language),
+ null);
+ return true;
+ }
+
$n = $geonames[0];
$location = new Location();
- $location->lat = (string)$n->lat;
- $location->lon = (string)$n->lng;
+ $location->lat = $this->canonical($n->lat);
+ $location->lon = $this->canonical($n->lng);
$location->names[$language] = (string)$n->name;
$location->location_id = (string)$n->geonameId;
$location->location_ns = self::LOCATION_NS;
@@ -125,7 +133,7 @@ class GeonamesPlugin extends Plugin
$loc = $this->getCache(array('id' => $id));
- if (!empty($loc)) {
+ if ($loc !== false) {
$location = $loc;
return false;
}
@@ -157,8 +165,9 @@ class GeonamesPlugin extends Plugin
$location->location_id = (string)$last->geonameId;
$location->location_ns = self::LOCATION_NS;
- $location->lat = (string)$last->lat;
- $location->lon = (string)$last->lng;
+ $location->lat = $this->canonical($last->lat);
+ $location->lon = $this->canonical($last->lng);
+
$location->names[$language] = implode(', ', array_reverse($parts));
$this->setCache(array('id' => (string)$last->geonameId),
@@ -186,13 +195,15 @@ class GeonamesPlugin extends Plugin
function onLocationFromLatLon($lat, $lon, $language, &$location)
{
- $lat = rtrim($lat, "0");
- $lon = rtrim($lon, "0");
+ // Make sure they're canonical
+
+ $lat = $this->canonical($lat);
+ $lon = $this->canonical($lon);
$loc = $this->getCache(array('lat' => $lat,
'lon' => $lon));
- if (!empty($loc)) {
+ if ($loc !== false) {
$location = $loc;
return false;
}
@@ -207,6 +218,14 @@ class GeonamesPlugin extends Plugin
return true;
}
+ if (count($geonames) == 0) {
+ // no results
+ $this->setCache(array('lat' => $lat,
+ 'lon' => $lon),
+ null);
+ return true;
+ }
+
$n = $geonames[0];
$parts = array();
@@ -225,8 +244,8 @@ class GeonamesPlugin extends Plugin
$location->location_id = (string)$n->geonameId;
$location->location_ns = self::LOCATION_NS;
- $location->lat = (string)$lat;
- $location->lon = (string)$lon;
+ $location->lat = $this->canonical($n->lat);
+ $location->lon = $this->canonical($n->lng);
$location->names[$language] = implode(', ', $parts);
@@ -264,7 +283,7 @@ class GeonamesPlugin extends Plugin
$n = $this->getCache(array('id' => $id,
'language' => $language));
- if (!empty($n)) {
+ if ($n !== false) {
$name = $n;
return false;
}
@@ -278,6 +297,13 @@ class GeonamesPlugin extends Plugin
return false;
}
+ if (count($geonames) == 0) {
+ $this->setCache(array('id' => $id,
+ 'language' => $language),
+ null);
+ return false;
+ }
+
$parts = array();
foreach ($geonames as $level) {
@@ -412,17 +438,29 @@ class GeonamesPlugin extends Plugin
throw new Exception("HTTP error code " . $result->code);
}
- $document = new SimpleXMLElement($result->getBody());
+ $body = $result->getBody();
+
+ if (empty($body)) {
+ throw new Exception("Empty HTTP body in response");
+ }
+
+ // This will throw an exception if the XML is mal-formed
+
+ $document = new SimpleXMLElement($body);
- if (empty($document)) {
- throw new Exception("No results in response");
+ // No children, usually no results
+
+ $children = $document->children();
+
+ if (count($children) == 0) {
+ return array();
}
if (isset($document->status)) {
throw new Exception("Error #".$document->status['value']." ('".$document->status['message']."')");
}
- // Array of elements
+ // Array of elements, >0 elements
return $document->geoname;
}
@@ -438,4 +476,12 @@ class GeonamesPlugin extends Plugin
'names for locations based on user-provided lat/long pairs.'));
return true;
}
+
+ function canonical($coord)
+ {
+ $coord = rtrim($coord, "0");
+ $coord = rtrim($coord, ".");
+
+ return $coord;
+ }
}
diff --git a/plugins/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 1755033f1..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---//
@@ -96,8 +122,11 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
}
}
- function autoRegister($username)
+ function autoRegister($username, $nickname)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$entry = $this->ldap_get_user($username,$this->attributes);
if($entry){
$registration_data = array();
@@ -107,6 +136,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
if(isset($registration_data['email']) && !empty($registration_data['email'])){
$registration_data['email_confirmed']=true;
}
+ $registration_data['nickname'] = $nickname;
//set the database saved password to a random string.
$registration_data['password']=common_good_rand(16);
return User::register($registration_data);
@@ -159,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---//
@@ -195,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/MemcachePlugin.php b/plugins/MemcachePlugin.php
index 8c8b8da6d..c3ca5c135 100644
--- a/plugins/MemcachePlugin.php
+++ b/plugins/MemcachePlugin.php
@@ -51,6 +51,8 @@ if (!defined('STATUSNET')) {
class MemcachePlugin extends Plugin
{
+ static $cacheInitialized = false;
+
private $_conn = null;
public $servers = array('127.0.0.1;11211');
@@ -59,6 +61,8 @@ class MemcachePlugin extends Plugin
public $persistent = null;
+ public $defaultExpiry = 86400; // 24h
+
/**
* Initialize the plugin
*
@@ -69,10 +73,21 @@ class MemcachePlugin extends Plugin
function onInitializePlugin()
{
- if (is_null($this->persistent)) {
+ if (self::$cacheInitialized) {
+ $this->persistent = true;
+ } else {
+ // If we're a parent command-line process we need
+ // to be able to close out the connection after
+ // forking, so disable persistence.
+ //
+ // We'll turn it back on again the second time
+ // through which will either be in a child process,
+ // or a single-process script which is switching
+ // configurations.
$this->persistent = (php_sapi_name() == 'cli') ? false : true;
}
$this->_ensureConn();
+ self::$cacheInitialized = true;
return true;
}
@@ -100,7 +115,7 @@ class MemcachePlugin extends Plugin
*
* @param string &$key in; Key to use for lookups
* @param mixed &$value in; Value to associate
- * @param integer &$flag in; Flag (passed through to Memcache)
+ * @param integer &$flag in; Flag empty or Cache::COMPRESSED
* @param integer &$expiry in; Expiry (passed through to Memcache)
* @param boolean &$success out; Whether the set was successful
*
@@ -110,13 +125,34 @@ class MemcachePlugin extends Plugin
function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
{
$this->_ensureConn();
- $success = $this->_conn->set($key, $value, $flag, $expiry);
+ if ($expiry === null) {
+ $expiry = $this->defaultExpiry;
+ }
+ $success = $this->_conn->set($key, $value, $this->flag(intval($flag)), $expiry);
Event::handle('EndCacheSet', array($key, $value, $flag,
$expiry));
return false;
}
/**
+ * Atomically increment an existing numeric key value.
+ * Existing expiration time will not be changed.
+ *
+ * @param string &$key in; Key to use for lookups
+ * @param int &$step in; Amount to increment (default 1)
+ * @param mixed &$value out; Incremented value, or false if key not set.
+ *
+ * @return boolean hook success
+ */
+ function onStartCacheIncrement(&$key, &$step, &$value)
+ {
+ $this->_ensureConn();
+ $value = $this->_conn->increment($key, $step);
+ Event::handle('EndCacheIncrement', array($key, $step, $value));
+ return false;
+ }
+
+ /**
* Delete a value associated with a key
*
* @param string &$key in; Key to lookup
@@ -192,6 +228,20 @@ class MemcachePlugin extends Plugin
}
}
+ /**
+ * Translate general flags to Memcached-specific flags
+ * @param int $flag
+ * @return int
+ */
+ protected function flag($flag)
+ {
+ $out = 0;
+ if ($flag & Cache::COMPRESSED == Cache::COMPRESSED) {
+ $out |= MEMCACHE_COMPRESSED;
+ }
+ return $out;
+ }
+
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'Memcache',
diff --git a/plugins/Minify/MinifyPlugin.php b/plugins/Minify/MinifyPlugin.php
index b49b6a4ba..69def6064 100644
--- a/plugins/Minify/MinifyPlugin.php
+++ b/plugins/Minify/MinifyPlugin.php
@@ -86,7 +86,11 @@ class MinifyPlugin extends Plugin
$url = parse_url($src);
if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
- $src = $this->minifyUrl($src);
+ if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
+ $src = $this->minifyUrl($src);
+ } else {
+ $src = $this->minifyUrl('js/'.$src);
+ }
}
}
@@ -96,7 +100,7 @@ class MinifyPlugin extends Plugin
&& is_null(common_config('theme', 'path'))
&& is_null(common_config('theme', 'server'));
$url = parse_url($src);
- if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
if(!isset($theme)) {
$theme = common_config('site', 'theme');
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
index d426fc282..0b37734b7 100644
--- a/plugins/MobileProfile/MobileProfilePlugin.php
+++ b/plugins/MobileProfile/MobileProfilePlugin.php
@@ -240,6 +240,8 @@ class MobileProfilePlugin extends WAP20Plugin
return true;
}
+ $action->cssLink('css/display.css');
+
if (file_exists(Theme::file('css/mp-screen.css'))) {
$action->cssLink('css/mp-screen.css', null, 'screen');
} else {
@@ -256,6 +258,14 @@ class MobileProfilePlugin extends WAP20Plugin
}
+ function onStartShowUAStyles($action) {
+ if (!$this->serveMobile) {
+ return true;
+ }
+
+ return false;
+ }
+
function onStartShowHeader($action)
{
if (!$this->serveMobile) {
@@ -297,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');
@@ -414,7 +413,15 @@ class MobileProfilePlugin extends WAP20Plugin
return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
}
-}
-
-?>
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'MobileProfile',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Sarven Capadisli',
+ 'homepage' => 'http://status.net/wiki/Plugin:MobileProfile',
+ 'rawdescription' =>
+ _m('XHTML MobileProfile output for supporting user agents.'));
+ return true;
+ }
+}
diff --git a/plugins/MobileProfile/mp-screen.css b/plugins/MobileProfile/mp-screen.css
index 04fa5fb00..0fc801612 100644
--- a/plugins/MobileProfile/mp-screen.css
+++ b/plugins/MobileProfile/mp-screen.css
@@ -1,15 +1,12 @@
/** theme: mobile profile screen
*
* @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
+ * @author Sarven Capadisli <csarven@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-@import url(../../theme/base/css/display.css);
-@import url(../../theme/identica/css/display.css);
-
#wrap {
min-width:0;
max-width:100%;
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
new file mode 100644
index 000000000..efb630297
--- /dev/null
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -0,0 +1,852 @@
+<?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); }
+
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/');
+
+class FeedSubException extends Exception
+{
+}
+
+class OStatusPlugin extends Plugin
+{
+ /**
+ * Hook for RouterInitialized event.
+ *
+ * @param Net_URL_Mapper $m path-to-action mapper
+ * @return boolean hook return
+ */
+ function onRouterInitialized($m)
+ {
+ // Discovery actions
+ $m->connect('.well-known/host-meta',
+ array('action' => 'hostmeta'));
+ $m->connect('main/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/ostatusgroup',
+ array('action' => 'ostatusgroup'));
+
+ // PuSH actions
+ $m->connect('main/push/hub', array('action' => 'pushhub'));
+
+ $m->connect('main/push/callback/:feed',
+ array('action' => 'pushcallback'),
+ array('feed' => '[0-9]+'));
+
+ // Salmon endpoint
+ $m->connect('main/salmon/user/:id',
+ array('action' => 'usersalmon'),
+ array('id' => '[0-9]+'));
+ $m->connect('main/salmon/group/:id',
+ array('action' => 'groupsalmon'),
+ array('id' => '[0-9]+'));
+ return true;
+ }
+
+ /**
+ * Set up queue handlers for outgoing hub pushes
+ * @param QueueManager $qm
+ * @return boolean hook return
+ */
+ function onEndInitializeQueueManager(QueueManager $qm)
+ {
+ // 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;
+ }
+
+ /**
+ * Put saved notices into the queue for pubsub distribution.
+ */
+ function onStartEnqueueNotice($notice, &$transports)
+ {
+ $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($feed)
+ {
+ $id = null;
+
+ if ($feed instanceof AtomUserNoticeFeed) {
+ $salmonAction = 'usersalmon';
+ $user = $feed->getUser();
+ $id = $user->id;
+ $profile = $user->getProfile();
+ $feed->setActivitySubject($profile->asActivityNoun('subject'));
+ } else if ($feed instanceof AtomGroupNoticeFeed) {
+ $salmonAction = 'groupsalmon';
+ $group = $feed->getGroup();
+ $id = $group->id;
+ $feed->setActivitySubject($group->asActivitySubject());
+ } else {
+ return true;
+ }
+
+ if (!empty($id)) {
+ $hub = common_config('ostatus', 'hub');
+ if (empty($hub)) {
+ // Updates will be handled through our internal PuSH hub.
+ $hub = common_local_url('pushhub');
+ }
+ $feed->addLink($hub, array('rel' => 'hub'));
+
+ // Also, we'll add in the salmon link
+ $salmon = common_local_url($salmonAction, array('id' => $id));
+ $feed->addLink($salmon, array('rel' => Salmon::NS_REPLIES));
+ $feed->addLink($salmon, array('rel' => Salmon::NS_MENTIONS));
+ }
+
+ return true;
+ }
+
+ /**
+ * Automatically load the actions and libraries used by the plugin
+ *
+ * @param Class $cls the class
+ *
+ * @return boolean hook return
+ *
+ */
+ function onAutoload($cls)
+ {
+ $base = dirname(__FILE__);
+ $lower = strtolower($cls);
+ $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') {
+ $files[] = "$base/actions/" . substr($lower, 0, -6) . ".php";
+ }
+ foreach ($files as $file) {
+ if (file_exists($file)) {
+ include_once $file;
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Add in an OStatus subscribe button
+ */
+ function onStartProfileRemoteSubscribe($output, $profile)
+ {
+ $cur = common_current_user();
+
+ if (empty($cur)) {
+ // Add an OStatus subscribe
+ $output->elementStart('li', 'entity_subscribe');
+ $url = common_local_url('ostatusinit',
+ array('nickname' => $profile->nickname));
+ $output->element('a', array('href' => $url,
+ 'class' => 'entity_remote_subscribe'),
+ _m('Subscribe'));
+
+ $output->elementEnd('li');
+ }
+
+ 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)
+ {
+ }
+
+ /**
+ * 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
+ */
+
+ 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());
+ }
+ }
+ }
+
+ // 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());
+ }
+ }
+ }
+ }
+
+ 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;
+ }
+
+ /**
+ * Make sure necessary tables are filled out.
+ */
+ 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;
+ }
+
+ function onEndShowStatusNetStyles($action) {
+ $action->cssLink('plugins/OStatus/theme/base/css/ostatus.css');
+ return true;
+ }
+
+ function onEndShowStatusNetScripts($action) {
+ $action->script('plugins/OStatus/js/ostatus.js');
+ 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') {
+ 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);
+
+ $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
new file mode 100644
index 000000000..3a98b7b25
--- /dev/null
+++ b/plugins/OStatus/README
@@ -0,0 +1,34 @@
+Plugin to support importing updates from external RSS and Atom feeds into your timeline.
+
+Uses PubSubHubbub for push feed updates; currently non-PuSH feeds cannot be subscribed.
+
+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:
+* 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
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
new file mode 100644
index 000000000..6d35ada6c
--- /dev/null
+++ b/plugins/OStatus/actions/hostmeta.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class HostMetaAction extends Action
+{
+
+ function handle()
+ {
+ parent::handle();
+
+ $domain = common_config('site', 'server');
+ $url = common_local_url('userxrd');
+ $url.= '?uri={uri}';
+
+ $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
new file mode 100644
index 000000000..22aea9f70
--- /dev/null
+++ b/plugins/OStatus/actions/ostatusinit.php
@@ -0,0 +1,205 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer James Walker <james@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+
+class OStatusInitAction extends Action
+{
+
+ var $nickname;
+ var $group;
+ var $profile;
+ var $err;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ if (common_logged_in()) {
+ $this->clientError(_m('You can use the local subscription!'));
+ return false;
+ }
+
+ // 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;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ /* Use a session token for CSRF protection. */
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->showForm(_m('There was a problem with your session token. '.
+ 'Try again, please.'));
+ return;
+ }
+ $this->ostatusConnect();
+ } else {
+ $this->showForm();
+ }
+ }
+
+ function showForm($err = null)
+ {
+ $this->err = $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();
+ }
+ }
+
+ 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, $header);
+ $this->hidden('token', common_session_token());
+
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li', array('id' => 'ostatus_nickname'));
+ $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('profile', _m('Profile Account'), $this->profile,
+ _m('Your account id (i.e. user@identi.ca)'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->submit('submit', $submit);
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ }
+
+ function ostatusConnect()
+ {
+ $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."));
+ }
+ }
+
+ function connectWebfinger($acct)
+ {
+ $target_profile = $this->targetProfile();
+
+ $disco = new Discovery;
+ $result = $disco->lookup($acct);
+ if (!$result) {
+ $this->clientError(_m("Couldn't look up OStatus account profile."));
+ }
+
+ 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);
+ }
+
+ }
+ $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 _m('OStatus Connect');
+ }
+
+}
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
new file mode 100644
index 000000000..65dee2392
--- /dev/null
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -0,0 +1,450 @@
+<?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 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
+
+ /**
+ * 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('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('validate', _m('Continue'));
+
+ $this->elementEnd('fieldset');
+
+ $this->elementEnd('form');
+ }
+
+ /**
+ * Show the preview-and-confirm form. We've got a valid remote
+ * profile and are ready to poke it!
+ *
+ * This controls the wrapper form; actual profile display will
+ * be in previewUser() or previewGroup() depending on the type.
+ */
+ function showPreviewForm()
+ {
+ $ok = $this->preview();
+ if (!$ok) {
+ // @fixme maybe provide a cancel button or link back?
+ return;
+ }
+
+ $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->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');
+ }
+
+ /**
+ * Show a preview for a remote user's profile
+ * @return boolean true if we're ok to try subscribing
+ */
+ function preview()
+ {
+ $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;
+ }
+
+ $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;
+
+ 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 {
+ 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->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->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->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->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->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->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->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__);
+ }
+
+ 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);
+ }
+ }
+
+ /**
+ * Attempt to finalize subscription.
+ * validateFeed must have been run first.
+ *
+ * Calls showForm on failure or success on success.
+ */
+ function saveFeed()
+ {
+ // 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 (!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);
+ }
+ 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();
+ }
+
+ /**
+ * Show the appropriate form based on our input state.
+ */
+ function showForm($err=null)
+ {
+ 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();
+ }
+ }
+
+ /**
+ * Title of the page
+ *
+ * @return string Title of the page
+ */
+
+ 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->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
new file mode 100644
index 000000000..9a2067b8c
--- /dev/null
+++ b/plugins/OStatus/actions/pushcallback.php
@@ -0,0 +1,122 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package FeedSubPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+
+class PushCallbackAction extends Action
+{
+ function handle()
+ {
+ StatusNet::setApi(true); // Minimize error messages to aid in debugging
+ parent::handle();
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $this->handlePost();
+ } else {
+ $this->handleGet();
+ }
+ }
+
+ /**
+ * Handler for POST content updates from the hub
+ */
+ function handlePost()
+ {
+ $feedid = $this->arg('feed');
+ common_log(LOG_INFO, "POST for feed id $feedid");
+ if (!$feedid) {
+ throw new ServerException('Empty or invalid feed id', 400);
+ }
+
+ $feedsub = FeedSub::staticGet('id', $feedid);
+ if (!$feedsub) {
+ throw new ServerException('Unknown PuSH feed id ' . $feedid, 400);
+ }
+
+ $hmac = '';
+ if (isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) {
+ $hmac = $_SERVER['HTTP_X_HUB_SIGNATURE'];
+ }
+
+ $post = file_get_contents('php://input');
+
+ // Queue this to a background process; we should return
+ // as quickly as possible from a distribution POST.
+ // 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.
+ */
+ function handleGet()
+ {
+ $mode = $this->arg('hub_mode');
+ $topic = $this->arg('hub_topic');
+ $challenge = $this->arg('hub_challenge');
+ $lease_seconds = $this->arg('hub_lease_seconds');
+ $verify_token = $this->arg('hub_verify_token');
+
+ if ($mode != 'subscribe' && $mode != 'unsubscribe') {
+ throw new ClientException("Bad hub.mode $mode", 404);
+ }
+
+ $feedsub = FeedSub::staticGet('uri', $topic);
+ if (!$feedsub) {
+ throw new ClientException("Bad hub.topic feed $topic", 404);
+ }
+
+ if ($feedsub->verify_token !== $verify_token) {
+ throw new ClientException("Bad hub.verify_token $token for $topic", 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);
+ }
+ }
+
+ if ($mode == 'subscribe') {
+ 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");
+ $feedsub->confirmUnsubscribe();
+ }
+ print $challenge;
+ }
+}
diff --git a/plugins/OStatus/actions/pushhub.php b/plugins/OStatus/actions/pushhub.php
new file mode 100644
index 000000000..842d65e7d
--- /dev/null
+++ b/plugins/OStatus/actions/pushhub.php
@@ -0,0 +1,202 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Integrated PuSH hub; lets us only ping them what need it.
+ * @package Hub
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+/**
+
+
+Things to consider...
+* should we purge incomplete subscriptions that never get a verification pingback?
+* when can we send subscription renewal checks?
+ - at next send time probably ok
+* when can we handle trimming of subscriptions?
+ - at next send time probably ok
+* should we keep a fail count?
+
+*/
+
+
+class PushHubAction extends Action
+{
+ function arg($arg, $def=null)
+ {
+ // PHP converts '.'s in incoming var names to '_'s.
+ // It also merges multiple values, which'll break hub.verify and hub.topic for publishing
+ // @fixme handle multiple args
+ $arg = str_replace('hub.', 'hub_', $arg);
+ return parent::arg($arg, $def);
+ }
+
+ function prepare($args)
+ {
+ StatusNet::setApi(true); // reduce exception reports to aid in debugging
+ return parent::prepare($args);
+ }
+
+ function handle()
+ {
+ $mode = $this->trimmed('hub.mode');
+ switch ($mode) {
+ case "subscribe":
+ case "unsubscribe":
+ $this->subunsub($mode);
+ break;
+ case "publish":
+ throw new ClientException("Publishing outside feeds not supported.", 400);
+ default:
+ throw new ClientException("Unrecognized mode '$mode'.", 400);
+ }
+ }
+
+ /**
+ * 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
+ * 400 Bad Request - rejecting this (not specifically spec'd)
+ */
+ function subunsub($mode)
+ {
+ $callback = $this->argUrl('hub.callback');
+
+ $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.");
+ }
+
+ $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.");
+ }
+
+ $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.");
+ }
+
+ $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.");
+ }
+
+ $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));
+ }
+ }
+
+ 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');
+ }
+ }
+
+ /**
+ * Check whether the given URL represents one of our canonical
+ * user or group Atom feeds.
+ *
+ * @param string $feed URL
+ * @return boolean true if it matches
+ */
+ function recognizedFeed($feed)
+ {
+ $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;
+ }
+ }
+ 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 ClientException for malformed or non-http/https URLs
+ */
+ protected function argUrl($arg)
+ {
+ $url = $this->arg($arg);
+ $params = array('domain_check' => false, // otherwise breaks my local tests :P
+ 'allowed_schemes' => array('http', 'https'));
+ if (Validate::uri($url, $params)) {
+ return $url;
+ } else {
+ throw new ClientException("Invalid URL passed for $arg: '$url'");
+ }
+ }
+
+ /**
+ * Get HubSub subscription record for a given feed & subscriber.
+ *
+ * @param string $feed
+ * @param string $callback
+ * @return mixed HubSub or false
+ */
+ protected function getSub($feed, $callback)
+ {
+ return HubSub::staticGet($feed, $callback);
+ }
+}
+
diff --git a/plugins/OStatus/actions/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/userxrd.php b/plugins/OStatus/actions/userxrd.php
new file mode 100644
index 000000000..414de9364
--- /dev/null
+++ b/plugins/OStatus/actions/userxrd.php
@@ -0,0 +1,48 @@
+<?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')) { exit(1); }
+
+class UserxrdAction extends XrdAction
+{
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $this->uri = $this->trimmed('uri');
+ $acct = Discovery::normalize($this->uri);
+
+ list($nick, $domain) = explode('@', substr(urldecode($acct), 5));
+ $nick = common_canonical_nickname($nick);
+
+ $this->user = User::staticGet('nickname', $nick);
+ if (!$this->user) {
+ $this->clientError(_('No such user.'), 404);
+ return false;
+ }
+
+ 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
new file mode 100644
index 000000000..3120a70f9
--- /dev/null
+++ b/plugins/OStatus/classes/HubSub.php
@@ -0,0 +1,311 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * PuSH feed subscription record
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubSub extends Memcached_DataObject
+{
+ public $__table = 'hubsub';
+
+ public $hashkey; // sha1(topic . '|' . $callback); (topic, callback) key is too long for myisam in utf8
+ public $topic;
+ public $callback;
+ public $secret;
+ public $lease;
+ public $sub_start;
+ public $sub_end;
+ public $created;
+ public $modified;
+
+ public /*static*/ function staticGet($topic, $callback)
+ {
+ return parent::staticGet(__CLASS__, 'hashkey', self::hashkey($topic, $callback));
+ }
+
+ protected static function hashkey($topic, $callback)
+ {
+ return sha1($topic . '|' . $callback);
+ }
+
+ /**
+ * return table definition for DB_DataObject
+ *
+ * DB_DataObject needs to know something about the table to manipulate
+ * instances. This method provides all the DB_DataObject needs to know.
+ *
+ * @return array array of column definitions
+ */
+
+ function table()
+ {
+ return array('hashkey' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'topic' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'callback' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'secret' => DB_DATAOBJECT_STR,
+ '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,
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ static function schemaDef()
+ {
+ return array(new ColumnDef('hashkey', 'char',
+ /*size*/40,
+ /*nullable*/false,
+ /*key*/'PRI'),
+ new ColumnDef('topic', 'varchar',
+ /*size*/255,
+ /*nullable*/false,
+ /*key*/'KEY'),
+ new ColumnDef('callback', 'varchar',
+ 255, false),
+ new ColumnDef('secret', 'text',
+ null, true),
+ new ColumnDef('lease', 'int',
+ null, true),
+ new ColumnDef('sub_start', 'datetime',
+ null, true),
+ new ColumnDef('sub_end', 'datetime',
+ null, true),
+ new ColumnDef('created', 'datetime',
+ null, false),
+ new ColumnDef('modified', 'datetime',
+ null, false));
+ }
+
+ function keys()
+ {
+ return array_keys($this->keyTypes());
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has; this function
+ * defines them.
+ *
+ * @return array key definitions
+ */
+
+ function keyTypes()
+ {
+ return array('hashkey' => 'K');
+ }
+
+ /**
+ * Validates a requested lease length, sets length plus
+ * subscription start & end dates.
+ *
+ * Does not save to database -- use before insert() or update().
+ *
+ * @param int $length in seconds
+ */
+ function setLease($length)
+ {
+ assert(is_int($length));
+
+ $min = 86400;
+ $max = 86400 * 30;
+
+ if ($length == 0) {
+ // We want to garbage collect dead subscriptions!
+ $length = $max;
+ } elseif( $length < $min) {
+ $length = $min;
+ } else if ($length > $max) {
+ $length = $max;
+ }
+
+ $this->lease = $length;
+ $this->start_sub = common_sql_now();
+ $this->end_sub = common_sql_date(time() + $length);
+ }
+
+ /**
+ * 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 scheduleVerify($mode, $token=null, $retries=null)
+ {
+ 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');
+ }
+
+ /**
+ * 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' => $challenge);
+ if ($mode == 'subscribe') {
+ $params['hub.lease_seconds'] = $this->lease;
+ }
+ if ($token !== null) {
+ $params['hub.verify_token'] = $token;
+ }
+
+ // Any existing query string parameters must be preserved
+ $url = $this->callback;
+ if (strpos('?', $url) !== false) {
+ $url .= '&';
+ } else {
+ $url .= '?';
+ }
+ $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 {
+ throw new ClientException("Hub subscriber verification returned HTTP $status");
+ }
+
+ $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.
+ }
+ }
+ }
+
+ /**
+ * Insert wrapper; transparently set the hash key from topic and callback columns.
+ * @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.
+ *
+ * Determination of which items to send should be done at
+ * a higher level; don't just shove in a complete feed!
+ *
+ * @param string $atom well-formed Atom feed
+ * @throws Exception (HTTP or general)
+ */
+ function push($atom)
+ {
+ $headers = array('Content-Type: application/atom+xml');
+ if ($this->secret) {
+ $hmac = hash_hmac('sha1', $atom, $this->secret);
+ $headers[] = "X-Hub-Signature: sha1=$hmac";
+ } else {
+ $hmac = '(none)';
+ }
+ common_log(LOG_INFO, "About to push feed to $this->callback for $this->topic, HMAC $hmac");
+
+ $request = new HTTPClient();
+ $request->setBody($atom);
+ $response = $request->post($this->callback, $headers);
+
+ 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
new file mode 100644
index 000000000..fcca1a252
--- /dev/null
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -0,0 +1,1516 @@
+<?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>
+ */
+
+class Ostatus_profile extends Memcached_DataObject
+{
+ public $__table = 'ostatus_profile';
+
+ public $uri;
+
+ public $profile_id;
+ public $group_id;
+
+ public $feeduri;
+ public $salmonuri;
+ public $avatar; // remote URL of the last avatar we saved
+
+ 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('uri' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'profile_id' => DB_DATAOBJECT_INT,
+ 'group_id' => DB_DATAOBJECT_INT,
+ '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,
+ 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ static function schemaDef()
+ {
+ 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, true, 'UNI'),
+ new ColumnDef('salmonuri', 'text',
+ null, true),
+ new ColumnDef('avatar', 'text',
+ null, true),
+ 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('uri' => 'K', 'profile_id' => 'U', 'group_id' => 'U', 'feeduri' => 'U');
+ }
+
+ function sequenceKey()
+ {
+ return array(false, false, 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;
+ }
+
+ /**
+ * Returns an ActivityObject describing this remote user or group profile.
+ * Can then be used to generate Atom chunks.
+ *
+ * @return ActivityObject
+ */
+ function asActivityObject()
+ {
+ if ($this->isGroup()) {
+ return ActivityObject::fromGroup($this->localGroup());
+ } else {
+ return ActivityObject::fromProfile($this->localProfile());
+ }
+ }
+
+ /**
+ * 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.
+ *
+ * @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)
+ {
+ if ($this->isGroup()) {
+ $noun = ActivityObject::fromGroup($this->localGroup());
+ return $noun->asString('activity:' . $element);
+ } else {
+ $noun = ActivityObject::fromProfile($this->localProfile());
+ return $noun->asString('activity:' . $element);
+ }
+ }
+
+ /**
+ * @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");
+ }
+ }
+
+ /**
+ * 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");
+ }
+
+ if ($this->subscribe()) {
+ if ($user->subscribeTo($this->localProfile())) {
+ $this->notify($user->getProfile(), ActivityVerb::FOLLOW, $this);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 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
+ */
+ public function subscribeRemoteToLocal(User $user)
+ {
+ if ($this->isGroup()) {
+ throw new ServerException("Remote groups can't subscribe to local users");
+ }
+
+ Subscription::start($this->localProfile(), $user->getProfile());
+
+ return true;
+ }
+
+ /**
+ * 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()
+ {
+ $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...");
+ }
+ }
+
+ /**
+ * 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() {
+ $feedsub = FeedSub::staticGet('uri', $this->feeduri);
+ if (!$feedsub) {
+ return true;
+ }
+ 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...");
+ }
+ }
+
+ /**
+ * Check if this remote profile has any active local subscriptions, and
+ * if not drop the PuSH subscription feed.
+ *
+ * @return boolean
+ */
+ public function garbageCollect()
+ {
+ if ($this->isGroup()) {
+ $members = $this->localGroup()->getMembers(0, 1);
+ $count = $members->N;
+ } else {
+ $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;
+ }
+ }
+
+ /**
+ * Send an Activity Streams notification to the remote Salmon endpoint,
+ * if so configured.
+ *
+ * @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($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';
+ $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(common_sql_now()));
+
+ $entry->element('activity:verb', null, $verb);
+ $entry->raw($actor->asAtomAuthor());
+ $entry->raw($actor->asActivityActor());
+ $entry->raw($object->asActivityNoun('object'));
+ $entry->elementEnd('entry');
+
+ $xml = $entry->getString();
+ common_log(LOG_INFO, "Posting to Salmon endpoint $this->salmonuri: $xml");
+
+ $salmon = new Salmon(); // ?
+ return $salmon->post($this->salmonuri, $xml, $actor);
+ }
+ return false;
+ }
+
+ /**
+ * 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->salmonuri) {
+ $salmon = new Salmon();
+ return $salmon->post($this->salmonuri, $this->notifyPrepXml($entry), $actor);
+ }
+
+ return false;
+ }
+
+ /**
+ * 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)
+ {
+ if ($this->salmonuri) {
+ $data = array('salmonuri' => $this->salmonuri,
+ 'entry' => $this->notifyPrepXml($entry),
+ 'actor' => $actor->id);
+
+ $qm = QueueManager::get();
+ return $qm->enqueue($data, 'salmon');
+ }
+
+ return false;
+ }
+
+ 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");
+ }
+ }
+
+ function getBestName()
+ {
+ if ($this->isGroup()) {
+ return $this->localGroup()->getBestName();
+ } else {
+ return $this->localProfile()->getBestName();
+ }
+ }
+
+ /**
+ * Read and post notices for updates from the feed.
+ * Currently assumes that all items in the feed are new,
+ * coming from a PuSH hub.
+ *
+ * @param DOMDocument $feed
+ */
+ public function processFeed($feed, $source)
+ {
+ $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
+ if ($entries->length == 0) {
+ common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring");
+ return;
+ }
+
+ for ($i = 0; $i < $entries->length; $i++) {
+ $entry = $entries->item($i);
+ $this->processEntry($entry, $feed, $source);
+ }
+ }
+
+ /**
+ * Process a posted entry from this feed source.
+ *
+ * @param DOMElement $entry
+ * @param DOMElement $feed for context
+ */
+ public function processEntry($entry, $feed, $source)
+ {
+ $activity = new Activity($entry, $feed);
+
+ if ($activity->verb == ActivityVerb::POST) {
+ $this->processPost($activity, $source);
+ } else {
+ common_log(LOG_INFO, "Ignoring activity with unrecognized verb $activity->verb");
+ }
+ }
+
+ /**
+ * 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
+ */
+ 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 = 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 {
+ // 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 {
+ 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) {
+ $sourceUrl = $activity->object->link;
+ } else if ($activity->link) {
+ $sourceUrl = $activity->link;
+ } else if (preg_match('!^https?://!', $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 {
+ $feeduri = $discover->discoverFromURL($profile_uri);
+ $hints['feedurl'] = $feeduri;
+ }
+
+ $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);
+ }
+
+ // Sheesh. Not a very nice feed! Let's try fingerpoken in the
+ // entries.
+
+ $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);
+
+ }
+
+ $author = ActivityUtils::child($entry, Activity::AUTHOR, Activity::ATOM);
+
+ if (!empty($author)) {
+ $authorObject = new ActivityObject($author);
+ return self::ensureActivityObjectProfile($authorObject, $hints);
+ }
+ }
+
+ // XXX: make some educated guesses here
+
+ throw new FeedSubException("Can't find enough profile information to make a feed.");
+ }
+
+ /**
+ *
+ * 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;
+ }
+ }
+ return $best->url;
+ } else if (array_key_exists('avatar', $hints)) {
+ return $hints['avatar'];
+ }
+ return false;
+ }
+
+ /**
+ * Get an appropriate avatar image source URL, if available.
+ *
+ * @param ActivityObject $actor
+ * @param DOMElement $feed
+ * @return string
+ */
+
+ protected static function getAvatar($actor, $feed)
+ {
+ $url = '';
+ $icon = '';
+ if ($actor->avatar) {
+ $url = trim($actor->avatar);
+ }
+ if (!$url) {
+ // Check <atom:logo> and <atom:icon> on the feed
+ $els = $feed->childNodes();
+ if ($els && $els->length) {
+ for ($i = 0; $i < $els->length; $i++) {
+ $el = $els->item($i);
+ if ($el->namespaceURI == Activity::ATOM) {
+ if (empty($url) && $el->localName == 'logo') {
+ $url = trim($el->textContent);
+ break;
+ }
+ if (empty($icon) && $el->localName == 'icon') {
+ // Use as a fallback
+ $icon = trim($el->textContent);
+ }
+ }
+ }
+ }
+ if ($icon && !$url) {
+ $url = $icon;
+ }
+ }
+ if ($url) {
+ $opts = array('allowed_schemes' => array('http', 'https'));
+ if (Validate::uri($url, $opts)) {
+ return $url;
+ }
+ }
+ return common_path('plugins/OStatus/images/96px-Feed-icon.svg.png');
+ }
+
+ /**
+ * 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
+ */
+
+ public static function ensureActorProfile($activity, $hints=array())
+ {
+ 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;
+ }
+
+ /**
+ * @param Activity $activity
+ * @return mixed matching Ostatus_profile or false if none known
+ */
+ public static function getActorProfile($activity)
+ {
+ return self::getActivityObjectProfile($activity->actor);
+ }
+
+ protected static function getActivityObjectProfile($object)
+ {
+ $uri = self::getActivityObjectProfileURI($object);
+ return Ostatus_profile::staticGet('uri', $uri);
+ }
+
+ protected static function getActorProfileURI($activity)
+ {
+ return self::getActivityObjectProfileURI($activity->actor);
+ }
+
+ /**
+ * @param Activity $activity
+ * @return string
+ * @throws ServerException
+ */
+ protected static function getActivityObjectProfileURI($object)
+ {
+ $opts = array('allowed_schemes' => array('http', 'https'));
+ if ($object->id && Validate::uri($object->id, $opts)) {
+ return $object->id;
+ }
+ 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
+ */
+ protected static function createActivityObjectProfile($object, $hints=array())
+ {
+ $homeuri = $object->id;
+ $discover = false;
+
+ if (!$homeuri) {
+ common_log(LOG_DEBUG, __METHOD__ . " empty actor profile URI: " . var_export($activity, true));
+ throw new ServerException("No profile URI");
+ }
+
+ if (array_key_exists('feedurl', $hints)) {
+ $feeduri = $hints['feedurl'];
+ } else {
+ $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();
+ }
+
+ $oprofile = new Ostatus_profile();
+
+ $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");
+ }
+ }
+
+ /**
+ * Save any updated profile information to our local copy.
+ * @param ActivityObject $object
+ * @param array $hints
+ */
+ public function updateFromActivityObject($object, $hints=array())
+ {
+ 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;
+ }
+ }
+
+ // @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/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/FeedSub/images/24px-Feed-icon.svg.png b/plugins/OStatus/images/24px-Feed-icon.svg.png
index 317225814..317225814 100644
--- a/plugins/FeedSub/images/24px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/24px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/48px-Feed-icon.svg.png b/plugins/OStatus/images/48px-Feed-icon.svg.png
index bd1da4f91..bd1da4f91 100644
--- a/plugins/FeedSub/images/48px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/48px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/96px-Feed-icon.svg.png b/plugins/OStatus/images/96px-Feed-icon.svg.png
index bf16571ec..bf16571ec 100644
--- a/plugins/FeedSub/images/96px-Feed-icon.svg.png
+++ b/plugins/OStatus/images/96px-Feed-icon.svg.png
Binary files differ
diff --git a/plugins/FeedSub/images/README b/plugins/OStatus/images/README
index d9379c23e..d9379c23e 100644
--- a/plugins/FeedSub/images/README
+++ b/plugins/OStatus/images/README
diff --git a/plugins/OStatus/js/ostatus.js b/plugins/OStatus/js/ostatus.js
new file mode 100644
index 000000000..bd29b5c0c
--- /dev/null
+++ b/plugins/OStatus/js/ostatus.js
@@ -0,0 +1,102 @@
+/*
+ * 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_settings');
+ if (f.length > 0) {
+ f.show();
+ }
+ else {
+ $.ajax({
+ type: 'GET',
+ dataType: 'xml',
+ url: a[0].href + ((a[0].href.match(/[\\?]/) === null)?'?':'&') + 'ajax=1',
+ beforeSend: function(formData) {
+ a.addClass('processing');
+ },
+ error: function (xhr, textStatus, errorThrown) {
+ alert(errorThrown || textStatus);
+ },
+ success: function(data, textStatus, xhr) {
+ if (typeof($('form', data)[0]) != 'undefined') {
+ a.after(document._importNode($('form', data)[0], true));
+
+ var form = a.parent().find('.form_settings');
+
+ form
+ .addClass('dialogbox')
+ .append('<button class="close">&#215;</button>');
+
+ form
+ .find('.submit')
+ .addClass('submit_dialogbox')
+ .removeClass('submit')
+ .bind('click', function() {
+ form.addClass('processing');
+ });
+
+ form.find('button.close').click(function(){
+ form.hide();
+
+ return false;
+ });
+
+ 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');
+ }
+ });
+ }
+ }
+};
+
+SN.Init.Subscribe = function() {
+ $('.entity_subscribe .entity_remote_subscribe').live('click', function() { SN.U.DialogBox.Subscribe($(this)); return false; });
+};
+
+$(document).ready(function() {
+ SN.Init.Subscribe();
+
+ $('.form_remote_authorize').bind('submit', function() { $(this).addClass(SN.C.S.Processing); return true; });
+});
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/FeedSub/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
index 35edaca33..7afb71bdc 100644
--- a/plugins/FeedSub/feeddiscovery.php
+++ b/plugins/OStatus/lib/feeddiscovery.php
@@ -48,23 +48,47 @@ 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.
+ *
+ * @example
+ * $feed = new FeedDiscovery();
+ * if ($feed->discoverFromURL($url)) {
+ * print $feed->uri;
+ * print $feed->type;
+ * 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);
}
/**
* @param string $url
- * @param bool $htmlOk
+ * @param bool $htmlOk pass false here if you don't want to follow web pages.
* @return string with validated URL
* @throws FeedSubBadURLException
* @throws FeedSubBadHtmlException
@@ -78,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);
}
@@ -95,7 +120,12 @@ class FeedDiscovery
return $this->initFromResponse($response);
}
-
+
+ function discoverFromFeedURL($url)
+ {
+ return $this->discoverFromURL($url, false);
+ }
+
function initFromResponse($response)
{
if (!$response->isOk()) {
@@ -110,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
@@ -156,7 +196,13 @@ class FeedDiscovery
}
// Ok... now on to the links!
+ // Types listed in order of priority -- we'll prefer Atom if available.
// @fixme merge with the munger link checks
+ $feeds = array(
+ 'application/atom+xml' => false,
+ 'application/rss+xml' => false,
+ );
+
$nodes = $dom->getElementsByTagName('link');
for ($i = 0; $i < $nodes->length; $i++) {
$node = $nodes->item($i);
@@ -169,17 +215,21 @@ class FeedDiscovery
$type = trim($type->value);
$href = trim($href->value);
- $feedTypes = array(
- 'application/rss+xml',
- 'application/atom+xml',
- );
- if (trim($rel) == 'alternate' && in_array($type, $feedTypes)) {
- return $this->resolveURI($href, $base);
+ if (trim($rel) == 'alternate' && array_key_exists($type, $feeds) && empty($feeds[$type])) {
+ // Save the first feed found of each type...
+ $feeds[$type] = $this->resolveURI($href, $base);
}
}
}
}
+ // Return the highest-priority feed found
+ foreach ($feeds as $type => $url) {
+ if ($url) {
+ return $url;
+ }
+ }
+
return false;
}
diff --git a/plugins/OStatus/lib/hubconfqueuehandler.php b/plugins/OStatus/lib/hubconfqueuehandler.php
new file mode 100644
index 000000000..c8e0b72fe
--- /dev/null
+++ b/plugins/OStatus/lib/hubconfqueuehandler.php
@@ -0,0 +1,54 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a PuSH subscription verification from our internal hub.
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubConfQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ 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, $token);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Failed PuSH $mode verify to $sub->callback for $sub->topic: " .
+ $e->getMessage());
+ // @fixme schedule retry?
+ // @fixme just kill it?
+ }
+
+ return true;
+ }
+}
+
diff --git a/plugins/OStatus/lib/huboutqueuehandler.php b/plugins/OStatus/lib/huboutqueuehandler.php
new file mode 100644
index 000000000..3ad94646e
--- /dev/null
+++ b/plugins/OStatus/lib/huboutqueuehandler.php
@@ -0,0 +1,60 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Send a raw PuSH atom update from our internal hub.
+ * @package Hub
+ * @author Brion Vibber <brion@status.net>
+ */
+class HubOutQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'hubout';
+ }
+
+ function handle($data)
+ {
+ $sub = $data['sub'];
+ $atom = $data['atom'];
+ $retries = $data['retries'];
+
+ assert($sub instanceof HubSub);
+ assert(is_string($atom));
+
+ try {
+ $sub->push($atom);
+ } catch (Exception $e) {
+ $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/ostatusqueuehandler.php b/plugins/OStatus/lib/ostatusqueuehandler.php
new file mode 100644
index 000000000..d1e58f1d6
--- /dev/null
+++ b/plugins/OStatus/lib/ostatusqueuehandler.php
@@ -0,0 +1,186 @@
+<?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/>.
+ */
+
+/**
+ * Prepare PuSH and Salmon distributions for an outgoing message.
+ *
+ * @package OStatusPlugin
+ * @author Brion Vibber <brion@status.net>
+ */
+class OStatusQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'ostatus';
+ }
+
+ function handle($notice)
+ {
+ assert($notice instanceof Notice);
+
+ $this->notice = $notice;
+ $this->user = User::staticGet($notice->profile_id);
+
+ $this->pushUser();
+
+ foreach ($notice->getGroups() as $group) {
+ $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()
+ {
+ 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($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);
+ }
+
+ 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);
+ }
+ }
+
+ /**
+ * @param string $feed URI to the feed
+ * @param callable $callback function to generate Atom feed update if needed
+ * any additional params are passed to the callback.
+ */
+ function pushFeed($feed, $callback)
+ {
+ $hub = common_config('ostatus', 'hub');
+ if ($hub) {
+ $this->pushFeedExternal($feed, $hub);
+ }
+
+ $sub = new HubSub();
+ $sub->topic = $feed;
+ if ($sub->find()) {
+ $args = array_slice(func_get_args(), 2);
+ $atom = call_user_func_array($callback, $args);
+ $this->pushFeedInternal($atom, $sub);
+ } else {
+ common_log(LOG_INFO, "No PuSH subscribers for $feed");
+ }
+ return true;
+ }
+
+ /**
+ * Ping external hub about this update.
+ * The hub will pull the feed and check for new items later.
+ * Not guaranteed safe in an environment with database replication.
+ *
+ * @param string $feed feed topic URI
+ * @param string $hub PuSH hub URI
+ * @fixme can consolidate pings for user & group posts
+ */
+ function pushFeedExternal($feed, $hub)
+ {
+ $client = new HTTPClient();
+ try {
+ $data = array('hub.mode' => 'publish',
+ 'hub.url' => $feed);
+ $response = $client->post($hub, array(), $data);
+ if ($response->getStatus() == 204) {
+ common_log(LOG_INFO, "PuSH ping to hub $hub for $feed ok");
+ return true;
+ } else {
+ common_log(LOG_ERR, "PuSH ping to hub $hub for $feed failed with HTTP " .
+ $response->getStatus() . ': ' .
+ $response->getBody());
+ }
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "PuSH ping to hub $hub for $feed failed: " . $e->getMessage());
+ return false;
+ }
+ }
+
+ /**
+ * Queue up direct feed update pushes to subscribers on our internal hub.
+ * @param string $atom update feed, containing only new/changed items
+ * @param HubSub $sub open query of subscribers
+ */
+ function pushFeedInternal($atom, $sub)
+ {
+ common_log(LOG_INFO, "Preparing $sub->N PuSH distribution(s) for $sub->topic");
+ while ($sub->fetch()) {
+ $sub->distribute($atom);
+ }
+ }
+
+ /**
+ * Build a single-item version of the sending user's Atom feed.
+ * @return string
+ */
+ function userFeedForNotice()
+ {
+ $atom = new AtomUserNoticeFeed($this->user);
+ $atom->addEntryFromNotice($this->notice);
+ $feed = $atom->getString();
+
+ return $feed;
+ }
+
+ function groupFeedForNotice($group_id)
+ {
+ $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
new file mode 100644
index 000000000..3d3341bc6
--- /dev/null
+++ b/plugins/OStatus/lib/salmon.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+class Salmon
+{
+
+ 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;
+ }
+
+ 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/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, $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($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/xrd.php b/plugins/OStatus/lib/xrd.php
new file mode 100644
index 000000000..aa13ef024
--- /dev/null
+++ b/plugins/OStatus/lib/xrd.php
@@ -0,0 +1,193 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package StatusNet
+ * @author James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+
+
+class XRD
+{
+ const XML_NS = 'http://www.w3.org/2000/xmlns/';
+
+ const XRD_NS = 'http://docs.oasis-open.org/ns/xri/xrd-1.0';
+
+ const HOST_META_NS = 'http://host-meta.net/xrd/1.0';
+
+ public $expires;
+
+ public $subject;
+
+ public $host;
+
+ public $alias = array();
+
+ public $types = array();
+
+ public $links = array();
+
+ public static function parse($xml)
+ {
+ $xrd = new XRD();
+
+ $dom = new DOMDocument();
+ 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);
+ if ($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;
+ break;
+ case 'Subject':
+ $xrd->subject = $node->nodeValue;
+ break;
+
+ case 'Alias':
+ $xrd->alias[] = $node->nodeValue;
+ break;
+
+ case 'Link':
+ $xrd->links[] = $xrd->parseLink($node);
+ break;
+
+ case 'Type':
+ $xrd->types[] = $xrd->parseType($node);
+ break;
+
+ }
+ }
+ return $xrd;
+ }
+
+ public function toXML()
+ {
+ $dom = new DOMDocument('1.0', 'UTF-8');
+ $dom->formatOutput = true;
+
+ $xrd_dom = $dom->createElementNS(XRD::XRD_NS, 'XRD');
+ $dom->appendChild($xrd_dom);
+
+ if ($this->host) {
+ $host_dom = $dom->createElement('hm:Host', $this->host);
+ $xrd_dom->setAttributeNS(XRD::XML_NS, 'xmlns:hm', XRD::HOST_META_NS);
+ $xrd_dom->appendChild($host_dom);
+ }
+
+ if ($this->expires) {
+ $expires_dom = $dom->createElement('Expires', $this->expires);
+ $xrd_dom->appendChild($expires_dom);
+ }
+
+ if ($this->subject) {
+ $subject_dom = $dom->createElement('Subject', $this->subject);
+ $xrd_dom->appendChild($subject_dom);
+ }
+
+ foreach ($this->alias as $alias) {
+ $alias_dom = $dom->createElement('Alias', $alias);
+ $xrd_dom->appendChild($alias_dom);
+ }
+
+ foreach ($this->types as $type) {
+ $type_dom = $dom->createElement('Type', $type);
+ $xrd_dom->appendChild($type_dom);
+ }
+
+ foreach ($this->links as $link) {
+ $link_dom = $this->saveLink($dom, $link);
+ $xrd_dom->appendChild($link_dom);
+ }
+
+ return $dom->saveXML();
+ }
+
+ function parseType($element)
+ {
+ return array();
+ }
+
+ function parseLink($element)
+ {
+ $link = array();
+ $link['rel'] = $element->getAttribute('rel');
+ $link['type'] = $element->getAttribute('type');
+ $link['href'] = $element->getAttribute('href');
+ $link['template'] = $element->getAttribute('template');
+ foreach ($element->childNodes as $node) {
+ if ($node instanceof DOMElement) {
+ switch($node->tagName) {
+ case 'Title':
+ $link['title'][] = $node->nodeValue;
+ }
+ }
+ }
+
+ return $link;
+ }
+
+ function saveLink($doc, $link)
+ {
+ $link_element = $doc->createElement('Link');
+ if (!empty($link['rel'])) {
+ $link_element->setAttribute('rel', $link['rel']);
+ }
+ if (!empty($link['type'])) {
+ $link_element->setAttribute('type', $link['type']);
+ }
+ if (!empty($link['href'])) {
+ $link_element->setAttribute('href', $link['href']);
+ }
+ if (!empty($link['template'])) {
+ $link_element->setAttribute('template', $link['template']);
+ }
+
+ if (!empty($link['title']) && is_array($link['title'])) {
+ foreach($link['title'] as $title) {
+ $title = $doc->createElement('Title', $title);
+ $link_element->appendChild($title);
+ }
+ }
+
+
+ return $link_element;
+ }
+}
+
diff --git a/plugins/OStatus/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
new file mode 100644
index 000000000..7e33a0eed
--- /dev/null
+++ b/plugins/OStatus/locale/OStatus.po
@@ -0,0 +1,312 @@
+# 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"
+
+#: 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 ""
+
+#: actions/groupsalmon.php:126 actions/groupsalmon.php:169
+msgid "Groups can't join groups."
+msgstr ""
+
+#: actions/groupsalmon.php:153
+#, php-format
+msgid "Could not join remote user %1$s to group %2$s."
+msgstr ""
+
+#: actions/groupsalmon.php:166
+msgid "Can't read profile to cancel group membership."
+msgstr ""
+
+#: 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/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/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/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/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/ostatussub.php:304
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/ostatussub.php:306
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/ostatussub.php:308
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/ostatussub.php:310
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/ostatussub.php:312
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: 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 ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatussub.php:346
+msgid "Remote group join failed!"
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatussub.php:350
+msgid "Remote group join aborted!"
+msgstr ""
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:356
+msgid "Already subscribed!"
+msgstr ""
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:361
+msgid "Remote subscription failed!"
+msgstr ""
+
+#. 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 ""
+
+#: 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/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
index f17dfa50a..f17dfa50a 100644
--- a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
+++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
diff --git a/plugins/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/FeedSub/tests/FeedDiscoveryTest.php b/plugins/OStatus/tests/FeedDiscoveryTest.php
index 1c5249701..1c5249701 100644
--- a/plugins/FeedSub/tests/FeedDiscoveryTest.php
+++ b/plugins/OStatus/tests/FeedDiscoveryTest.php
diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/OStatus/tests/gettext-speedtest.php
index 8bbdf5e89..8bbdf5e89 100644
--- a/plugins/FeedSub/tests/gettext-speedtest.php
+++ b/plugins/OStatus/tests/gettext-speedtest.php
diff --git a/plugins/OStatus/theme/base/css/ostatus.css b/plugins/OStatus/theme/base/css/ostatus.css
new file mode 100644
index 000000000..c2d724158
--- /dev/null
+++ b/plugins/OStatus/theme/base/css/ostatus.css
@@ -0,0 +1,74 @@
+/** theme: base for OStatus
+ *
+ * @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/
+ */
+
+#form_ostatus_connect.dialogbox,
+#form_ostatus_sub.dialogbox {
+width:70%;
+background-image:none;
+}
+#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_sub.dialogbox .form_data input {
+width:57%;
+}
+#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_sub.dialogbox #ostatus_nickname {
+display:none;
+}
+
+#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/finishopenidlogin.php b/plugins/OpenID/finishopenidlogin.php
index d25ce696c..438a728d8 100644
--- a/plugins/OpenID/finishopenidlogin.php
+++ b/plugins/OpenID/finishopenidlogin.php
@@ -438,49 +438,7 @@ class FinishopenidloginAction extends Action
function urlToNickname($openid)
{
- static $bad = array('query', 'user', 'password', 'port', 'fragment');
-
- $parts = parse_url($openid);
-
- # If any of these parts exist, this won't work
-
- foreach ($bad as $badpart) {
- if (array_key_exists($badpart, $parts)) {
- return null;
- }
- }
-
- # We just have host and/or path
-
- # If it's just a host...
- if (array_key_exists('host', $parts) &&
- (!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0))
- {
- $hostparts = explode('.', $parts['host']);
-
- # Try to catch common idiom of nickname.service.tld
-
- if ((count($hostparts) > 2) &&
- (strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au
- (strcmp($hostparts[0], 'www') != 0))
- {
- return $this->nicknamize($hostparts[0]);
- } else {
- # Do the whole hostname
- return $this->nicknamize($parts['host']);
- }
- } else {
- if (array_key_exists('path', $parts)) {
- # Strip starting, ending slashes
- $path = preg_replace('@/$@', '', $parts['path']);
- $path = preg_replace('@^/@', '', $path);
- if (strpos($path, '/') === false) {
- return $this->nicknamize($path);
- }
- }
- }
-
- return null;
+ return common_url_to_nickname($openid);
}
function xriToNickname($xri)
@@ -510,7 +468,6 @@ class FinishopenidloginAction extends Action
function nicknamize($str)
{
- $str = preg_replace('/\W/', '', $str);
- return strtolower($str);
+ return common_nicknamize($str);
}
}
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/OpenX/OpenXPlugin.php b/plugins/OpenX/OpenXPlugin.php
new file mode 100644
index 000000000..59485f25d
--- /dev/null
+++ b/plugins/OpenX/OpenXPlugin.php
@@ -0,0 +1,165 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin for OpenX ad server
+ *
+ * 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 Ads
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Plugin for OpenX Ad Server
+ *
+ * This plugin supports the OpenX ad server, http://www.openx.org/
+ *
+ * We support the 4 ad sizes for the Universal Ad Platform (UAP):
+ *
+ * Medium Rectangle
+ * (Small) Rectangle
+ * Leaderboard
+ * Wide Skyscraper
+ *
+ * They fit in different places on the default theme. Some themes
+ * might interact quite poorly with this plugin.
+ *
+ * To enable advertising, you will need an OpenX server. You'll need
+ * to set up a "zone" for your StatusNet site that identifies a
+ * kind of ad you want to place (of the above 4 sizes).
+ *
+ * Add the plugin to config.php like so:
+ *
+ * addPlugin('OpenX', array('adScript' => 'full path to script',
+ * 'rectangle' => 1));
+ *
+ * Here, the 'adScript' parameter is the full path to the OpenX
+ * ad script, like 'http://example.com/www/delivery/ajs.php'. Note
+ * that we don't do any magic to swap between HTTP and HTTPS, so
+ * if you want HTTPS, say so.
+ *
+ * The 'rectangle' parameter is the zone ID for that ad space on
+ * your site. If you've configured another size, try 'mediumRectangle',
+ * 'leaderboard', or 'wideSkyscraper'.
+ *
+ * If for some reason your ad server is different from the default,
+ * use the 'adScript' parameter to set the full path to the ad script.
+ *
+ * @category Ads
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @seeAlso UAPPlugin
+ */
+
+class OpenXPlugin extends UAPPlugin
+{
+ public $adScript = null;
+
+ /**
+ * Show a medium rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showMediumRectangle($action)
+ {
+ $this->showAd($action, $this->mediumRectangle);
+ }
+
+ /**
+ * Show a rectangle 'ad'
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showRectangle($action)
+ {
+ $this->showAd($action, $this->rectangle);
+ }
+
+ /**
+ * Show a wide skyscraper ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showWideSkyscraper($action)
+ {
+ $this->showAd($action, $this->wideSkyscraper);
+ }
+
+ /**
+ * Show a leaderboard ad
+ *
+ * @param Action $action Action being shown
+ *
+ * @return void
+ */
+
+ protected function showLeaderboard($action)
+ {
+ $this->showAd($action, $this->leaderboard);
+ }
+
+ /**
+ * Show an ad using OpenX
+ *
+ * @param Action $action Action being shown
+ * @param integer $zone Zone to show
+ *
+ * @return void
+ */
+
+ protected function showAd($action, $zone)
+ {
+$scr = <<<ENDOFSCRIPT
+var m3_u = '%s';
+var m3_r = Math.floor(Math.random()*99999999999);
+if (!document.MAX_used) document.MAX_used = ',';
+document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
+document.write ("?zoneid=%d");
+document.write ('&amp;cb=' + m3_r);
+if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
+document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
+document.write ("&amp;loc=" + escape(window.location));
+if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
+if (document.context) document.write ("&context=" + escape(document.context));
+if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
+document.write ("'><\/scr"+"ipt>");
+ENDOFSCRIPT;
+
+ $action->inlineScript(sprintf($scr, $this->adScript, $zone));
+ return true;
+ }
+} \ No newline at end of file
diff --git a/plugins/Orbited/OrbitedPlugin.php b/plugins/Orbited/OrbitedPlugin.php
index ba87b266a..8af71af74 100644
--- a/plugins/Orbited/OrbitedPlugin.php
+++ b/plugins/Orbited/OrbitedPlugin.php
@@ -77,9 +77,9 @@ class OrbitedPlugin extends RealtimePlugin
$root = 'http://'.$server.(($port == 80) ? '':':'.$port);
$scripts[] = $root.'/static/Orbited.js';
- $scripts[] = common_path('plugins/Orbited/orbitedextra.js');
+ $scripts[] = 'plugins/Orbited/orbitedextra.js';
$scripts[] = $root.'/static/protocols/stomp/stomp.js';
- $scripts[] = common_path('plugins/Orbited/orbitedupdater.js');
+ $scripts[] = 'plugins/Orbited/orbitedupdater.js';
return $scripts;
}
diff --git a/plugins/PostDebug/PostDebugPlugin.php b/plugins/PostDebug/PostDebugPlugin.php
new file mode 100644
index 000000000..48fe28eab
--- /dev/null
+++ b/plugins/PostDebug/PostDebugPlugin.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Debugging helper plugin -- records detailed data on POSTs to log
+ *
+ * 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 Sample
+ * @package StatusNet
+ * @author Brion Vibber <brionv@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);
+}
+
+class PostDebugPlugin extends Plugin
+{
+ /**
+ * Set to a directory to dump individual items instead of
+ * sending to the debug log
+ */
+ public $dir=false;
+
+ public function onArgsInitialize(&$args)
+ {
+ if (isset($_SERVER['REQUEST_METHOD']) &&
+ $_SERVER['REQUEST_METHOD'] == 'POST') {
+ $this->doDebug();
+ }
+ }
+
+ public function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'PostDebug',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => 'http://status.net/wiki/Plugin:PostDebug',
+ 'rawdescription' =>
+ _m('Debugging tool to record request details on POST.'));
+ return true;
+ }
+
+ protected function doDebug()
+ {
+ $data = array('timestamp' => gmdate('r'),
+ 'remote_addr' => @$_SERVER['REMOTE_ADDR'],
+ 'url' => @$_SERVER['REQUEST_URI'],
+ 'have_session' => common_have_session(),
+ 'logged_in' => common_logged_in(),
+ 'is_real_login' => common_is_real_login(),
+ 'user' => common_logged_in() ? common_current_user()->nickname : null,
+ 'headers' => $this->getHttpHeaders(),
+ 'post_data' => $this->sanitizePostData($_POST));
+ $this->saveDebug($data);
+ }
+
+ protected function saveDebug($data)
+ {
+ $output = var_export($data, true);
+ if ($this->dir) {
+ $file = $this->dir . DIRECTORY_SEPARATOR . $this->logFileName();
+ file_put_contents($file, $output);
+ } else {
+ common_log(LOG_DEBUG, "PostDebug: $output");
+ }
+ }
+
+ protected function logFileName()
+ {
+ $base = common_request_id();
+ $base = preg_replace('/^(.+?) .*$/', '$1', $base);
+ $base = str_replace(':', '-', $base);
+ $base = rawurlencode($base);
+ return $base;
+ }
+
+ protected function getHttpHeaders()
+ {
+ if (function_exists('getallheaders')) {
+ $headers = getallheaders();
+ } else {
+ $headers = array();
+ $prefix = 'HTTP_';
+ $prefixLen = strlen($prefix);
+ foreach ($_SERVER as $key => $val) {
+ if (substr($key, 0, $prefixLen) == $prefix) {
+ $header = $this->normalizeHeader(substr($key, $prefixLen));
+ $headers[$header] = $val;
+ }
+ }
+ }
+ foreach ($headers as $header => $val) {
+ if (strtolower($header) == 'cookie') {
+ $headers[$header] = $this->sanitizeCookies($val);
+ }
+ }
+ return $headers;
+ }
+
+ protected function normalizeHeader($key)
+ {
+ return implode('-',
+ array_map('ucfirst',
+ explode("_",
+ strtolower($key))));
+ }
+
+ function sanitizeCookies($val)
+ {
+ $blacklist = array(session_name(), 'rememberme');
+ foreach ($blacklist as $name) {
+ $val = preg_replace("/(^|;\s*)({$name}=)(.*?)(;|$)/",
+ "$1$2########$4",
+ $val);
+ }
+ return $val;
+ }
+
+ function sanitizePostData($data)
+ {
+ $blacklist = array('password', 'confirm', 'token');
+ foreach ($data as $key => $val) {
+ if (in_array($key, $blacklist)) {
+ $data[$key] = '########';
+ }
+ }
+ return $data;
+ }
+
+}
+
diff --git a/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php b/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
index c59fcca89..fb4eff738 100644
--- a/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
+++ b/plugins/PoweredByStatusNet/PoweredByStatusNetPlugin.php
@@ -45,9 +45,11 @@ class PoweredByStatusNetPlugin extends Plugin
{
function onEndAddressData($action)
{
+ $action->text(' ');
$action->elementStart('span', 'poweredby');
- $action->text(_('powered by'));
- $action->element('a', array('href' => 'http://status.net/'), 'StatusNet');
+ $action->raw(sprintf(_m('powered by %s'),
+ sprintf('<a href="http://status.net/">%s</a>',
+ _m('StatusNet'))));
$action->elementEnd('span');
return true;
diff --git a/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po b/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po
new file mode 100644
index 000000000..8f8434a85
--- /dev/null
+++ b/plugins/PoweredByStatusNet/locale/PoweredByStatusNet.po
@@ -0,0 +1,32 @@
+# 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"
+
+#: PoweredByStatusNetPlugin.php:50
+#, php-format
+msgid "powered by %s"
+msgstr ""
+
+#: PoweredByStatusNetPlugin.php:52
+msgid "StatusNet"
+msgstr ""
+
+#: PoweredByStatusNetPlugin.php:65
+msgid ""
+"Outputs powered by <a href=\"http://status.net/\">StatusNet</a> after site "
+"name."
+msgstr ""
diff --git a/plugins/PubSubHubBub/PubSubHubBubPlugin.php b/plugins/PubSubHubBub/PubSubHubBubPlugin.php
deleted file mode 100644
index ce6086df9..000000000
--- a/plugins/PubSubHubBub/PubSubHubBubPlugin.php
+++ /dev/null
@@ -1,259 +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();
- }
-
- /**
- * 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)
- {
- $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)
- {
- $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)
- {
- $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)
- {
- $versions[] = array('name' => 'PubSubHubBub',
- 'version' => STATUSNET_VERSION,
- 'author' => 'Craig Andrews',
- 'homepage' =>
- 'http://status.net/wiki/Plugin:PubSubHubBub',
- 'rawdescription' =>
- _m('The PubSubHubBub plugin pushes RSS/Atom updates '.
- 'to a <a href = "'.
- 'http://pubsubhubbub.googlecode.com/'.
- '">PubSubHubBub</a> hub.'));
-
- 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 89640f5be..b559d80c6 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -117,7 +117,7 @@ class RealtimePlugin extends Plugin
function onEndShowStatusNetStyles($action)
{
- $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'),
+ $action->cssLink('plugins/Realtime/realtimeupdate.css',
null, 'screen, projection, tv');
return true;
}
@@ -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 56f869354..f43c97de5 100644
--- a/plugins/Realtime/realtimeupdate.css
+++ b/plugins/Realtime/realtimeupdate.css
@@ -18,7 +18,8 @@ display:none;
}
.realtime-popup #form_notice label[for=notice_data-attach],
-.realtime-popup #form_notice #notice_data-attach {
+.realtime-popup #form_notice #notice_data-attach,
+.realtime-popup #form_notice label[for=notice_data-geo] {
top:0;
}
@@ -63,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/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index 52151f9de..0f7a680d7 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -95,9 +95,7 @@ RealtimeUpdate = {
$("#notices_primary .notice:first").css({display:"none"});
$("#notices_primary .notice:first").fadeIn(1000);
- SN.U.FormXHR($('#'+noticeItemID+' .form_favor'));
SN.U.NoticeReplyTo($('#'+noticeItemID));
- SN.U.FormXHR($('#'+noticeItemID+' .form_repeat'));
SN.U.NoticeWithAttachment($('#'+noticeItemID));
},
@@ -132,11 +130,11 @@ RealtimeUpdate = {
user = data['user'];
html = data['html'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
source = data['source'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
-
+console.log(data);
ni = "<li class=\"hentry notice\" id=\"notice-"+unique+"\">"+
"<div class=\"entry-title\">"+
"<span class=\"vcard author\">"+
- "<a href=\""+user['profile_url']+"\" class=\"url\">"+
+ "<a href=\""+user['profile_url']+"\" class=\"url\" title=\""+user['name']+"\">"+
"<img src=\""+user['profile_image_url']+"\" class=\"avatar photo\" width=\"48\" height=\"48\" alt=\""+user['screen_name']+"\"/>"+
"<span class=\"nickname fn\">"+user['screen_name']+"</span>"+
"</a>"+
@@ -180,7 +178,7 @@ RealtimeUpdate = {
ni = ni+"</div>";
- "</li>";
+ ni = ni+"</li>";
return ni;
},
@@ -211,10 +209,10 @@ RealtimeUpdate = {
var rf;
rf = "<form id=\"repeat-"+id+"\" class=\"form_repeat\" method=\"post\" action=\""+RealtimeUpdate._repeaturl+"\">"+
"<fieldset>"+
- "<legend>Favor this notice</legend>"+
+ "<legend>Repeat this notice?</legend>"+
"<input name=\"token-"+id+"\" type=\"hidden\" id=\"token-"+id+"\" value=\""+session_key+"\"/>"+
- "<input name=\"notice\" type=\"hidden\" id=\"notice-n"+id+"\" value=\""+id+"\"/>"+
- "<input type=\"submit\" id=\"repeat-submit-"+id+"\" name=\"repeat-submit-"+id+"\" class=\"submit\" value=\"Favor\" title=\"Repeat this notice\"/>"+
+ "<input name=\"notice\" type=\"hidden\" id=\"notice-"+id+"\" value=\""+id+"\"/>"+
+ "<input type=\"submit\" id=\"repeat-submit-"+id+"\" name=\"repeat-submit-"+id+"\" class=\"submit\" value=\"Yes\" title=\"Repeat this notice\"/>"+
"</fieldset>"+
"</form>";
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/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php b/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
index d9d2137f8..dac5a1588 100644
--- a/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
+++ b/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
@@ -47,10 +47,13 @@ class ReverseUsernameAuthenticationPlugin extends AuthenticationPlugin
return $username == strrev($password);
}
- function autoRegister($username)
+ function autoRegister($username, $nickname)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$registration_data = array();
- $registration_data['nickname'] = $username ;
+ $registration_data['nickname'] = $nickname ;
return User::register($registration_data);
}
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/Sign-in-with-Twitter-lighter.png b/plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png
new file mode 100644
index 000000000..297bb0340
--- /dev/null
+++ b/plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png
Binary files differ
diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php
index 57b3c1c99..1a0a69682 100644
--- a/plugins/TwitterBridge/TwitterBridgePlugin.php
+++ b/plugins/TwitterBridge/TwitterBridgePlugin.php
@@ -20,9 +20,10 @@
* @category Plugin
* @package StatusNet
* @author Zach Copley <zach@status.net>
- * @copyright 2009 Control Yourself, Inc.
+ * @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')) {
@@ -31,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
*
@@ -41,20 +40,67 @@ define('TWITTERBRIDGEPLUGIN_VERSION', '0.9');
* @category Plugin
* @package StatusNet
* @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;
}
/**
@@ -69,9 +115,48 @@ class TwitterBridgePlugin extends Plugin
function onRouterInitialized($m)
{
- $m->connect('twitter/authorization',
- array('action' => 'twitterauthorization'));
- $m->connect('settings/twitter', array('action' => 'twittersettings'));
+ $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;
+ }
+
+ /*
+ * Add a login tab for 'Sign in with Twitter'
+ *
+ * @param Action &action the current action
+ *
+ * @return void
+ */
+ function onEndLoginGroupNav(&$action)
+ {
+ $action_name = $action->trimmed('action');
+
+ 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;
}
@@ -85,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;
}
@@ -108,6 +196,8 @@ class TwitterBridgePlugin extends Plugin
switch ($cls) {
case 'TwittersettingsAction':
case 'TwitterauthorizationAction':
+ case 'TwitterloginAction':
+ case 'TwitteradminpanelAction':
include_once INSTALLDIR . '/plugins/TwitterBridge/' .
strtolower(mb_substr($cls, 0, -6)) . '.php';
return false;
@@ -131,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;
}
@@ -149,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;
@@ -169,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/daemons/synctwitterfriends.php b/plugins/TwitterBridge/daemons/synctwitterfriends.php
index 671e3c7af..df7da0943 100755
--- a/plugins/TwitterBridge/daemons/synctwitterfriends.php
+++ b/plugins/TwitterBridge/daemons/synctwitterfriends.php
@@ -221,7 +221,7 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
// Twitter friend
if (!save_twitter_user($friend_id, $friend_name)) {
- common_log(LOG_WARNING, $this-name() .
+ common_log(LOG_WARNING, $this->name() .
" - Couldn't save $screen_name's friend, $friend_name.");
continue;
}
diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
index 36732ce46..bff657eb6 100755
--- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
+++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
@@ -2,7 +2,7 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -262,7 +262,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$notice->is_local = Notice::GATEWAY;
if (Event::handle('StartNoticeSave', array(&$notice))) {
- $id = $notice->insert();
+ $notice->insert();
Event::handle('EndNoticeSave', array($notice));
}
@@ -270,17 +270,41 @@ class TwitterStatusFetcher extends ParallelizingDaemon
Inbox::insertNotice($flink->user_id, $notice->id);
- $notice->blowCaches();
+ $notice->blowOnInsert();
return $notice;
}
+ /**
+ * Look up a Profile by profileurl field. Profile::staticGet() was
+ * not working consistently.
+ *
+ * @param string $url the profile url
+ *
+ * @return mixed the first profile with that url, or null
+ */
+
+ function getProfileByUrl($nickname, $profileurl)
+ {
+ $profile = new Profile();
+ $profile->nickname = $nickname;
+ $profile->profileurl = $profileurl;
+ $profile->limit(1);
+
+ if ($profile->find()) {
+ $profile->fetch();
+ return $profile;
+ }
+
+ return null;
+ }
+
function ensureProfile($user)
{
// check to see if there's already a profile for this user
$profileurl = 'http://twitter.com/' . $user->screen_name;
- $profile = Profile::staticGet('profileurl', $profileurl);
+ $profile = $this->getProfileByUrl($user->screen_name, $profileurl);
if (!empty($profile)) {
common_debug($this->name() .
@@ -292,6 +316,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
return $profile->id;
} else {
+
common_debug($this->name() . ' - Adding profile and remote profile ' .
"for Twitter user: $profileurl.");
@@ -306,7 +331,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$profile->profileurl = $profileurl;
$profile->created = common_sql_now();
- $id = $profile->insert();
+ try {
+ $id = $profile->insert();
+ } catch(Exception $e) {
+ common_log(LOG_WARNING, $this->name . ' Couldn\'t insert profile - ' . $e->getMessage());
+ }
if (empty($id)) {
common_log_db_error($profile, 'INSERT', __FILE__);
@@ -326,7 +355,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$remote_pro->uri = $profileurl;
$remote_pro->created = common_sql_now();
- $rid = $remote_pro->insert();
+ try {
+ $rid = $remote_pro->insert();
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, $this->name() . ' Couldn\'t save remote profile - ' . $e->getMessage());
+ }
if (empty($rid)) {
common_log_db_error($profile, 'INSERT', __FILE__);
@@ -446,7 +479,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
if ($this->fetchAvatar($url, $filename)) {
$this->newAvatar($id, $size, $mediatype, $filename);
} else {
- common_log(LOG_WARNING, $this->id() .
+ common_log(LOG_WARNING, $id() .
" - Problem fetching Avatar: $url");
}
}
@@ -507,7 +540,11 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$avatar->created = common_sql_now();
- $id = $avatar->insert();
+ try {
+ $id = $avatar->insert();
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, $this->name() . ' Couldn\'t insert avatar - ' . $e->getMessage());
+ }
if (empty($id)) {
common_log_db_error($avatar, 'INSERT', __FILE__);
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/twitter.php b/plugins/TwitterBridge/twitter.php
index 33dfb788b..2805b3ab5 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -1,7 +1,7 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010 StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -26,62 +26,24 @@ define('TWITTER_SERVICE', 1); // Twitter is foreign_service ID 1
require_once INSTALLDIR . '/plugins/TwitterBridge/twitterbasicauthclient.php';
require_once INSTALLDIR . '/plugins/TwitterBridge/twitteroauthclient.php';
-function updateTwitter_user($twitter_id, $screen_name)
-{
- $uri = 'http://twitter.com/' . $screen_name;
- $fuser = new Foreign_user();
-
- $fuser->query('BEGIN');
-
- // Dropping down to SQL because regular DB_DataObject udpate stuff doesn't seem
- // to work so good with tables that have multiple column primary keys
-
- // Any time we update the uri for a forein user we have to make sure there
- // are no dupe entries first -- unique constraint on the uri column
-
- $qry = 'UPDATE foreign_user set uri = \'\' WHERE uri = ';
- $qry .= '\'' . $uri . '\'' . ' AND service = ' . TWITTER_SERVICE;
-
- $fuser->query($qry);
-
- // Update the user
-
- $qry = 'UPDATE foreign_user SET nickname = ';
- $qry .= '\'' . $screen_name . '\'' . ', uri = \'' . $uri . '\' ';
- $qry .= 'WHERE id = ' . $twitter_id . ' AND service = ' . TWITTER_SERVICE;
-
- $fuser->query('COMMIT');
-
- $fuser->free();
- unset($fuser);
-
- return true;
-}
-
function add_twitter_user($twitter_id, $screen_name)
{
-
- $new_uri = 'http://twitter.com/' . $screen_name;
-
// Clear out any bad old foreign_users with the new user's legit URL
// This can happen when users move around or fakester accounts get
// repoed, and things like that.
- $luser = new Foreign_user();
- $luser->uri = $new_uri;
- $luser->service = TWITTER_SERVICE;
- $result = $luser->delete();
+ $luser = Foreign_user::getForeignUser($twitter_id, TWITTER_SERVICE);
- if (empty($result)) {
- common_log(LOG_WARNING,
- "Twitter bridge - removed invalid Twitter user squatting on uri: $new_uri");
+ if (!empty($luser)) {
+ $result = $luser->delete();
+ if ($result != false) {
+ common_log(
+ LOG_INFO,
+ "Twitter bridge - removed old Twitter user: $screen_name ($twitter_id)."
+ );
+ }
}
- $luser->free();
- unset($luser);
-
- // Otherwise, create a new Twitter user
-
$fuser = new Foreign_user();
$fuser->nickname = $screen_name;
@@ -96,7 +58,8 @@ function add_twitter_user($twitter_id, $screen_name)
"Twitter bridge - failed to add new Twitter user: $twitter_id - $screen_name.");
common_log_db_error($fuser, 'INSERT', __FILE__);
} else {
- common_debug("Twitter bridge - Added new Twitter user: $screen_name ($twitter_id).");
+ common_log(LOG_INFO,
+ "Twitter bridge - Added new Twitter user: $screen_name ($twitter_id).");
}
return $result;
@@ -105,7 +68,6 @@ function add_twitter_user($twitter_id, $screen_name)
// Creates or Updates a Twitter user
function save_twitter_user($twitter_id, $screen_name)
{
-
// Check to see whether the Twitter user is already in the system,
// and update its screen name and uri if so.
@@ -115,25 +77,20 @@ function save_twitter_user($twitter_id, $screen_name)
$result = true;
- // Only update if Twitter screen name has changed
+ // Delete old record if Twitter user changed screen name
if ($fuser->nickname != $screen_name) {
- $result = updateTwitter_user($twitter_id, $screen_name);
-
- common_debug('Twitter bridge - Updated nickname (and URI) for Twitter user ' .
- "$fuser->id to $screen_name, was $fuser->nickname");
+ $oldname = $fuser->nickname;
+ $fuser->delete();
+ common_log(LOG_INFO, sprintf('Twitter bridge - Updated nickname (and URI) ' .
+ 'for Twitter user %1$d - %2$s, was %3$s.',
+ $fuser->id,
+ $screen_name,
+ $oldname));
}
-
- return $result;
-
- } else {
- return add_twitter_user($twitter_id, $screen_name);
}
- $fuser->free();
- unset($fuser);
-
- return true;
+ return add_twitter_user($twitter_id, $screen_name);
}
function is_twitter_bound($notice, $flink) {
@@ -295,8 +252,17 @@ function format_status($notice)
$statustxt = preg_replace('/^@/', ' @', $notice->content);
// Convert !groups to #hashes
+
+ // XXX: Make this an optional setting?
+
$statustxt = preg_replace('/(^|\s)!([A-Za-z0-9]{1,64})/', "\\1#\\2", $statustxt);
+ if (mb_strlen($statustxt) > 140) {
+ $noticeUrl = common_shorten_url($notice->uri);
+ $urlLen = mb_strlen($noticeUrl);
+ $statustxt = mb_substr($statustxt, 0, 140 - ($urlLen + 3)) . ' … ' . $noticeUrl;
+ }
+
return $statustxt;
}
@@ -307,7 +273,7 @@ function remove_twitter_link($flink)
common_log(LOG_INFO, 'Removing Twitter bridge Foreign link for ' .
"user $user->nickname (user id: $user->id).");
- $result = $flink->delete();
+ $result = $flink->safeDelete();
if (empty($result)) {
common_log(LOG_ERR, 'Could not remove Twitter bridge ' .
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 4af2f0394..bc004cb95 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -19,10 +19,11 @@
* 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 TwitterauthorizationAction
+ * @category Plugin
* @package StatusNet
- * @author Zach Copely <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @author Zach Copley <zach@status.net>
+ * @author Julien C <chaumond@gmail.com>
+ * @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/
*/
@@ -41,15 +42,22 @@ require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
* (Foreign_link) between the StatusNet user and Twitter user and stores the
* access token and secret in the link.
*
- * @category Twitter
+ * @category Plugin
* @package StatusNet
* @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
{
+ var $twuid = null;
+ var $tw_fields = null;
+ var $access_token = null;
+ var $signin = null;
+ var $verifier = null;
+
/**
* Initialize class members. Looks for 'oauth_token' parameter.
*
@@ -61,7 +69,9 @@ class TwitterauthorizationAction extends Action
{
parent::prepare($args);
+ $this->signin = $this->boolean('signin');
$this->oauth_token = $this->arg('oauth_token');
+ $this->verifier = $this->arg('oauth_verifier');
return true;
}
@@ -77,28 +87,64 @@ class TwitterauthorizationAction extends Action
{
parent::handle($args);
- if (!common_logged_in()) {
- $this->clientError(_m('Not logged in.'), 403);
+ if (common_logged_in()) {
+ $user = common_current_user();
+ $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
+
+ // If there's already a foreign link record and a foreign user
+ // it means the accounts are already linked, and this is unecessary.
+ // So go back.
+
+ if (isset($flink)) {
+ $fuser = $flink->getForeignUser();
+ if (!empty($fuser)) {
+ common_redirect(common_local_url('twittersettings'));
+ }
+ }
}
- $user = common_current_user();
- $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- // If there's already a foreign link record, it means we already
- // have an access token, and this is unecessary. So go back.
+ // User was not logged in to StatusNet before
- if (isset($flink)) {
- common_redirect(common_local_url('twittersettings'));
- }
+ $this->twuid = $this->trimmed('twuid');
- // $this->oauth_token is only populated once Twitter authorizes our
- // request token. If it's empty we're at the beginning of the auth
- // process
+ $this->tw_fields = array('screen_name' => $this->trimmed('tw_fields_screen_name'),
+ 'fullname' => $this->trimmed('tw_fields_fullname'));
- if (empty($this->oauth_token)) {
- $this->authorizeRequestToken();
+ $this->access_token = new OAuthToken($this->trimmed('access_token_key'), $this->trimmed('access_token_secret'));
+
+ $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('create')) {
+ if (!$this->boolean('license')) {
+ $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+ $this->trimmed('newname'));
+ return;
+ }
+ $this->createNewUser();
+ } else if ($this->arg('connect')) {
+ $this->connectNewUser();
+ } else {
+ common_debug('Twitter bridge - ' . print_r($this->args, true));
+ $this->showForm(_('Something weird happened.'),
+ $this->trimmed('newname'));
+ }
} else {
- $this->saveAccessToken();
+ // $this->oauth_token is only populated once Twitter authorizes our
+ // request token. If it's empty we're at the beginning of the auth
+ // process
+
+ if (empty($this->oauth_token)) {
+ $this->authorizeRequestToken();
+ } else {
+ $this->saveAccessToken();
+ }
}
}
@@ -115,20 +161,25 @@ class TwitterauthorizationAction extends Action
// Get a new request token and authorize it
$client = new TwitterOAuthClient();
- $req_tok =
- $client->getRequestToken(TwitterOAuthClient::$requestTokenURL);
+ $req_tok = $client->getRequestToken();
// Sock the request token away in the session temporarily
$_SESSION['twitter_request_token'] = $req_tok->key;
$_SESSION['twitter_request_token_secret'] = $req_tok->secret;
- $auth_link = $client->getAuthorizeLink($req_tok);
+ $auth_link = $client->getAuthorizeLink($req_tok, $this->signin);
} catch (OAuthClientException $e) {
- $msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
- $e->getCode(), $e->getMessage());
- $this->serverError(_m('Couldn\'t link your Twitter account.'));
+ $msg = sprintf(
+ 'OAuth client error - code: %1s, msg: %2s',
+ $e->getCode(),
+ $e->getMessage()
+ );
+ common_log(LOG_INFO, 'Twitter bridge - ' . $msg);
+ $this->serverError(
+ _m('Couldn\'t link your Twitter account.')
+ );
}
common_redirect($auth_link);
@@ -142,14 +193,17 @@ class TwitterauthorizationAction extends Action
*/
function saveAccessToken()
{
-
// Check to make sure Twitter returned the same request
// token we sent them
if ($_SESSION['twitter_request_token'] != $this->oauth_token) {
- $this->serverError(_m('Couldn\'t link your Twitter account.'));
+ $this->serverError(
+ _m('Couldn\'t link your Twitter account: oauth_token mismatch.')
+ );
}
+ $twitter_user = null;
+
try {
$client = new TwitterOAuthClient($_SESSION['twitter_request_token'],
@@ -157,7 +211,7 @@ class TwitterauthorizationAction extends Action
// Exchange the request token for an access token
- $atok = $client->getAccessToken(TwitterOAuthClient::$accessTokenURL);
+ $atok = $client->getAccessToken($this->verifier);
// Test the access token and get the user's Twitter info
@@ -165,40 +219,70 @@ class TwitterauthorizationAction extends Action
$twitter_user = $client->verifyCredentials();
} catch (OAuthClientException $e) {
- $msg = sprintf('OAuth client cURL error - code: %1$s, msg: %2$s',
- $e->getCode(), $e->getMessage());
- $this->serverError(_m('Couldn\'t link your Twitter account.'));
+ $msg = sprintf(
+ 'OAuth client error - code: %1$s, msg: %2$s',
+ $e->getCode(),
+ $e->getMessage()
+ );
+ common_log(LOG_INFO, 'Twitter bridge - ' . $msg);
+ $this->serverError(
+ _m('Couldn\'t link your Twitter account.')
+ );
}
- // Save the access token and Twitter user info
+ if (common_logged_in()) {
+
+ // Save the access token and Twitter user info
+
+ $user = common_current_user();
+ $this->saveForeignLink($user->id, $twitter_user->id, $atok);
+ save_twitter_user($twitter_user->id, $twitter_user->screen_name);
+
+ } else {
- $this->saveForeignLink($atok, $twitter_user);
+ $this->twuid = $twitter_user->id;
+ $this->tw_fields = array("screen_name" => $twitter_user->screen_name,
+ "name" => $twitter_user->name);
+ $this->access_token = $atok;
+ $this->tryLogin();
+ }
// Clean up the the mess we made in the session
unset($_SESSION['twitter_request_token']);
unset($_SESSION['twitter_request_token_secret']);
- common_redirect(common_local_url('twittersettings'));
+ if (common_logged_in()) {
+ common_redirect(common_local_url('twittersettings'));
+ }
}
/**
* Saves a Foreign_link between Twitter user and local user,
* which includes the access token and secret.
*
- * @param OAuthToken $access_token the access token to save
- * @param mixed $twitter_user twitter API user object
+ * @param int $user_id StatusNet user ID
+ * @param int $twuid Twitter user ID
+ * @param OAuthToken $token the access token to save
*
* @return nothing
*/
- function saveForeignLink($access_token, $twitter_user)
+ function saveForeignLink($user_id, $twuid, $access_token)
{
- $user = common_current_user();
-
$flink = new Foreign_link();
- $flink->user_id = $user->id;
- $flink->foreign_id = $twitter_user->id;
+ $flink->user_id = $user_id;
+ $flink->service = TWITTER_SERVICE;
+
+ // delete stale flink, if any
+ $result = $flink->find(true);
+
+ if (!empty($result)) {
+ $flink->safeDelete();
+ }
+
+ $flink->user_id = $user_id;
+ $flink->foreign_id = $twuid;
$flink->service = TWITTER_SERVICE;
$creds = TwitterOAuthClient::packToken($access_token);
@@ -214,10 +298,330 @@ class TwitterauthorizationAction extends Action
if (empty($flink_id)) {
common_log_db_error($flink, 'INSERT', __FILE__);
- $this->serverError(_m('Couldn\'t link your Twitter account.'));
+ $this->serverError(_('Couldn\'t link your Twitter account.'));
+ }
+
+ return $flink_id;
+ }
+
+ function showPageNotice()
+ {
+ if ($this->error) {
+ $this->element('div', array('class' => 'error'), $this->error);
+ } else {
+ $this->element('div', 'instructions',
+ sprintf(_('This is the first time you\'ve logged into %s so we must connect your Twitter account to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+ }
+ }
+
+ function title()
+ {
+ return _('Twitter Account Setup');
+ }
+
+ function showForm($error=null, $username=null)
+ {
+ $this->error = $error;
+ $this->username = $username;
+
+ $this->showPage();
+ }
+
+ function showPage()
+ {
+ parent::showPage();
+ }
+
+ function showContent()
+ {
+ if (!empty($this->message_text)) {
+ $this->element('p', null, $this->message);
+ return;
+ }
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_settings_twitter_connect',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('twitterauthorization')));
+ $this->elementStart('fieldset', array('id' => 'settings_twitter_connect_options'));
+ $this->element('legend', null, _('Connection options'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->element('input', array('type' => 'checkbox',
+ 'id' => 'license',
+ 'class' => 'checkbox',
+ 'name' => 'license',
+ 'value' => 'true'));
+ $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
+ $this->text(_('My text and files are available under '));
+ $this->element('a', array('href' => common_config('license', 'url')),
+ common_config('license', 'title'));
+ $this->text(_(' except this private data: password, email address, IM address, phone number.'));
+ $this->elementEnd('label');
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->hidden('access_token_key', $this->access_token->key);
+ $this->hidden('access_token_secret', $this->access_token->secret);
+ $this->hidden('twuid', $this->twuid);
+ $this->hidden('tw_fields_screen_name', $this->tw_fields['screen_name']);
+ $this->hidden('tw_fields_name', $this->tw_fields['name']);
+
+ $this->elementStart('fieldset');
+ $this->hidden('token', common_session_token());
+ $this->element('legend', null,
+ _('Create new account'));
+ $this->element('p', null,
+ _('Create a new user with this nickname.'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->input('newname', _('New nickname'),
+ ($this->username) ? $this->username : '',
+ _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->submit('create', _('Create'));
+ $this->elementEnd('fieldset');
+
+ $this->elementStart('fieldset');
+ $this->element('legend', null,
+ _('Connect existing account'));
+ $this->element('p', null,
+ _('If you already have an account, login with your username and password to connect it to your Twitter account.'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->input('nickname', _('Existing nickname'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->password('password', _('Password'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->submit('connect', _('Connect'));
+ $this->elementEnd('fieldset');
+
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ }
+
+ function message($msg)
+ {
+ $this->message_text = $msg;
+ $this->showPage();
+ }
+
+ function createNewUser()
+ {
+ if (common_config('site', 'closed')) {
+ $this->clientError(_('Registration not allowed.'));
+ return;
+ }
+
+ $invite = null;
+
+ if (common_config('site', 'inviteonly')) {
+ $code = $_SESSION['invitecode'];
+ if (empty($code)) {
+ $this->clientError(_('Registration not allowed.'));
+ return;
+ }
+
+ $invite = Invitation::staticGet($code);
+
+ if (empty($invite)) {
+ $this->clientError(_('Not a valid invitation code.'));
+ return;
+ }
+ }
+
+ $nickname = $this->trimmed('newname');
+
+ if (!Validate::string($nickname, array('min_length' => 1,
+ 'max_length' => 64,
+ 'format' => NICKNAME_FMT))) {
+ $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+ return;
+ }
+
+ if (!User::allowed_nickname($nickname)) {
+ $this->showForm(_('Nickname not allowed.'));
+ return;
+ }
+
+ if (User::staticGet('nickname', $nickname)) {
+ $this->showForm(_('Nickname already in use. Try another one.'));
+ return;
+ }
+
+ $fullname = trim($this->tw_fields['name']);
+
+ $args = array('nickname' => $nickname, 'fullname' => $fullname);
+
+ if (!empty($invite)) {
+ $args['code'] = $invite->code;
}
- save_twitter_user($twitter_user->id, $twitter_user->screen_name);
+ $user = User::register($args);
+
+ if (empty($user)) {
+ $this->serverError(_('Error registering user.'));
+ return;
+ }
+
+ $result = $this->saveForeignLink($user->id,
+ $this->twuid,
+ $this->access_token);
+
+ save_twitter_user($this->twuid, $this->tw_fields['screen_name']);
+
+ if (!$result) {
+ $this->serverError(_('Error connecting user to Twitter.'));
+ return;
+ }
+
+ common_set_user($user);
+ common_real_login(true);
+
+ common_debug('TwitterBridge Plugin - ' .
+ "Registered new user $user->id from Twitter user $this->twuid");
+
+ common_redirect(common_local_url('showstream', array('nickname' => $user->nickname)),
+ 303);
+ }
+
+ function connectNewUser()
+ {
+ $nickname = $this->trimmed('nickname');
+ $password = $this->trimmed('password');
+
+ if (!common_check_user($nickname, $password)) {
+ $this->showForm(_('Invalid username or password.'));
+ return;
+ }
+
+ $user = User::staticGet('nickname', $nickname);
+
+ if (!empty($user)) {
+ common_debug('TwitterBridge Plugin - ' .
+ "Legit user to connect to Twitter: $nickname");
+ }
+
+ $result = $this->saveForeignLink($user->id,
+ $this->twuid,
+ $this->access_token);
+
+ save_twitter_user($this->twuid, $this->tw_fields['screen_name']);
+
+ if (!$result) {
+ $this->serverError(_('Error connecting user to Twitter.'));
+ return;
+ }
+
+ common_debug('TwitterBridge Plugin - ' .
+ "Connected Twitter user $this->twuid to local user $user->id");
+
+ common_set_user($user);
+ common_real_login(true);
+
+ $this->goHome($user->nickname);
+ }
+
+ function connectUser()
+ {
+ $user = common_current_user();
+
+ $result = $this->flinkUser($user->id, $this->twuid);
+
+ if (empty($result)) {
+ $this->serverError(_('Error connecting user to Twitter.'));
+ return;
+ }
+
+ common_debug('TwitterBridge Plugin - ' .
+ "Connected Twitter user $this->twuid to local user $user->id");
+
+ // Return to Twitter connection settings tab
+ common_redirect(common_local_url('twittersettings'), 303);
+ }
+
+ function tryLogin()
+ {
+ common_debug('TwitterBridge Plugin - ' .
+ "Trying login for Twitter user $this->twuid.");
+
+ $flink = Foreign_link::getByForeignID($this->twuid,
+ TWITTER_SERVICE);
+
+ if (!empty($flink)) {
+ $user = $flink->getUser();
+
+ if (!empty($user)) {
+
+ common_debug('TwitterBridge Plugin - ' .
+ "Logged in Twitter user $flink->foreign_id as user $user->id ($user->nickname)");
+
+ common_set_user($user);
+ common_real_login(true);
+ $this->goHome($user->nickname);
+ }
+
+ } else {
+
+ common_debug('TwitterBridge Plugin - ' .
+ "No flink found for twuid: $this->twuid - new user");
+
+ $this->showForm(null, $this->bestNewNickname());
+ }
+ }
+
+ function goHome($nickname)
+ {
+ $url = common_get_returnto();
+ if ($url) {
+ // We don't have to return to it again
+ common_set_returnto(null);
+ } else {
+ $url = common_local_url('all',
+ array('nickname' =>
+ $nickname));
+ }
+
+ common_redirect($url, 303);
+ }
+
+ function bestNewNickname()
+ {
+ if (!empty($this->tw_fields['name'])) {
+ $nickname = $this->nicknamize($this->tw_fields['name']);
+ if ($this->isNewNickname($nickname)) {
+ return $nickname;
+ }
+ }
+
+ return null;
+ }
+
+ // Given a string, try to make it work as a nickname
+
+ function nicknamize($str)
+ {
+ $str = preg_replace('/\W/', '', $str);
+ $str = str_replace(array('-', '_'), '', $str);
+ return strtolower($str);
+ }
+
+ function isNewNickname($str)
+ {
+ if (!Validate::string($str, array('min_length' => 1,
+ 'max_length' => 64,
+ 'format' => NICKNAME_FMT))) {
+ return false;
+ }
+ if (!User::allowed_nickname($str)) {
+ return false;
+ }
+ if (User::staticGet('nickname', $str)) {
+ return false;
+ }
+ return true;
}
}
diff --git a/plugins/TwitterBridge/twitterlogin.php b/plugins/TwitterBridge/twitterlogin.php
new file mode 100644
index 000000000..79421fb27
--- /dev/null
+++ b/plugins/TwitterBridge/twitterlogin.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * 'Sign in with Twitter' login page
+ *
+ * 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 Login
+ * @package StatusNet
+ * @author Julien Chaumond <chaumond@gmail.com>
+ * @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') && !defined('LACONICA')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
+
+/**
+ * Page for logging in with Twitter
+ *
+ * @category Login
+ * @package StatusNet
+ * @author Julien Chaumond <chaumond@gmail.com>
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @see SettingsAction
+ */
+
+class TwitterloginAction extends Action
+{
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if (common_is_real_login()) {
+ $this->clientError(_('Already logged in.'));
+ }
+
+ $this->showPage();
+ }
+
+ function title()
+ {
+ return _('Twitter Login');
+ }
+
+ function getInstructions()
+ {
+ return _('Login with your Twitter account');
+ }
+
+ function showPageNotice()
+ {
+ $instr = $this->getInstructions();
+ $output = common_markup_to_html($instr);
+ $this->elementStart('div', 'instructions');
+ $this->raw($output);
+ $this->elementEnd('div');
+ }
+
+ function showContent()
+ {
+ $this->elementStart('a', array('href' => common_local_url('twitterauthorization',
+ null,
+ array('signin' => true))));
+ $this->element('img', array('src' => common_path('plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png'),
+ 'alt' => 'Sign in with Twitter'));
+ $this->elementEnd('a');
+ }
+
+ function showLocalNav()
+ {
+ $nav = new LoginGroupNav($this);
+ $nav->show();
+ }
+}
diff --git a/plugins/TwitterBridge/twitteroauthclient.php b/plugins/TwitterBridge/twitteroauthclient.php
index bad2b74ca..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/
*/
@@ -45,6 +45,7 @@ class TwitterOAuthClient extends OAuthClient
{
public static $requestTokenURL = 'https://twitter.com/oauth/request_token';
public static $authorizeURL = 'https://twitter.com/oauth/authorize';
+ public static $signinUrl = 'https://twitter.com/oauth/authenticate';
public static $accessTokenURL = 'https://twitter.com/oauth/access_token';
/**
@@ -60,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
@@ -91,20 +107,50 @@ class TwitterOAuthClient extends OAuthClient
}
/**
+ * Gets a request token from Twitter
+ *
+ * @return OAuthToken $token the request token
+ */
+ function getRequestToken()
+ {
+ return parent::getRequestToken(
+ self::$requestTokenURL,
+ common_local_url('twitterauthorization')
+ );
+ }
+
+ /**
* Builds a link to Twitter's endpoint for authorizing a request token
*
* @param OAuthToken $request_token token to authorize
*
* @return the link
*/
- function getAuthorizeLink($request_token)
+ function getAuthorizeLink($request_token, $signin = false)
{
- return parent::getAuthorizeLink(self::$authorizeURL,
+ $url = ($signin) ? self::$signinUrl : self::$authorizeURL;
+
+ return parent::getAuthorizeLink($url,
$request_token,
common_local_url('twitterauthorization'));
}
/**
+ * Fetches an access token from Twitter
+ *
+ * @param string $verifier 1.0a verifier
+ *
+ * @return OAuthToken $token the access token
+ */
+ function getAccessToken($verifier = null)
+ {
+ return parent::getAccessToken(
+ self::$accessTokenURL,
+ $verifier
+ );
+ }
+
+ /**
* Calls Twitter's /account/verify_credentials API method
*
* @return mixed the Twitter user
diff --git a/plugins/TwitterBridge/twittersettings.php b/plugins/TwitterBridge/twittersettings.php
index bc9a636a1..631b29f52 100644
--- a/plugins/TwitterBridge/twittersettings.php
+++ b/plugins/TwitterBridge/twittersettings.php
@@ -121,8 +121,35 @@ class TwittersettingsAction extends ConnectSettingsAction
$this->elementEnd('p');
$this->element('p', 'form_note',
_m('Connected Twitter account'));
+ $this->elementEnd('fieldset');
+
+ $this->elementStart('fieldset');
+
+ $this->element('legend', null, _m('Disconnect my account from Twitter'));
- $this->submit('remove', _m('Remove'));
+ if (!$user->password) {
+
+ $this->elementStart('p', array('class' => 'form_guide'));
+ $this->text(_m('Disconnecting your Twitter ' .
+ 'could make it impossible to log in! Please '));
+ $this->element('a',
+ array('href' => common_local_url('passwordsettings')),
+ _m('set a password'));
+
+ $this->text(_m(' first.'));
+ $this->elementEnd('p');
+ } else {
+
+ $note = _m('Keep your %1$s account but disconnect from Twitter. ' .
+ 'You can use your %1$s password to log in.');
+
+ $site = common_config('site', 'name');
+
+ $this->element('p', 'instructions',
+ sprintf($note, $site));
+
+ $this->submit('disconnect', _m('Disconnect'));
+ }
$this->elementEnd('fieldset');
@@ -205,7 +232,7 @@ class TwittersettingsAction extends ConnectSettingsAction
if ($this->arg('save')) {
$this->savePreferences();
- } else if ($this->arg('remove')) {
+ } else if ($this->arg('disconnect')) {
$this->removeTwitterAccount();
} else {
$this->showForm(_m('Unexpected form submission.'));
@@ -223,7 +250,7 @@ class TwittersettingsAction extends ConnectSettingsAction
$user = common_current_user();
$flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
- $result = $flink->delete();
+ $result = $flink->safeDelete();
if (empty($result)) {
common_log_db_error($flink, 'DELETE', __FILE__);
@@ -231,7 +258,7 @@ class TwittersettingsAction extends ConnectSettingsAction
return;
}
- $this->showForm(_m('Twitter account removed.'), true);
+ $this->showForm(_m('Twitter account disconnected.'), true);
}
/**
diff --git a/plugins/UserFlag/UserFlagPlugin.php b/plugins/UserFlag/UserFlagPlugin.php
index a33869c19..ae3dfe036 100644
--- a/plugins/UserFlag/UserFlagPlugin.php
+++ b/plugins/UserFlag/UserFlagPlugin.php
@@ -183,21 +183,6 @@ class UserFlagPlugin extends Plugin
}
/**
- * Add our plugin's CSS to page output
- *
- * @param Action $action action being shown
- *
- * @return boolean hook result
- */
-
- function onEndShowStatusNetStyles($action)
- {
- $action->cssLink(common_path('plugins/UserFlag/userflag.css'),
- null, 'screen, projection, tv');
- return true;
- }
-
- /**
* Initialize any flagging buttons on the page
*
* @param Action $action action being shown
@@ -208,8 +193,8 @@ class UserFlagPlugin extends Plugin
function onEndShowScripts($action)
{
$action->inlineScript('if ($(".form_entity_flag").length > 0) { '.
- 'SN.U.FormXHR($(".form_entity_flag")); '.
- '}');
+ '$(".form_entity_flag").bind("click", function() {'.
+ 'SN.U.FormXHR($(this)); return false; }); }');
return true;
}
diff --git a/plugins/UserFlag/User_flag_profile.php b/plugins/UserFlag/User_flag_profile.php
index bc4251cf7..86b39160b 100644
--- a/plugins/UserFlag/User_flag_profile.php
+++ b/plugins/UserFlag/User_flag_profile.php
@@ -86,7 +86,7 @@ class User_flag_profile extends Memcached_DataObject
function keys()
{
- return array('profile_id' => 'N', 'user_id' => 'N');
+ return array('profile_id' => 'K', 'user_id' => 'K');
}
/**
@@ -130,6 +130,15 @@ class User_flag_profile extends Memcached_DataObject
return !empty($ufp);
}
+ /**
+ * Create a new flag
+ *
+ * @param integer $user_id ID of user who's flagging
+ * @param integer $profile_id ID of profile being flagged
+ *
+ * @return boolean success flag
+ */
+
static function create($user_id, $profile_id)
{
$ufp = new User_flag_profile();
diff --git a/plugins/UserFlag/clearflagform.php b/plugins/UserFlag/clearflagform.php
index 5ad6055d3..eefd15c36 100644
--- a/plugins/UserFlag/clearflagform.php
+++ b/plugins/UserFlag/clearflagform.php
@@ -54,7 +54,7 @@ class ClearFlagForm extends ProfileActionForm
function formClass()
{
- return 'form_entity_clearflag';
+ return 'form_user_clearflag';
}
/**
diff --git a/plugins/UserFlag/userflag.css b/plugins/UserFlag/userflag.css
deleted file mode 100644
index 98da24cc9..000000000
--- a/plugins/UserFlag/userflag.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.entity_flag input.submit,
-.entity_flag p {
-background:url(icon_flag.gif) 5px 5px no-repeat;
-}
diff --git a/plugins/UserLimitPlugin.php b/plugins/UserLimitPlugin.php
new file mode 100644
index 000000000..ab3187299
--- /dev/null
+++ b/plugins/UserLimitPlugin.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to limit number of users that can register (best for cloud providers)
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Plugin to limit number of users that can register (best for cloud providers)
+ *
+ * For cloud providers whose freemium model is based on how many
+ * users can register. We use it on the StatusNet Cloud.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @seeAlso Location
+ */
+
+class UserLimitPlugin extends Plugin
+{
+ public $maxUsers = null;
+
+ function onStartUserRegister(&$user, &$profile)
+ {
+ $this->_checkMaxUsers();
+ return true;
+ }
+
+ function onStartRegistrationTry($action)
+ {
+ $this->_checkMaxUsers();
+ return true;
+ }
+
+ function _checkMaxUsers()
+ {
+ if (!is_null($this->maxUsers)) {
+
+ $cls = new User();
+
+ $cnt = $cls->count();
+
+ if ($cnt >= $this->maxUsers) {
+ $msg = sprintf(_('Cannot register; maximum number of users (%d) reached.'),
+ $this->maxUsers);
+
+ throw new ClientException($msg);
+ }
+ }
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'UserLimit',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Evan Prodromou',
+ 'homepage' => 'http://status.net/wiki/Plugin:UserLimit',
+ 'description' =>
+ _m('Limit the number of users who can register.'));
+ return true;
+ }
+}
diff --git a/scripts/clearcache.php b/scripts/clearcache.php
new file mode 100644
index 000000000..0fb75daa0
--- /dev/null
+++ b/scripts/clearcache.php
@@ -0,0 +1,70 @@
+#!/usr/bin/env php
+<?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/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = "t:l:v:k:";
+
+$helptext = <<<END_OF_CLEARCACHE_HELP
+USAGE: clearcache.php <args>
+clears the cached object based on the args
+
+ -t table Table to look up
+ -l column Column to look up, default "id"
+ -v value Value to look up
+ -k key Key to look up; other args are ignored
+
+END_OF_CLEARCACHE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$karg = get_option_value('k', 'key');
+
+if (!empty($karg)) {
+ $k = common_cache_key($karg);
+} else {
+ $table = get_option_value('t', 'table');
+ if (empty($table)) {
+ die("No table or key specified\n");
+ }
+ $column = get_option_value('l', 'column');
+ if (empty($column)) {
+ $column = 'id';
+ }
+ $value = get_option_value('v', 'value');
+
+ $k = Memcached_DataObject::cacheKey($table, $column, $value);
+}
+
+print "Clearing key '$k'...";
+
+$c = common_memcache();
+
+if (empty($c)) {
+ die("Can't initialize cache object!\n");
+}
+
+$result = $c->delete($k);
+
+if ($result) {
+ print "OK.\n";
+} else {
+ print "FAIL.\n";
+}
diff --git a/scripts/console.php b/scripts/console.php
index 8b62a3a96..4d207c261 100755
--- a/scripts/console.php
+++ b/scripts/console.php
@@ -45,10 +45,12 @@ function read_input_line($prompt)
if (CONSOLE_INTERACTIVE) {
if (CONSOLE_READLINE) {
$line = readline($prompt);
- readline_add_history($line);
- if (defined('CONSOLE_HISTORY')) {
- // Save often; it's easy to hit fatal errors.
- readline_write_history(CONSOLE_HISTORY);
+ if (trim($line) != '') {
+ readline_add_history($line);
+ if (defined('CONSOLE_HISTORY')) {
+ // Save often; it's easy to hit fatal errors.
+ readline_write_history(CONSOLE_HISTORY);
+ }
}
return $line;
} else {
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/decache.php b/scripts/decache.php
index 7cabd78ad..094bdb5aa 100644
--- a/scripts/decache.php
+++ b/scripts/decache.php
@@ -24,6 +24,8 @@ $helptext = <<<ENDOFHELP
USAGE: decache.php <table> <id> [<column>]
Clears the cache for the object in table <table> with id <id>
If <column> is specified, use that instead of 'id'
+
+
ENDOFHELP;
require_once INSTALLDIR.'/scripts/commandline.inc';
@@ -43,8 +45,10 @@ if (count($args) > 2) {
$object = Memcached_DataObject::staticGet($table, $column, $id);
if (!$object) {
- print "No such '$table' with $column = '$id'.\n";
- exit(1);
+ print "No such '$table' with $column = '$id'; it's possible some cache keys won't be cleared properly.\n";
+ $class = ucfirst($table);
+ $object = new $class();
+ $object->column = $id;
}
$result = $object->decache();
diff --git a/scripts/delete_status_network.sh b/scripts/delete_status_network.sh
index f55f1486b..3a8ebdcfd 100755
--- a/scripts/delete_status_network.sh
+++ b/scripts/delete_status_network.sh
@@ -1,5 +1,9 @@
#!/bin/bash
+# live fast! die young!
+
+set -e
+
source /etc/statusnet/setup.cfg
export nickname=$1
diff --git a/scripts/fixup_utf8.php b/scripts/fixup_utf8.php
index 30befadfd..2af6f9cb0 100755
--- a/scripts/fixup_utf8.php
+++ b/scripts/fixup_utf8.php
@@ -249,7 +249,7 @@ class UTF8FixerUpper
$sql = 'SELECT id, fullname, location, description FROM user_group ' .
'WHERE LENGTH(fullname) != CHAR_LENGTH(fullname) '.
'OR LENGTH(location) != CHAR_LENGTH(location) '.
- 'OR LENGTH(description) != CHAR_LENGTH(description) ';
+ 'OR LENGTH(description) != CHAR_LENGTH(description) '.
'AND modified < "'.$this->max_date.'" '.
'ORDER BY modified DESC';
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/queuectl.php b/scripts/queuectl.php
new file mode 100755
index 000000000..1c9ea3353
--- /dev/null
+++ b/scripts/queuectl.php
@@ -0,0 +1,85 @@
+#!/usr/bin/env php
+<?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/>.
+ */
+
+/**
+ * Sends control signals to running queue daemons.
+ *
+ * @author Brion Vibber <brion@status.net>
+ * @package QueueHandler
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'ur';
+$longoptions = array('update', 'restart', 'stop');
+
+$helptext = <<<END_OF_QUEUECTL_HELP
+Send broadcast events to control any running queue handlers.
+(Currently for Stomp queues only.)
+
+Events relating to current site (as selected with -s etc)
+ -u --update Announce new site or updated configuration. Running
+ daemons will start subscribing to any new queues needed
+ for this site.
+
+Global events:
+ -r --restart Graceful restart of all threads
+ --stop Graceful shutdown of all threads
+
+END_OF_QUEUECTL_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+function doSendControl($message, $event, $param='')
+{
+ print $message;
+ $qm = QueueManager::get();
+ if ($qm->sendControlSignal($event, $param)) {
+ print " sent.\n";
+ } else {
+ print " FAILED.\n";
+ }
+}
+
+$actions = 0;
+
+if (have_option('u') || have_option('--update')) {
+ $nickname = common_config('site', 'nickname');
+ doSendControl("Sending site update signal to queue daemons for $nickname",
+ "update", $nickname);
+ $actions++;
+}
+
+if (have_option('r') || have_option('--restart')) {
+ doSendControl("Sending graceful restart signal to queue daemons...",
+ "restart");
+ $actions++;
+}
+
+if (have_option('--stop')) {
+ doSendControl("Sending graceful shutdown signal to queue daemons...",
+ "shutdown");
+ $actions++;
+}
+
+if (!$actions) {
+ show_help();
+}
+
diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php
index a9cfda6d7..6dba16f95 100755
--- a/scripts/queuedaemon.php
+++ b/scripts/queuedaemon.php
@@ -21,7 +21,7 @@
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
$shortoptions = 'fi:at:';
-$longoptions = array('id=', 'foreground', 'all', 'threads=', 'skip-xmpp', 'xmpp-only');
+$longoptions = array('id=', 'foreground', 'all', 'threads=');
/**
* Attempts to get a count of the processors available on the current system
@@ -74,8 +74,6 @@ require_once(INSTALLDIR.'/lib/daemon.php');
require_once(INSTALLDIR.'/classes/Queue_item.php');
require_once(INSTALLDIR.'/classes/Notice.php');
-define('CLAIM_TIMEOUT', 1200);
-
/**
* Queue handling daemon...
*
@@ -92,7 +90,7 @@ class QueueDaemon extends SpawningDaemon
function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
{
parent::__construct($id, $daemonize, $threads);
- $this->all = $allsites;
+ $this->allsites = $allsites;
}
/**
@@ -108,33 +106,40 @@ class QueueDaemon extends SpawningDaemon
$this->log(LOG_INFO, 'checking for queued notices');
$master = new QueueMaster($this->get_id());
- $master->init($this->all);
- $master->service();
+ $master->init($this->allsites);
+ try {
+ $master->service();
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Unhandled exception: " . $e->getMessage() . ' ' .
+ str_replace("\n", " ", $e->getTraceAsString()));
+ return self::EXIT_ERR;
+ }
$this->log(LOG_INFO, 'finished servicing the queue');
$this->log(LOG_INFO, 'terminating normally');
- return true;
+ return $master->respawn ? self::EXIT_RESTART : self::EXIT_SHUTDOWN;
}
}
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()
{
- $classes = array();
- if (Event::handle('StartQueueDaemonIoManagers', array(&$classes))) {
- $classes[] = 'QueueManager';
+ $managers = array();
+ if (Event::handle('StartQueueDaemonIoManagers', array(&$managers))) {
+ $qm = QueueManager::get();
+ $qm->setActiveGroup('main');
+ $managers[] = $qm;
}
- Event::handle('EndQueueDaemonIoManagers', array(&$classes));
+ Event::handle('EndQueueDaemonIoManagers', array(&$managers));
- foreach ($classes as $class) {
- $this->instantiate($class);
+ foreach ($managers as $manager) {
+ $this->instantiate($manager);
}
}
}
@@ -163,13 +168,6 @@ if (!$threads) {
$daemonize = !(have_option('f') || have_option('--foreground'));
$all = have_option('a') || have_option('--all');
-if (have_option('--skip-xmpp')) {
- define('XMPP_EMERGENCY_FLAG', true);
-}
-if (have_option('--xmpp-only')) {
- define('XMPP_ONLY_FLAG', true);
-}
-
$daemon = new QueueDaemon($id, $daemonize, $threads, $all);
$daemon->runOnce();
diff --git a/scripts/sendemail.php b/scripts/sendemail.php
new file mode 100755
index 000000000..436e085be
--- /dev/null
+++ b/scripts/sendemail.php
@@ -0,0 +1,82 @@
+#!/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:';
+$longoptions = array('id=', 'nickname=', 'subject=');
+
+$helptext = <<<END_OF_USEREMAIL_HELP
+sendemail.php [options] < <message body>
+Sends given email text to user.
+
+ -i --id id of the user to query
+ -n --nickname nickname of the user to query
+ --subject mail subject line (required)
+
+END_OF_USEREMAIL_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $user = User::staticGet('id', $id);
+ if (empty($user)) {
+ print "Can't find user with ID $id\n";
+ exit(1);
+ }
+} else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $user = User::staticGet('nickname', $nickname);
+ if (empty($user)) {
+ print "Can't find user with nickname '$nickname'\n";
+ exit(1);
+ }
+} else {
+ print "You must provide a user by --id or --nickname\n";
+ exit(1);
+}
+
+if (empty($user->email)) {
+ // @fixme unconfirmed address?
+ print "No email registered for user '$user->nickname'\n";
+ exit(1);
+}
+
+if (!have_option('subject')) {
+ echo "You must provide a subject line for the mail in --subject='...' param.\n";
+ exit(1);
+}
+$subject = get_option_value('subject');
+
+if (posix_isatty(STDIN)) {
+ print "You must provide message input on stdin!\n";
+ exit(1);
+}
+$body = file_get_contents('php://stdin');
+
+print "Sending to $user->email...";
+if (mail_to_user($user, $subject, $body)) {
+ print " done\n";
+} else {
+ print " failed.\n";
+ exit(1);
+}
+
diff --git a/scripts/setconfig.php b/scripts/setconfig.php
index b102f99b1..fe0e46d65 100644..100755
--- a/scripts/setconfig.php
+++ b/scripts/setconfig.php
@@ -28,6 +28,7 @@ setconfig.php [options] [section] [setting] <value>
With three args, set the setting to the value.
With two args, just show the setting.
With -d, delete the setting.
+With no args, lists all currently set values.
[section] section to use (required)
[setting] setting to use (required)
@@ -39,6 +40,21 @@ END_OF_SETCONFIG_HELP;
require_once INSTALLDIR.'/scripts/commandline.inc';
+if (empty($args)) {
+ $count = 0;
+ $config = new Config();
+ $config->find();
+ while ($config->fetch()) {
+ $count++;
+ printf("%-20s %-20s %s\n", $config->section, $config->setting,
+ var_export($config->value, true));
+ }
+ if ($count == 0) {
+ print "No configuration set in database for this site.\n";
+ }
+ exit(0);
+}
+
if (count($args) < 2 || count($args) > 3) {
show_help();
exit(1);
diff --git a/scripts/settag.php b/scripts/settag.php
new file mode 100644
index 000000000..e91d5eb50
--- /dev/null
+++ b/scripts/settag.php
@@ -0,0 +1,84 @@
+#!/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 = 'd';
+$longoptions = array('delete');
+
+$helptext = <<<END_OF_SETTAG_HELP
+settag.php [options] <site> <tag>
+Set the tag <tag> for site <site>.
+
+With -d, delete the tag.
+
+END_OF_SETTAG_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (count($args) != 2) {
+ show_help();
+ exit(1);
+}
+
+$nickname = $args[0];
+$tag = strtolower($args[1]);
+
+$sn = Status_network::memGet('nickname', $nickname);
+
+if (empty($sn)) {
+ print "No such site.\n";
+ exit(-1);
+}
+
+$tags = $sn->getTags();
+
+$i = array_search($tag, $tags);
+
+if ($i !== false) {
+ if (have_option('d', 'delete')) { // Delete
+ unset($tags[$i]);
+
+ $orig = clone($sn);
+ $sn->tags = implode('|', $tags);
+ $result = $sn->update($orig);
+ if (!$result) {
+ print "Couldn't update.\n";
+ exit(-1);
+ }
+ } else {
+ print "Already set.\n";
+ exit(-1);
+ }
+} else {
+ if (have_option('d', 'delete')) { // Delete
+ print "No such tag.\n";
+ exit(-1);
+ } else {
+ $tags[] = $tag;
+ $orig = clone($sn);
+ $sn->tags = implode('|', $tags);
+ $result = $sn->update($orig);
+ if (!$result) {
+ print "Couldn't update.\n";
+ exit(-1);
+ }
+ }
+}
diff --git a/scripts/setup.cfg.sample b/scripts/setup.cfg.sample
index 8d03b06f5..f247a3bca 100644
--- a/scripts/setup.cfg.sample
+++ b/scripts/setup.cfg.sample
@@ -11,4 +11,8 @@ export AVATARBASE=/var/www/avatar.example.net
export BACKGROUNDBASE=/var/www/background.example.net
export FILEBASE=/var/www/file.example.net
export PWDGEN="pwgen 20"
-
+export PHPBASE=/var/www/statusnet
+export WILDCARD=example.net
+export MAILTEMPLATE=/etc/statusnet/newsite-mail.txt
+export MAILSUBJECT="Your new StatusNet site"
+export POSTINSTALL=/etc/statusnet/morestuff.sh
diff --git a/scripts/setup_status_network.sh b/scripts/setup_status_network.sh
index 777711fb5..4ebb696c7 100755
--- a/scripts/setup_status_network.sh
+++ b/scripts/setup_status_network.sh
@@ -1,10 +1,33 @@
#!/bin/bash
+# live fast! die young!
+
+set -e
+
source /etc/statusnet/setup.cfg
-export nickname=$1
-export sitename=$2
+# setup_status_net.sh mysite 'My Site' '1user' 'owner@example.com' 'Firsty McLastname'
+
+export nickname="$1"
+export sitename="$2"
+export tags="$3"
+export email="$4"
+export fullname="$5"
+export siteplan="$6"
+
+if [ "$siteplan" == '' ]; then
+ siteplan='single-user'
+fi
+
+# Fixme: if this is changed later we need to update profile URLs
+# for the created user.
+export server="$nickname.$WILDCARD"
+
+# End-user info
+export userpass=`$PWDGEN`
+export roles="administrator moderator owner"
+# DB info
export password=`$PWDGEN`
export database=$nickname$DBBASE
export username=$nickname$USERBASE
@@ -21,8 +44,8 @@ mysql -h $DBHOST -u $ADMIN --password=$ADMINPASS $SITEDB << ENDOFCOMMANDS
GRANT ALL ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password';
GRANT ALL ON $database.* TO '$username'@'%' IDENTIFIED BY '$password';
-INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created)
-VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now());
+INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created, tags)
+VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now(), '$tags');
ENDOFCOMMANDS
@@ -30,3 +53,42 @@ for top in $AVATARBASE $FILEBASE $BACKGROUNDBASE; do
mkdir $top/$nickname
chmod a+w $top/$nickname
done
+
+php $PHPBASE/scripts/checkschema.php -s"$server"
+
+php $PHPBASE/scripts/registeruser.php \
+ -s"$server" \
+ -n"$nickname" \
+ -f"$fullname" \
+ -w"$userpass" \
+ -e"$email"
+
+for role in $roles
+do
+ php $PHPBASE/scripts/userrole.php \
+ -s"$server" \
+ -n"$nickname" \
+ -r"$role"
+done
+
+if [ -f "$MAILTEMPLATE" ]
+then
+ # fixme how safe is this? are sitenames sanitized?
+ cat $MAILTEMPLATE | \
+ sed "s/\$nickname/$nickname/" | \
+ sed "s/\$sitename/$sitename/" | \
+ sed "s/\$userpass/$userpass/" | \
+ sed "s/\$siteplan/$siteplan/" | \
+ php $PHPBASE/scripts/sendemail.php \
+ -s"$server" \
+ -n"$nickname" \
+ --subject="$MAILSUBJECT"
+else
+ echo "No mail template, not sending email."
+fi
+
+if [ -f "$POSTINSTALL" ]
+then
+ echo "Running $POSTINSTALL ..."
+ source "$POSTINSTALL"
+fi
diff --git a/scripts/showcache.php b/scripts/showcache.php
index f17979572..93b57a484 100644
--- a/scripts/showcache.php
+++ b/scripts/showcache.php
@@ -20,14 +20,14 @@
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
-$shortoptions = "t:c:v:k:";
+$shortoptions = "t:l:v:k:";
$helptext = <<<ENDOFHELP
USAGE: showcache.php <args>
shows the cached object based on the args
-t table Table to look up
- -c column Column to look up, default "id"
+ -l column Column to look up, default "id"
-v value Value to look up
-k key Key to look up; other args are ignored
@@ -44,7 +44,7 @@ if (!empty($karg)) {
if (empty($table)) {
die("No table or key specified\n");
}
- $column = get_option_value('c');
+ $column = get_option_value('l');
if (empty($column)) {
$column = 'id';
}
diff --git a/scripts/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/scripts/updateprofileurl.php b/scripts/updateprofileurl.php
new file mode 100644
index 000000000..2fc6828e6
--- /dev/null
+++ b/scripts/updateprofileurl.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_UPDATEPROFILEURL_HELP
+updateprofileurl.php [options]
+update the URLs of all avatars in the system
+
+ -i --id ID of user to update
+ -n --nickname nickname of the user to update
+ -a --all update all
+
+END_OF_UPDATEPROFILEURL_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+try {
+ $user = null;
+
+ if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $user = User::staticGet('id', $id);
+ if (empty($user)) {
+ throw new Exception("Can't find user with id '$id'.");
+ }
+ updateProfileURL($user);
+ } else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $user = User::staticGet('nickname', $nickname);
+ if (empty($user)) {
+ throw new Exception("Can't find user with nickname '$nickname'");
+ }
+ updateProfileURL($user);
+ } else if (have_option('a', 'all')) {
+ $user = new User();
+ if ($user->find()) {
+ while ($user->fetch()) {
+ updateProfileURL($user);
+ }
+ }
+ } else {
+ show_help();
+ exit(1);
+ }
+} catch (Exception $e) {
+ print $e->getMessage()."\n";
+ exit(1);
+}
+
+function updateProfileURL($user)
+{
+ $profile = $user->getProfile();
+
+ if (empty($profile)) {
+ throw new Exception("Can't find profile for user $user->nickname ($user->id)");
+ }
+
+ $orig = clone($profile);
+
+ $profile->profileurl = common_profile_url($user->nickname);
+
+ if (!have_option('q', 'quiet')) {
+ print "Updating profile url for $user->nickname ($user->id) ".
+ "from $orig->profileurl to $profile->profileurl...";
+ }
+
+ $result = $profile->update($orig);
+
+ if (!$result) {
+ print "FAIL.\n";
+ common_log_db_error($profile, 'UPDATE', __FILE__);
+ throw new Exception("Can't update profile for user $user->nickname ($user->id)");
+ }
+
+ common_broadcast_profile($profile);
+
+ print "OK.\n";
+}
diff --git a/scripts/xmppdaemon.php b/scripts/xmppdaemon.php
index fd7cf055b..9302f0c43 100755
--- a/scripts/xmppdaemon.php
+++ b/scripts/xmppdaemon.php
@@ -20,13 +20,15 @@
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
-$shortoptions = 'fi::';
-$longoptions = array('id::', 'foreground');
+$shortoptions = 'fi::a';
+$longoptions = array('id::', 'foreground', 'all');
$helptext = <<<END_OF_XMPP_HELP
Daemon script for receiving new notices from Jabber users.
-i --id Identity (default none)
+ -a --all Handle XMPP for all local sites
+ (requires Stomp queue handler, status_network setup)
-f --foreground Stay in the foreground (default background)
END_OF_XMPP_HELP;
@@ -37,13 +39,16 @@ require_once INSTALLDIR . '/lib/jabber.php';
class XMPPDaemon extends SpawningDaemon
{
- function __construct($id=null, $daemonize=true, $threads=1)
+ protected $allsites = false;
+
+ function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
{
if ($threads != 1) {
// This should never happen. :)
throw new Exception("XMPPDaemon can must run single-threaded");
}
parent::__construct($id, $daemonize, $threads);
+ $this->allsites = $allsites;
}
function runThread()
@@ -51,12 +56,12 @@ class XMPPDaemon extends SpawningDaemon
common_log(LOG_INFO, 'Waiting to listen to XMPP and queues');
$master = new XmppMaster($this->get_id());
- $master->init();
+ $master->init($this->allsites);
$master->service();
common_log(LOG_INFO, 'terminating normally');
- return true;
+ return $master->respawn ? self::EXIT_RESTART : self::EXIT_SHUTDOWN;
}
}
@@ -69,15 +74,19 @@ class XmppMaster extends IoMaster
*/
function initManagers()
{
- // @fixme right now there's a hack in QueueManager to determine
- // which queues to subscribe to based on the master class.
- $this->instantiate('QueueManager');
- $this->instantiate('XmppManager');
+ if (common_config('xmpp', 'enabled')) {
+ $qm = QueueManager::get();
+ $qm->setActiveGroup('xmpp');
+ $this->instantiate($qm);
+ $this->instantiate(XmppManager::get());
+ }
}
}
// Abort immediately if xmpp is not enabled, otherwise the daemon chews up
// lots of CPU trying to connect to unconfigured servers
+// @fixme do this check after we've run through the site list so we
+// don't have to find an XMPP site to start up when using --all mode.
if (common_config('xmpp','enabled')==false) {
print "Aborting daemon - xmpp is disabled\n";
exit();
@@ -92,7 +101,8 @@ if (have_option('i', 'id')) {
}
$foreground = have_option('f', 'foreground');
+$all = have_option('a') || have_option('--all');
-$daemon = new XMPPDaemon($id, !$foreground);
+$daemon = new XMPPDaemon($id, !$foreground, 1, $all);
$daemon->runOnce();
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/tests/oauth/statusupdate.php b/tests/oauth/statusupdate.php
new file mode 100644
index 000000000..4aa230e28
--- /dev/null
+++ b/tests/oauth/statusupdate.php
@@ -0,0 +1,115 @@
+#!/usr/bin/env php
+<?php
+/*
+ * 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/>.
+ **/
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../..'));
+
+require_once INSTALLDIR . '/extlib/OAuth.php';
+
+$shortoptions = 'o:s:u:';
+$longoptions = array('oauth_token=', 'token_secret=', 'update=');
+
+$helptext = <<<END_OF_VERIFY_HELP
+ statusupdate.php [options]
+ Update your status using OAuth
+
+ -o --oauth_token access token
+ -s --token_secret access token secret
+ -u --update status update
+
+
+END_OF_VERIFY_HELP;
+
+$token = null;
+$token_secret = null;
+$update = null;
+
+require_once INSTALLDIR . '/scripts/commandline.inc';
+
+if (have_option('o', 'oauth_token')) {
+ $token = get_option_value('oauth_token');
+}
+
+if (have_option('s', 'token_secret')) {
+ $token_secret = get_option_value('s', 'token_secret');
+}
+
+if (have_option('u', 'update')) {
+ $update = get_option_value('u', 'update');
+}
+
+if (empty($token)) {
+ print "Please specify an access token.\n";
+ exit(1);
+}
+
+if (empty($token_secret)) {
+ print "Please specify an access token secret.\n";
+ exit(1);
+}
+
+if (empty($update)) {
+ print "You forgot to update your status!\n";
+ exit(1);
+}
+
+$ini = parse_ini_file("oauth.ini");
+
+$test_consumer = new OAuthConsumer($ini['consumer_key'], $ini['consumer_secret']);
+
+$endpoint = $ini['apiroot'] . '/statuses/update.xml';
+
+print "$endpoint\n";
+
+$at = new OAuthToken($token, $token_secret);
+
+$parsed = parse_url($endpoint);
+$params = array();
+parse_str($parsed['query'], $params);
+
+$params['status'] = $update;
+
+$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
+
+$req_req = OAuthRequest::from_consumer_and_token($test_consumer, $at, 'POST', $endpoint, $params);
+$req_req->sign_request($hmac_method, $test_consumer, $at);
+
+$r = httpRequest($req_req->to_url());
+
+$body = $r->getBody();
+
+print "$body\n";
+
+//print $req_req->to_url() . "\n\n";
+
+function httpRequest($url)
+{
+ $request = HTTPClient::start();
+
+ $request->setConfig(array(
+ 'follow_redirects' => true,
+ 'connect_timeout' => 120,
+ 'timeout' => 120,
+ 'ssl_verify_peer' => false,
+ 'ssl_verify_host' => false
+ ));
+
+ return $request->post($url);
+}
+
diff --git a/theme/README b/theme/README
index 266a89fdf..e154a723c 100644
--- a/theme/README
+++ b/theme/README
@@ -2,37 +2,46 @@
*
* @package StatusNet
* @author Sarven Capadisli <csarven@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/
*/
-Location of key paths and files under theme/:
+== Location of key paths and files ==
+<pre><nowiki>
+base/css/
+base/css/display.css #layout, typography rules
+base/images/ #common icons, illustrations
+base/images/icons/icons-01.png #main icons file (combined into a single file)
-./base/css/
-./base/css/display.css
-./base/images/
+default/css/
+default/css/display.css #imports the base stylesheet for layout and adds background images and colour rules
+default/logo.png #default site logo for this theme
+default/mobilelogo.png #default logo for the mobile output
+default/default-avatar-mini.png #24x24 default avatar for minilists
+default/default-avatar-stream.png #48x48 default avatar for notice timelines
+default/default-avatar-profile.png #96x96 default avatar for the profile page
+</nowiki></pre>
-./default/css/
-./default/css/display.css
-./default/images/
-./base/display.css contains layout, typography rules:
-Only alter this file if you want to change the layout of the site. Please note that, any updates to this in future statusnet releases may not be compatible with your version.
+== How to create your own theme ==
-./default/css/display.css contains only the background images and colour rules:
-This file is a good basis for creating your own theme.
-Let's create a theme:
+You probably want to do one of the following:
-1. To start off, copy over the default theme:
-cp -r default mytheme
-2. Edit your mytheme stylesheet:
-nano mytheme/css/display.css
+* If you just want to change the text, link, background, content, sidebar colours, background image:
+** Do this from the Admin->Design settings (recommended!). You could also create a directory and a file structure like the default theme, search and replace with your own values. This is more work, but, you can do this if you plan to make additional *minimal* changes.
-a) Search and replace your colours and background images, or
-b) Create your own layout either importing a separate stylesheet (e.g., change to @import url(base.css);) or simply place it before the rest of the rules.
-4. Set /config.php to load 'mytheme':
-$config['site']['theme'] = 'mytheme';
+* If you want to change the background images and colours:
+# Create a directory and a file structure like the default theme.
+# Have your stylesheet import base/css/display.css and add your own styles below. It is okay to add *minimal* changes here.
+
+
+* If you want to create a different layout, typography, background images and colours:
+** Create your own theme directory (base or default) with stylesheets and images like.
+
+
+Finally, enable your theme by selecting it from the Admin->Design interface. You can set site's logo from here as well.
+
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 84e9426c7..0246065a7 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -288,7 +288,7 @@ margin-left:18px;
}
#site_nav_global_primary li {
display:inline;
-margin-left:11px;
+margin-left:18px;
}
.system_notice dt {
@@ -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;
@@ -370,7 +422,7 @@ margin-bottom:11px;
#site_nav_global_secondary ul li {
display:inline;
-margin-right:11px;
+margin-right:18px;
}
#export_data li a {
padding-left:20px;
@@ -383,15 +435,13 @@ padding-left:28px;
}
#export_data ul {
-display:inline;
+width:100%;
+float:left;
}
#export_data li {
list-style-type:none;
-display:inline;
-margin-left:11px;
-}
-#export_data li:first-child {
-margin-left:0;
+float:left;
+margin-right:11px;
}
#licenses {
@@ -632,7 +682,8 @@ margin-bottom:18px;
.entity_profile .entity_url,
.entity_profile .entity_note,
.entity_profile .entity_tags,
-.entity_profile .entity_aliases {
+.entity_profile .entity_aliases,
+.entity_profile .entity_statistics {
margin-left:113px;
margin-bottom:4px;
}
@@ -765,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;
@@ -776,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;
@@ -801,7 +855,7 @@ display:inline;
}
.entity_tags li {
display:inline;
-margin-right:4px;
+margin-right:7px;
}
.aside .section {
@@ -819,6 +873,7 @@ font-size:1em;
#entity_statistics dt,
#entity_statistics dd {
display:inline;
+margin-right:11px;
}
#entity_statistics dt:after {
content: ":";
@@ -995,6 +1050,9 @@ padding-left:28px;
.notice .author {
margin-right:11px;
}
+#showstream #content .notice .author {
+display:none;
+}
.fn {
overflow:hidden;
@@ -1020,6 +1078,7 @@ float:none;
}
#content .notice .entry-title {
margin-left:59px;
+margin-right:7px;
}
.vcard .url {
@@ -1031,6 +1090,7 @@ text-decoration:underline;
.notice .entry-title {
overflow:hidden;
+word-wrap:break-word;
}
.notice .entry-title.ov {
overflow:visible;
@@ -1039,12 +1099,13 @@ overflow:visible;
#showstream .notice div.entry-content {
margin-left:0;
}
-#shownotice .notice .entry-title,
-#shownotice .notice div.entry-content {
-margin-left:110px;
-}
#shownotice .notice .entry-title {
+margin-left:110px;
font-size:2.2em;
+min-height:123px;
+}
+#shownotice .notice div.entry-content {
+margin-left:0;
}
.notice p.entry-content {
@@ -1098,25 +1159,22 @@ left:0;
.dialogbox {
position:absolute;
-top:-4px;
-right:29px;
+top:-1px;
+right:-1px;
z-index:9;
-min-width:199px;
float:none;
-background-color:#FFF;
padding:11px;
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
border-style:solid;
border-width:1px;
-border-color:#DDDDDD;
--moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
}
.dialogbox legend {
display:block !important;
margin-right:18px;
+margin-bottom:18px;
}
.dialogbox button.close {
@@ -1125,9 +1183,35 @@ right:3px;
top:3px;
}
+.dialogbox .form_guide {
+font-weight:normal;
+padding:0;
+}
+
.dialogbox .submit_dialogbox {
-text-indent:0;
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;
+}
+
+.form_repeat.dialogbox {
+top:-4px;
+right:29px;
+min-width:199px;
}
.notice-options {
@@ -1398,6 +1482,9 @@ margin-bottom:18px;
.hentry .entry-content li li {
margin-left:18px;
}
+.hentry .entry-content .form_settings ul {
+margin-left:0;
+}
#content #plugin_authors {
min-width:122px;
@@ -1458,12 +1545,18 @@ text-align:center;
}
.aside .tag-cloud {
font-size:0.8em;
+word-wrap:break-word;
}
.tag-cloud li {
display:inline;
margin-right:7px;
line-height:1.25;
}
+
+.tag-cloud li:before {
+content:'\0009';
+}
+
.aside .tag-cloud li {
line-height:1.5;
}
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/css/uap.css b/theme/base/css/uap.css
new file mode 100644
index 000000000..73be5f0c1
--- /dev/null
+++ b/theme/base/css/uap.css
@@ -0,0 +1,54 @@
+/** Universal Ad Package styles:
+ * Medium Rectangle 300x250
+ * Rectangle 180x150
+ * Leaderboard 728x90
+ * Wide Skyscraper 160x600
+ *
+ * @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/
+ */
+
+
+.ad {
+border:1px solid #CCC;
+float:left;
+}
+
+#ad_medium-rectangle {
+width:300px;
+height:250px;
+
+margin-left:1.35%;
+margin-bottom:18px;
+}
+
+#ad_rectangle {
+width:180px;
+height:150px;
+
+float:none;
+clear:both;
+margin:0 auto;
+margin-bottom:29px;
+}
+
+#ad_leaderboard {
+width:728px;
+height:90px;
+
+margin:0 auto 18px;
+float:none;
+clear:both;
+}
+
+#ad_wide-skyscraper {
+width:160px;
+height:600px;
+
+float:right;
+margin-top:18px;
+margin-right:8.25%;
+}
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 f93d33d79..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/base/images/icons/twotone/green/against.gif b/theme/base/images/icons/twotone/green/against.gif
new file mode 100644
index 000000000..ca796c8a3
--- /dev/null
+++ b/theme/base/images/icons/twotone/green/against.gif
Binary files differ
diff --git a/theme/base/images/icons/twotone/green/checkmark.gif b/theme/base/images/icons/twotone/green/checkmark.gif
new file mode 100644
index 000000000..892429d48
--- /dev/null
+++ b/theme/base/images/icons/twotone/green/checkmark.gif
Binary files differ
diff --git a/theme/base/images/icons/twotone/green/clear.gif b/theme/base/images/icons/twotone/green/clear.gif
new file mode 100644
index 000000000..2666430ef
--- /dev/null
+++ b/theme/base/images/icons/twotone/green/clear.gif
Binary files differ
diff --git a/plugins/UserFlag/icon_flag.gif b/theme/base/images/icons/twotone/green/flag.gif
index 68c8aee25..68c8aee25 100644
--- a/plugins/UserFlag/icon_flag.gif
+++ b/theme/base/images/icons/twotone/green/flag.gif
Binary files differ
diff --git a/theme/base/logo.png b/theme/base/logo.png
index 7c68b34f6..cf1839194 100644
--- a/theme/base/logo.png
+++ b/theme/base/logo.png
Binary files differ
diff --git a/theme/biz/css/base.css b/theme/biz/css/base.css
index 6357e55b4..2c2ab33a0 100644
--- a/theme/biz/css/base.css
+++ b/theme/biz/css/base.css
@@ -224,6 +224,15 @@ font-weight:bold;
address img + .fn {
display:none;
}
+address .poweredby {
+float:left;
+clear:left;
+display:block;
+position:relative;
+top:7px;
+margin-right:-47px;
+}
+
#header {
width:100%;
@@ -387,7 +396,7 @@ margin-bottom:1em;
}
#content {
-width:51.009%;
+width:50%;
min-height:259px;
padding:1.795%;
float:left;
@@ -413,7 +422,7 @@ float:left;
width:29.917%;
min-height:259px;
float:left;
-margin-left:0.385%;
+margin-left:1%;
}
#form_notice {
@@ -509,6 +518,44 @@ margin-bottom:0;
line-height:1.618;
}
+.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 {
position:relative;
@@ -575,8 +622,9 @@ display:none;
/*entity_actions*/
.entity_actions {
float:right;
-margin-left:4.35%;
-max-width:25%;
+margin-left:2%;
+margin-bottom:18px;
+min-width:21%;
}
.entity_actions h2 {
display:none;
@@ -585,7 +633,7 @@ display:none;
list-style-type:none;
}
.entity_actions li {
-margin-bottom:4px;
+margin-bottom:7px;
}
.entity_actions li:first-child {
border-top:0;
@@ -603,40 +651,95 @@ display:block;
text-align:left;
width:100%;
}
-.entity_actions a,
-.entity_nudge p,
-.entity_remote_subscribe {
+.entity_actions a {
text-decoration:none;
font-weight:bold;
display:block;
}
+.entity_actions a,
+.entity_actions input {
+border-radius:4px;
+-moz-border-radius:4px;
+-webkit-border-radius:4px;
+}
-.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_actions a,
+.entity_actions input,
+.entity_actions p {
+border-width:2px;
+border-style:solid;
+padding-left:23px;
}
-.entity_edit a,
-.entity_send-a-message a,
-.entity_nudge p {
-padding:4px 4px 4px 23px;
+.entity_actions a,
+.entity_actions p {
+padding:2px 4px 1px 26px;
}
-.entity_remote_subscribe {
-padding:4px;
-border-width:2px;
+.entity_actions .accept {
+margin-bottom:18px;
+}
+
+.entity_send-a-message button {
+position:absolute;
+top:3px;
+right:3px;
+}
+
+.entity_send-a-message .form_notice {
+position:absolute;
+top:34px;
+right:-1px;
+padding:1.795%;
+width:65%;
+z-index:2;
+ border-radius:7px;
+-moz-border-radius:7px;
+-webkit-border-radius:7px;
+border-width:1px;
border-style:solid;
+}
+.entity_send-a-message .form_notice legend {
+display:block;
+margin-bottom:11px;
+}
+
+.entity_send-a-message .form_notice label,
+.entity_send-a-message .form_notice select {
+display:none;
+}
+.entity_send-a-message .form_notice input.submit {
+text-align:center;
+}
+
+.entity_moderation {
+position:relative;
+}
+.entity_moderation p {
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
+font-weight:bold;
+padding-bottom:2px;
+margin-bottom:7px;
}
-.entity_actions .accept {
-margin-bottom:18px;
+.entity_moderation ul {
+display:none;
+}
+.entity_moderation:hover ul {
+display:block;
+min-width:21%;
+width:100%;
+padding:11px;
+position:absolute;
+top:-1px;
+right:-1px;
+z-index:1;
+border-width:1px;
+border-style:solid;
+border-radius:7px;
+-moz-border-radius:7px;
+-webkit-border-radius:7px;
}
.entity_tags ul {
@@ -800,6 +903,16 @@ float:left;
#shownotice .vcard .photo {
margin-bottom:4px;
}
+#content .notice .author .photo {
+position:absolute;
+top:11px;
+left:0;
+float:none;
+}
+#content .notice .entry-title {
+margin-left:59px;
+}
+
.vcard .url {
text-decoration:none;
}
@@ -808,12 +921,22 @@ text-decoration:underline;
}
.notice .entry-title {
-float:left;
-width:100%;
overflow:hidden;
}
+.notice .entry-title.ov {
+overflow:visible;
+}
+#showstream .notice .entry-title,
+#showstream .notice div.entry-content {
+margin-left:0;
+}
#shownotice .notice .entry-title {
+margin-left:110px;
font-size:2.2em;
+min-height:123px;
+}
+#shownotice .notice div.entry-content {
+margin-left:0;
}
.notice p.entry-content {
@@ -836,7 +959,7 @@ clear:left;
float:left;
font-size:0.95em;
margin-left:59px;
-width:65%;
+width:64%;
}
#showstream .notice div.entry-content,
#shownotice .notice div.entry-content {
@@ -870,36 +993,76 @@ display:inline-block;
text-transform:lowercase;
}
+.dialogbox {
+position:absolute;
+top:-4px;
+right:29px;
+z-index:9;
+min-width:199px;
+float:none;
+background-color:#FFF;
+padding:11px;
+border-radius:7px;
+-moz-border-radius:7px;
+-webkit-border-radius:7px;
+border-style:solid;
+border-width:1px;
+border-color:#DDDDDD;
+-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
+}
+
+.dialogbox legend {
+display:block !important;
+margin-right:18px;
+}
+
+.dialogbox button.close {
+position:absolute;
+right:3px;
+top:3px;
+}
+
+.dialogbox .submit_dialogbox {
+font-weight:bold;
+text-indent:0;
+min-width:46px;
+}
+
+#wrap form.processing input.submit,
+.entity_actions a.processing,
+.dialogbox.processing .submit_dialogbox {
+cursor:wait;
+outline:none;
+text-indent:-9999px;
+}
+
.notice-options {
position:relative;
font-size:0.95em;
-width:90px;
+width:113px;
float:right;
-margin-right:11px;
+margin-top:3px;
+margin-right:4px;
}
.notice-options a {
float:left;
}
-.notice-options .notice_delete,
.notice-options .notice_reply,
+.notice-options .form_repeat,
.notice-options .form_favor,
-.notice-options .form_disfavor {
-position:absolute;
-top:0;
+.notice-options .form_disfavor,
+.notice-options .repeated {
+float:left;
+margin-left:14.2%;
}
.notice-options .form_favor,
.notice-options .form_disfavor {
-left:0;
-}
-.notice-options .notice_reply {
-left:29px;
-}
-.notice-options .notice_delete {
-right:0;
+margin-left:0;
}
.notice-options input,
-.notice-options a {
+.notice-options a,
+.notice-options .repeated {
text-indent:-9999px;
outline:none;
}
@@ -910,22 +1073,34 @@ border:0;
.notice-options .notice_reply,
.notice-options .notice_delete {
text-decoration:none;
-padding-left:16px;
+}
+.notice .notice-options .notice_delete {
+float:right;
}
.notice-options form input.submit {
width:16px;
-padding:2px 0;
+height:16px;
+padding:0;
+border-radius:0;
+-moz-border-radius:0;
+-webkit-border-radius:0;
}
+.notice-options .form_repeat legend,
.notice-options .form_favor legend,
.notice-options .form_disfavor legend {
display:none;
}
+.notice-options .form_repeat fieldset,
.notice-options .form_favor fieldset,
.notice-options .form_disfavor fieldset {
border:0;
padding:0;
}
-
+.notice-options a,
+.notice-options .repeated {
+width:16px;
+height:16px;
+}
#usergroups #new_group {
float: left;
diff --git a/theme/biz/css/display.css b/theme/biz/css/display.css
index 7ea451576..f133ac30b 100644
--- a/theme/biz/css/display.css
+++ b/theme/biz/css/display.css
@@ -25,14 +25,33 @@ address {
margin-right:7.18%;
}
+input, textarea, select {
+border-width:2px;
+border-style: solid;
+border-radius:4px;
+-moz-border-radius:4px;
+-webkit-border-radius:4px;
+}
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
-input, textarea, select,
-.entity_remote_subscribe {
+input, textarea, select {
border-color:#AAAAAA;
}
-#filter_tags ul li {
+
+.form_settings fieldset fieldset {
+background:rgba(240, 240, 240, 0.2);
+box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+-moz-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+-webkit-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+}
+
+#filter_tags ul li,
+.entity_send-a-message .form_notice,
+.pagination .nav_prev a,
+.pagination .nav_next a,
+.form_settings fieldset fieldset,
+.entity_moderation:hover ul {
border-color:#DDDDDD;
}
@@ -40,39 +59,78 @@ border-color:#DDDDDD;
background:none;
}
-input.submit,
-#form_notice.warning #notice_text-count,
-.form_settings .form_note,
-.entity_remote_subscribe {
+.form_notice.warning #notice_text-count,
+.form_settings .form_note {
background-color:#9BB43E;
}
-
-input:focus, textarea:focus, select:focus,
-#form_notice.warning #notice_data-text {
-border-color:#9BB43E;
+input.submit,
+.form_notice.warning #notice_text-count,
+.form_settings .form_note,
+.entity_actions a,
+.entity_actions input,
+.entity_moderation 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);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
-input.submit,
-.entity_remote_subscribe,
-#site_nav_local_views a {
+.entity_actions a,
+.entity_actions input,
+.entity_actions p {
+border-color:transparent;
+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 {
+border-color:#9BB43E;
+}
+
+input.submit {
color:#FFFFFF;
}
+.entity_actions input.submit {
+border-color:transparent;
+text-shadow:none;
+}
+.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,
-#site_nav_local_views .current a,
-div.notice-options input,
-.form_user_block input.submit,
-.form_user_unblock input.submit,
-.form_group_block input.submit,
-.form_group_unblock input.submit,
-.entity_send-a-message a,
-.form_user_nudge input.submit,
-.entity_nudge p,
.form_settings input.form_action-primary,
-.form_make_admin input.submit {
-color:#002E6E;
+.notice-options input,
+.entity_actions a,
+.entity_actions input,
+.entity_moderation p {
+color:#002FA7;
}
#header a,
@@ -80,10 +138,22 @@ color:#002E6E;
color:#87B4C8;
}
+
+
.notice,
-.profile {
-border-top-color:#CEE1E9;
+.profile,
+.application,
+#content tbody tr {
+border-top-color:#C8D1D5;
}
+.mark-top {
+border-color:#AAAAAA;
+}
+
+#aside_primary {
+background-color:#144A6E;
+}
+
.section .profile {
border-top-color:#87B4C8;
}
@@ -101,18 +171,61 @@ color:#333333;
#form_notice.warning #notice_text-count {
color:#000000;
}
-#form_notice label[for=notice_data-attach] {
-background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
+.form_notice label[for=notice_data-attach] {
+background-position:0 -328px;
}
-#form_notice #notice_data-attach {
+.form_notice #notice_data-attach {
opacity:0;
}
-#wrap form.processing input.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,
+.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 {
+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;
-outline:none;
+}
+.notice-options .form_repeat.processing {
+background-image:none;
}
#content {
@@ -126,11 +239,13 @@ box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
border-color:#FFFFFF;
}
#content,
-#site_nav_local_views .current a {
+#site_nav_local_views .current a,
+.entity_send-a-message .form_notice,
+.entity_moderation:hover ul {
background-color:#FFFFFF;
}
-#site_nav_local_views li {
+#site_nav_local_views li.current {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
@@ -153,6 +268,13 @@ background-color:#F7E8E8;
background-color:#EFF3DC;
}
+button.close {
+background-position:0 -1120px;
+}
+button.minimize {
+background-position:0 -1912px;
+}
+
#anon_notice {
color:#FFFFFF;
}
@@ -162,79 +284,100 @@ 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;
-}
.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 {
-background-color:#9BB43E;
+.form_user_unsubscribe input.submit,
+.entity_subscribe a {
+background-color:#AAAAAA;
color:#FFFFFF;
}
-.form_user_unsubscribe input.submit,
.form_group_leave input.submit,
-.form_user_authorization input.reject {
-background-color:#87B4C8;
+.form_user_unsubscribe input.submit {
+background-position:5px -1246px;
+}
+.form_group_join input.submit,
+.form_user_subscribe 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 -718px;
}
.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 {
+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;
+}
+
/* 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,
@@ -271,19 +414,32 @@ 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:#CEE1E9;
+box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
+-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
+-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.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/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 3aebb239d..be341813a 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -1,7 +1,7 @@
/** theme: default
*
* @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
+ * @author Sarven Capadisli <csarven@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
@@ -18,7 +18,7 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em;
}
address {
-margin-right:5.7%;
+margin-right:5.3%;
}
input, textarea, select {
border-width:2px;
@@ -30,7 +30,9 @@ border-radius:4px;
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
-input, textarea, select {
+input, textarea, select,
+.entity_actions .dialogbox input,
+.mark-top {
border-color:#AAAAAA;
}
@@ -46,7 +48,9 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.entity_role:hover ul,
+.dialogbox {
border-color:#DDDDDD;
}
@@ -64,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);
@@ -78,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 {
@@ -123,7 +129,8 @@ a,
.notice-options input,
.entity_actions a,
.entity_actions input,
-.entity_moderation p {
+.entity_moderation p,
+.entity_role p {
color:#002FA7;
}
@@ -133,9 +140,6 @@ color:#002FA7;
#content tbody tr {
border-top-color:#C8D1D5;
}
-.mark-top {
-border-color:#AAAAAA;
-}
#aside_primary {
background-color:#C8D1D5;
@@ -144,7 +148,9 @@ background-color:#C8D1D5;
#notice_text-count {
color:#333333;
}
-.form_notice.warning #notice_text-count {
+.form_notice.warning #notice_text-count,
+.dialogbox,
+.entity_actions .dialogbox input {
color:#000000;
}
.form_notice label[for=notice_data-attach] {
@@ -181,26 +187,38 @@ 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,
-.form_reset_key input.submit {
+.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 {
+.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;
-outline:none;
+}
+.notice-options .form_repeat.processing {
+background-image:none;
}
#content {
@@ -216,7 +234,9 @@ border-color:transparent;
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.entity_role:hover ul,
+.dialogbox {
background-color:#FFFFFF;
}
@@ -282,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;
@@ -292,18 +313,21 @@ 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_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);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
@@ -334,9 +358,53 @@ 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;
}
+.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 {
diff --git a/theme/default/logo.png b/theme/default/logo.png
index 550d373fe..cf1839194 100644
--- a/theme/default/logo.png
+++ b/theme/default/logo.png
Binary files differ
diff --git a/theme/default/mobilelogo.png b/theme/default/mobilelogo.png
index b72f7aff5..66bb5f678 100644
--- a/theme/default/mobilelogo.png
+++ b/theme/default/mobilelogo.png
Binary files differ
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index 2818196c2..db85408eb 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -1,7 +1,7 @@
/** theme: identica
*
* @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
+ * @author Sarven Capadisli <csarven@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
@@ -30,7 +30,9 @@ border-radius:4px;
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
-input, textarea, select {
+input, textarea, select,
+.entity_actions .dialogbox input,
+.mark-top {
border-color:#AAAAAA;
}
@@ -46,7 +48,9 @@ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.entity_role:hover ul,
+.dialogbox {
border-color:#DDDDDD;
}
@@ -64,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);
@@ -78,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 {
@@ -88,6 +94,7 @@ color:#FFFFFF;
border-color:transparent;
text-shadow:none;
}
+
.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
@@ -123,7 +130,8 @@ a,
.notice-options input,
.entity_actions a,
.entity_actions input,
-.entity_moderation p {
+.entity_moderation p,
+.entity_role p {
color:#002FA7;
}
@@ -133,9 +141,6 @@ color:#002FA7;
#content tbody tr {
border-top-color:#CEE1E9;
}
-.mark-top {
-border-color:#AAAAAA;
-}
#aside_primary {
background-color:#CEE1E9;
@@ -144,7 +149,9 @@ background-color:#CEE1E9;
#notice_text-count {
color:#333333;
}
-.form_notice.warning #notice_text-count {
+.form_notice.warning #notice_text-count,
+.dialogbox,
+.entity_actions .dialogbox input {
color:#000000;
}
.form_notice label[for=notice_data-attach] {
@@ -181,26 +188,38 @@ 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,
-.form_reset_key input.submit {
+.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 {
+.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;
-outline:none;
+}
+.notice-options .form_repeat.processing {
+background-image:none;
}
#content {
@@ -216,7 +235,9 @@ border-color:transparent;
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
-.entity_moderation:hover ul {
+.entity_moderation:hover ul,
+.entity_role:hover ul,
+.dialogbox {
background-color:#FFFFFF;
}
@@ -281,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;
@@ -291,18 +313,21 @@ 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_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);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
@@ -333,9 +358,52 @@ 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;
}
+.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 {
diff --git a/theme/identica/mobilelogo.png b/theme/identica/mobilelogo.png
index b72f7aff5..66bb5f678 100644
--- a/theme/identica/mobilelogo.png
+++ b/theme/identica/mobilelogo.png
Binary files differ
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